module try();
reg clk;
reg r1,r2,r3;
always #2 clk=~clk;
initial begin
clk=0;
{r1,r2,r3}=0;
forever begin
@(posedge clk) begin
r1 <= ~r1;
r2 <= ~r2;
repeat(2)@(negedge clk)
r3 <= ~r3;
end
end
end
endmodule
先看一段代码,来看看阻塞赋值与非阻塞赋值;下图是该非阻塞代码的波形图
非阻塞赋值直接可以忽略掉repeat(2),因为都是重复的事,下面我们将代码改成阻塞赋值,再来看看输出波形怎么样;
module try();
reg clk;
reg r1,r2,r3;
always #2 clk=~clk;
initial begin
clk=0;
{r1,r2,r3}=0;
forever begin
@(posedge clk) begin
r1 <= ~r1;
r2 <= ~r2;
repeat(2)@(negedge clk);
r3 = ~r3;
end
end
end
endmodule
重要的改动不是将r3的赋值改成阻塞赋值,而是在negedge clk后面加了;号进行一次空的操作,这样代码块就被下一个negedge clk给阻塞了;生成的波形如下图所示:很明显的看到阻塞了;