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 で 2 進数をインクリメントする適切な方法は何ですか?

4

2 に答える 2

2

Tcl では、2 進数をインクリメントしません。数値をバイナリとしてフォーマットします。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
于 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 に答える