3、阻塞赋值与非阻塞赋值
赋值语句的赋值方式有两种,分别为“<=”(非阻塞赋值)和 “=”(阻塞赋值)。
1. 非阻塞赋值:
(1) 在 begin-end 串行语句块中,一条非阻塞过程语句的执行不会阻塞下一语句的执行,也就是说在本条非阻塞型过程赋值语句对应的赋值操作执行完之前,下一条语句也可以开始执行;
(2) 仿真过程在遇到非阻塞型过程赋值语句后 首先计算其右端赋值表达式的值,然后等到仿真时间结束时再将该计算结果赋值变量。 也就是说,这种情况下的赋值操作是在同一仿真时刻上的其他普通操作结束后才得以执行。
always@(posedge sys_clk or negedge sys_rst_n)begin
if(sys_rst_n == 1'b0)
begin
in_reg <= 2'b0;
out <= 2'b0;
end
else
begin
in_reg <= in;
out <= in_reg;
end
end
2. 阻塞赋值:
(1) 在 begin-end 串行语句块中的各条阻塞型过程赋值语句将以它们在顺序块后排列次序依次得到执行;
(2) 阻塞型过程赋值语句的执行过程是:首先计算右端赋值表达式的值,然后立即将计算结果赋值给 “=” 左端的被赋值变量。
always@(posedge sys_clk or negedge sys_rst_n)begin
if(sys_rst_n == 1'b0)
begin
in_reg = 2'b0;
out = 2'b0;
end
else
begin
in_reg = in;
out = in_reg;
end
end