2

我正在尝试为我的解码器模块(modelsim 中的 verilog)编写一个 tcl 脚本,我需要将 'din' 输入值从 000 循环到 111
这就是我现在想出的。

vsim work.decode_shift
add wave -noupdate -format Logic -radix binary  /decode_shift/din
add wave -noupdate -format Logic -radix binary  /decode_shift/dout
for { set i 0 } { $i==0111 } { incr i } {
    force din $i
    run 100
}
run @500ns

由于某些我不知道如何绕过的类型问题,它不起作用。我在做什么错,在 tcl 中增加二进制数字的正确方法是什么?

4

2 回答 2

2

使用 Tcl,您不会增加二进制数字。您将数字格式化为二进制。在 8.6 之前,您可以使用binary format和的组合binary scan来进行转换,如下所示:

vsim work.decode_shift
add wave -noupdate -format Logic -radix binary  /decode_shift/din
add wave -noupdate -format Logic -radix binary  /decode_shift/dout
for { set i 0 } { $i<=7 } { incr i } {      # Need non-binary literal
    # Convert to 8 binary digits, store result in “i_bin” variable
    binary scan [binary format c $i] B8 i_bin

    force din $i_bin; # Assume takes 8 bits; [string range] to trim otherwise
    run 100
}
run @500ns

如果你有 8.6,你可以这样做:

vsim work.decode_shift
add wave -noupdate -format Logic -radix binary  /decode_shift/din
add wave -noupdate -format Logic -radix binary  /decode_shift/dout
for { set i 0 } { $i<=0b111 } { incr i } {   # Binary literal...
    force din [format %04b $i]; # width 4 field, zero padded on left
    run 100
}
run @500ns
于 2012-05-19T19:40:25.103 回答
0

不知道这是否会帮助您http://codepad.org/YX4nfMIS(转载如下) 它以二进制表示数字的字符串的升序列表。但这可能不是 Verilog 想要您的数据的方式。

set l { "000" "001" "010" "011" "100" "101" "110" "111"}
for { set i 0} { $i<8 } { incr i } {
 puts [lindex $l $i]
}

或者正如多纳尔指出的那样

set l { "000" "001" "010" "011" "100" "101" "110" "111"}
foreach i $l {
  puts $i
}
于 2012-05-19T14:42:25.177 回答