0

「clk」が「1」に変更されるたびに「d」の値を「z」に入れるようにコーディングしています。

例えば、

clk=0 d=        15, z=         x
clk=1 d=        20, z=        20
clk=0 d=        25, z=        20
clk=1 d=        30, z=        30

clkが「1」の場合は常に「d」の値を「z」に入れます。

以下は、乱数に対して20回繰り返すコードです。

module lab9;
reg [31:0] d;
reg clk, enable, flag;
wire [31:0] z;
reg [31:0] e;
register #(32) mine(z, d, clk, enable);

always begin
#5 clk = ~clk;

end

initial
#1 $monitor("%5d: clk=%b,d=%d,z=%d,expect=%d", $time,clk,d,z, e);

initial begin 
clk=0;
flag = $value$plusargs("enable=%b", enable);

repeat (20) begin
#2 d = $random;
end
$finish; 

end 

endmodule 

そして、私が得る出力:

    1: clk=0,d=         x,z=         x,expect=         x
    2: clk=0,d= 303379748,z=         x,expect=         x
    4: clk=0,d=3230228097,z=         x,expect=         x
    5: clk=1,d=3230228097,z=3230228097,expect=         x
    6: clk=1,d=2223298057,z=3230228097,expect=         x
    8: clk=1,d=2985317987,z=3230228097,expect=         x
   10: clk=0,d= 112818957,z=3230228097,expect=         x
   12: clk=0,d=1189058957,z=3230228097,expect=         x
   14: clk=0,d=2999092325,z=3230228097,expect=         x
   15: clk=1,d=2999092325,z=2999092325,expect=         x
   16: clk=1,d=2302104082,z=2999092325,expect=         x
   18: clk=1,d=  15983361,z=2999092325,expect=         x
   20: clk=0,d= 114806029,z=2999092325,expect=         x
   22: clk=0,d= 992211318,z=2999092325,expect=         x
   24: clk=0,d= 512609597,z=2999092325,expect=         x
   25: clk=1,d= 512609597,z= 512609597,expect=         x
   26: clk=1,d=1993627629,z= 512609597,expect=         x
   28: clk=1,d=1177417612,z= 512609597,expect=         x
   30: clk=0,d=2097015289,z= 512609597,expect=         x
   32: clk=0,d=3812041926,z= 512609597,expect=         x
   34: clk=0,d=3807872197,z= 512609597,expect=         x
   35: clk=1,d=3807872197,z=3807872197,expect=         x
   36: clk=1,d=3574846122,z=3807872197,expect=         x
   38: clk=1,d=1924134885,z=3807872197,expect=         x
   40: clk=0,d=3151131255,z=3807872197,expect=         x

この出力の 6 行目は「2223298057」である必要がありますが、clk が「1」に設定されていても以前の「z」の値が残っています。

どうすればこれを修正できますか?

4

2 に答える 2

1

あなたが提示した出力の動作から、

register #(32) mine(z, d, clk, enable);

は 32 個の D タイプ フリップフロップのセットであり、その名前と接続した信号の名前からもそう思われます。のコードを提供していただければ、質問への回答がより簡単になりますregister

したがって、registerが実際に 32 個の D タイプ フリップフロップのセットである場合z、時間 6 で変化することは期待できません。これは、あらゆる種類のフリップフロップの動作ではありません: フリップフロップの出力は 1 つのみで変化します (クロックの立ち上がりまたは立ち下がり) エッジ。

この演習を開始する前にこれらの D タイプのフリップフロップが存在していたことを考えると、変更dが速すぎるように思われます。クロック ( clk) サイクルごとに 1 回、つまり 1 回ごとに変更する必要があります#10。つまり、変更してみてください

#2 d = $random;

#10 d = $random;
于 2016-03-22T20:26:11.003 に答える