以verilog

时间:2016-07-27 09:11:02

标签: verilog

我正在尝试使用下面的代码在verilog中生成波形,但结果并不像预期的那样。

initial begin
    d = 1'b0;
#8  d <= 1'b1;
#15 d <= 1'b0;
end

它的初始值是0(OK),在t = 8时,它的1(OK)但是在t = 23时,它是0.相反,我希望它相对于t = 0在t = 15时为0而不是t = 8(即先前的陈述)。

有没有办法这样做?我尝试过交换阻止和非阻塞分配,但没有运气!

谢谢,
开发

1 个答案:

答案 0 :(得分:2)

你可以这样做:

initial fork
    d = 1'b0;
#8  d = 1'b1;
#15 d = 1'b0;
join

fork join内的所有语句将同时执行

或者你可以这样做:

initial     d = 1'b0;
initial  #8 d = 1'b1;
initial #15 d = 1'b0;

显然,三个初始块将同时执行。

如果您真的想从过程(顺序)代码安排3个事件,那么您可以这样做:

initial begin
  d  =     1'b0;
  d <=  #8 1'b1;
  d <= #15 1'b0;
end

这使用分配内延迟和非阻塞分配。

http://www.edaplayground.com/x/4MiS