これは整理するのが最も簡単な問題ですが、何らかの理由でそれを理解できません。私は現在 Verilog を独学で学んでおり、演習として非常に基本的なモジュールとこれらのモジュール用のテスト ベンチを開発しています。これらのモジュールの 1 つが D フリップフロップ (DFF) です。DFF モジュールは次のとおりです (リセットなし)。
module DFF( clk, D, Q );
parameter n = 1; // DFF width
input clk;
input [n-1:0] D;
output [n-1:0] Q;
reg [n-1:0] Q;
always @( posedge clk ) begin
Q <= D;
end
endmodule
テストベンチは次のとおりです。
module DFF_tb;
reg clk, D;
reg Q;
DFF #(1) DUT ( clk, D, Q );
initial begin
clk = 1'b0;
forever #10 clk = ~clk; // Generate clock
end
initial begin
D = 0; // Check D = 0
if ( Q !== 0 ) $display( "[FAIL] Q = 0" );
#40 D = 1; // Check D = 1
#40
if ( Q !== 1 ) $display( "[FAIL] Q = 1" );
$finish; // Complete test
end
endmodule
そして、ここにシミュレーションがあります:
テスト ベンチ reg Q は、シミュレーションの間 x のままです (Q[0] はそうではありません...)。
理由はありますか?ありがとう!