假设我们有一个变量'a',它最后应代表4位的值,例如。 a =“0011”。从VHDL实例读取该变量的单个位。
让我们假设VHDL输出的第一位是1,例如result_from_VHDL_instance = 1。 然后我将这个最重要的位存储在我的变量a:
中 set a [BUS2INT result_from_VHDL_instance]; # a = 1
现在我如何将剩余的位连接到这个变量。假设VHDL输出的第二位再次为1,例如1。 result_from_VHDL_instance = 1.我想将此位连接到已存储在a中的位,例如, a = 11。
所以这继续,对于下一位,例如。 result_from_VHDL_instance = 0,a的值 应该是110等。
编辑:
到目前为止,感谢您的回答,但我认为我在这里有一个更基本的问题。第一个问题是TCL中是否存在用于二进制表示的数据类型,例如。 a = 1011.如果没有,那么我要么必须将变量表示为字符串或整数,是否有任何建议?
答案 0 :(得分:3)
我只是使用一个字符串,将字符0和1附加到它,然后,当变量收集了所有输入时,使用带有b*
说明符的binary format将其转换为实数整数,像这样:
set val ""
append val 0
append val 1
...
append val 1
...
set int [binary format b* $val]
# or, in case the digit characters were pushed from the opposite end
set int [binary format b* [string reverse $val]]
您还可以使用expr玩游戏:
set val 0
set val [expr {($val << 1) | 0x00}]
...
set val [expr {($val << 1) | 0x01}]
...
答案 1 :(得分:2)
我想你只是想:
append a [BUS2INT result_from_VHDL_instance]
答案 2 :(得分:0)
或者,您可以这样做:
set a "${a}[BUS2INT result_from_VHDL_instance]"