Tcl二进制循环。二进制增量

Tcl二进制循环。二进制增量,tcl,verilog,modelsim,Tcl,Verilog,Modelsim,我正在尝试为我的解码器模块(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 } { $

我正在尝试为我的解码器模块(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中增加二进制数字的正确方法是什么?

不知道这是否有助于您(复制如下)它创建了一个以二进制表示数字的字符串升序列表。但这可能不是Verilog想要您的数据的方式

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

使用Tcl,您不需要增加二进制数字。将数字格式化为二进制。在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<=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
vsim work.decode\u shift
添加wave-noupdate-format逻辑-基数二进制/解码\u移位/din
添加wave-noupdate-format逻辑-基数二进制/解码/dout

对于{set i 0}{$iisn,这不是一个从0到7的循环吗?如果需要将其转换为二进制字符串,可以使用format.yes,十进制格式。但是如何将十进制分配给二进制din?我得到“错误:(vsim-4011)无效的强制值:2”一旦我到达'2'。你最好使用
foreach
,在这种情况下;我非常喜欢
foreach
。。我也喜欢这一个的简单性,b/c如果你想改为灰色代码,那真的很容易。
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
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