Это должна быть самая простая проблема, которую нужно решить, но по какой-то причине я просто не могу понять это. В настоящее время я изучаю Verilog и в качестве упражнения разрабатываю очень простые модули и тестовые стенды для этих модулей. Одним из таких модулей является 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] не...).
Есть идеи, почему? Спасибо!