レジスタには双方向端子が存在するため、これまでに説明していた方法で はエラーが生じ、シミュレーションができないと思います。
以下のようにすることで、シミュレーションを行うことが出来ますので、参考 にしてください。
例として、プログラムカウンタを示します。
テストベクタのファイルは、以下のようにします。双方向の信号は "DATA" と なっていますが、テストベクタを与える際には "io_DATA" とします。また、 書き込みを行わない時の値はハイインピーダンス状態 (16'hZZZZ) にしておき ます。
注) 信号の名前の付け方によっては、単に "io_" を付けるだけでは駄目かも しれません。まず、"Stimulus Option" において 雛型として作製される "testfixture.verilog" 内を確認して下さい。
io_DATA[15:0] = 16'bzzzzzzzzzzzzzzzz;
# clock CLK 100 # input RST R I W io_DATA[15:0] # testvector # RST R I W io_DATA[15:0] 0 0 0 0 0 16'hZZZZ 150 1 0 0 0 16'hZZZZ 100 0 0 0 1 16'h1234 100 0 0 0 0 16'hZZZZ 100 0 1 0 0 16'hZZZZ 100 0 0 1 0 16'hZZZZ 100 0 0 0 0 16'hZZZZ 100 0 0 0 0 16'hZZZZ 100 0 0 0 0 16'hZZZZ
integer i0; initial begin CLK = 1'b1; for( i0=0 ; i0<19 ; i0=i0+1 ) CLK = #50 ~CLK; $finish; end initial begin RST = # 0 0; RST = # 150 1; RST = # 100 0; RST = # 100 0; RST = # 100 0; RST = # 100 0; RST = # 100 0; RST = # 100 0; RST = # 100 0; end initial begin R = # 0 0; R = # 150 0; R = # 100 0; R = # 100 0; R = # 100 1; R = # 100 0; R = # 100 0; R = # 100 0; R = # 100 0; end initial begin I = # 0 0; I = # 150 0; I = # 100 0; I = # 100 0; I = # 100 0; I = # 100 1; I = # 100 0; I = # 100 0; I = # 100 0; end initial begin W = # 0 0; W = # 150 0; W = # 100 1; W = # 100 0; W = # 100 0; W = # 100 0; W = # 100 0; W = # 100 0; W = # 100 0; end initial begin io_DATA[15:0] = # 0 16'hZZZZ; io_DATA[15:0] = # 150 16'hZZZZ; io_DATA[15:0] = # 100 16'h1234; io_DATA[15:0] = # 100 16'hZZZZ; io_DATA[15:0] = # 100 16'hZZZZ; io_DATA[15:0] = # 100 16'hZZZZ; io_DATA[15:0] = # 100 16'hZZZZ; io_DATA[15:0] = # 100 16'hZZZZ; io_DATA[15:0] = # 100 16'hZZZZ; end
Our mail address is
kite@arch.cs.kumamoto-u.ac.jp .
Last modified on