Verilog测试台中的信号未从初始状态向前发送

Verilog测试台中的信号未从初始状态向前发送,verilog,iverilog,edaplayground,Verilog,Iverilog,Edaplayground,我正在使用两个相互连接的d_触发器(DFF)系统(第一个DFF的输出q连接到第二个触发器的输入d。我创建了DFF的子模块,并将它们嵌入到顶部模块中。然后我创建了一个测试台。但是问题是,不管我提供的时间延迟如何,模拟都不会超过初始状态。它说模拟在t=0时完成。而编译时没有错误,我不明白我的代码有什么问题。我还尝试在测试台上提供绝对时间值作为延迟(例如50ns而不是50 ns)但是没有用。我试着在iverilog中模拟这一点,也尝试了不同的编译器。如果有人能为我的问题提供见解,那将对我有很大帮助。

我正在使用两个相互连接的d_触发器(DFF)系统(第一个DFF的输出q连接到第二个触发器的输入d。我创建了DFF的子模块,并将它们嵌入到顶部模块中。然后我创建了一个测试台。但是问题是,不管我提供的时间延迟如何,模拟都不会超过初始状态。它说模拟在t=0时完成。而编译时没有错误,我不明白我的代码有什么问题。我还尝试在测试台上提供绝对时间值作为延迟(例如50ns而不是50 ns)但是没有用。我试着在iverilog中模拟这一点,也尝试了不同的编译器。如果有人能为我的问题提供见解,那将对我有很大帮助。 谢谢大家!

模块d_ff(d,时钟,复位,q,q_非);
输入d,时钟,复位;
输出q,q_非;
注册q,q_非;
始终@(重置或posedge clk)
开始
如果(重置==0)
开始
q这是:

正在终止模拟,因为所有初始语句都以并行方式运行。请将其删除,并在主初始语句末尾添加$finish或$stop。
也最好将所有clk分配移动到clk块中,与重置和b相同:

initial
begin
   clk = 1'b0;
   forever 
      #50ns clk = !clk;
end


initial
begin
   $monitor("clk = %b, d=%b, reset=%b, q=%b, q_not=%b, d2_not=%b", clk,d,reset, q2,q2_not, q1_not);
   d=1'b0;
   reset=1'b1;
   #500ns reset=1'b0;
   #500 reset =1'b1;
   #500 d=1'b1;
   #500 reset =1'b0;
   #500 d=1'b0;
   ...
   $finish; // $stop;
end
这:

正在终止模拟,因为所有初始语句都以并行方式运行。请将其删除,并在主初始语句末尾添加$finish或$stop。
也最好将所有clk分配移动到clk块中,与重置和b相同:

initial
begin
   clk = 1'b0;
   forever 
      #50ns clk = !clk;
end


initial
begin
   $monitor("clk = %b, d=%b, reset=%b, q=%b, q_not=%b, d2_not=%b", clk,d,reset, q2,q2_not, q1_not);
   d=1'b0;
   reset=1'b1;
   #500ns reset=1'b0;
   #500 reset =1'b1;
   #500 d=1'b1;
   #500 reset =1'b0;
   #500 d=1'b0;
   ...
   $finish; // $stop;
end