【问题标题】:TCL: concatenating output bits in variableTCL:连接变量中的输出位
【发布时间】:2012-01-26 13:07:49
【问题描述】:

假设我们有一个变量“a”,它最后应该代表一个 4 位的值,例如。 一个=“0011”。这个变量的单个位是从 VHDL 实例中读取的。

假设 VHDL 输出的第一位是 1,例如result_from_VHDL_instance = 1。 然后我将这个最重要的位存储在我的变量 a 中:

  set a [BUS2INT result_from_VHDL_instance]; # a = 1

现在我如何将剩余的位连接到这个变量。假设 VHDL 输出的第二位再次为 1,例如result_from_VHDL_instance = 1。我现在想将此位连接到已经存储在 a 中的位,例如a = 11。

这样继续下去,下一点,例如。 result_from_VHDL_instance = 0,a的值 应该是 110 等。

编辑:

到目前为止,感谢您的回答,但我认为我在这里有一个更基本的问题。第一个问题是 TCL 中是否存在这种用于二进制表示的数据类型,例如。 a = 1011。如果不是,那么我要么必须将变量表示为字符串或整数,有什么建议吗?

【问题讨论】:

  • 要消除错误,只需在命令中删除第二个 $。但不清楚你真正想做什么。
  • 是的,错误消失了,但我没有得到想要的结果。我编辑了我的帖子,希望它现在更有意义
  • @Patrick,kostix 在他的回复中给出了你更新问题的答案。

标签: tcl


【解决方案1】:

我将只使用一个字符串,将字符 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}]
...

【讨论】:

    【解决方案2】:

    我想你只是想要:

    append a [BUS2INT result_from_VHDL_instance]
    

    【讨论】:

    • 鉴于后来对该问题的编辑,我认为 kostix 的答案更合适。
    【解决方案3】:

    或者,您可以这样做:

    set a "${a}[BUS2INT result_from_VHDL_instance]"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 2015-11-24
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多