在verilog中生成自定义波形

问题描述 投票:0回答:2

我尝试使用下面的代码在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 = 15时相对于t = 0而不是t =为0 8(即之前的声明)。

有办法吗?我尝试过交换阻塞和非阻塞分配,但没有成功!

谢谢,
开发

verilog
2个回答
3
投票

你可以这样做:

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


0
投票

模块顶部_模块( 输入[2:0]向量, 输出[2:0]outy, 输出out0, 输出out1, 输出2 );

assign outy = vec;
assign out0 = vec[0];
assign out1 = vec[1];
assign out2 = vec[2];

结束模块

© www.soinside.com 2019 - 2024. All rights reserved.