首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tcl二进制循环。二进制增量

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

Stack Overflow用户
提问于 2012-05-19 22:18:18
回答 2查看 1.6K关注 0票数 2

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

这就是我现在所想出来的。

代码语言:javascript
复制
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中增加二进制位的正确方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2012-05-20 03:40:25

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

代码语言:javascript
复制
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,你可以这样做:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2012-05-19 22:42:25

不知道这是否能帮助你http://codepad.org/YX4nfMIS (如下所示),它会生成一个二进制表示数字的字符串升序列表。但这可能不是Verilog想要的数据。

代码语言:javascript
复制
set l { "000" "001" "010" "011" "100" "101" "110" "111"}
for { set i 0} { $i<8 } { incr i } {
 puts [lindex $l $i]
}

或者就像Donal指出的那样

代码语言:javascript
复制
set l { "000" "001" "010" "011" "100" "101" "110" "111"}
foreach i $l {
  puts $i
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10665943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档