TCL:连接变量中的输出位

时间:2012-01-26 13:07:49

标签: tcl

假设我们有一个变量'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.如果没有,那么我要么必须将变量表示为字符串或整数,是否有任何建议?

3 个答案:

答案 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]"