一 阻塞赋值
特点:
依次执行。
rtl代码:
a=1,b=2,c=3,
begin
a=b+1;
b=a+2;
c=a-1;
end
易得,a=3,b=5,c=2;
verilog代码:
module blocking
(
input wire sys_clk, //时钟信号
input wire sys_rst_n, // 复位信号
input wire [1:0] in, //in信号位宽为2bit
output reg [1:0] out
);
reg in_reg;
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n=1'b0) //异步易位
begin
in_reg=2'b0;
out =2'b0;
end
else
begin
in_reg=in;
out =in_reg;
end
endmodule
二 非阻塞赋值
特点:
并行执行。
rtl代码:
a=1,b=2,c=3,
begin
a<=b+1;
b<=a+2;
c<=a-1;
end
易得,a=3,b=3,c=0;
非阻塞赋值只可对reg型变量进行操作,不可对wire型变量进行操作。