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

时间:2012-05-19 14:18:18

标签: tcl verilog modelsim

我正在尝试为我的解码器模块编写一个tcl脚本(在modelsim中的verilog) 我需要将'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中增加二进制数字的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

使用Tcl,您不会增加二进制数字。您将数字格式化为二进制。在8.6之前,您使用binary formatbinary 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

答案 1 :(得分: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]
}

或者Donal指出

set l { "000" "001" "010" "011" "100" "101" "110" "111"}
foreach i $l {
  puts $i
}