原创 verilog学习笔记【阻塞赋值】

2010-6-20 19:31 1674 1 1 分类: FPGA/CPLD

阻塞赋值和非阻塞赋值。


阻塞赋值:=


非阻塞赋值:<=


verilog有持续赋值(assign)和过程赋值(always、initial)。持续赋值针对网线类型,且只能使用阻塞的赋值方式。过程赋值针对寄存器类型,阻塞和非阻塞都可以用。


阻塞赋值。


module block(clk,a,b,c);
input clk;
input a;
output b,c;
wire a;
reg b,c;


always@(posedge clk)
begin
    b = a;
    c = b;
end
endmodule


点击看大图


d4ec6c8e-ce76-4587-a582-7dbe8ba8300c.jpg


非阻塞赋值。


module non_block(clk,a,b,c);
input clk;
input a;
output b,c;
wire a;
reg b,c;


always@(posedge clk)
begin
    b <= a;
    c <= b;
end
endmodule


点击看大图


2a50ee60-8c1a-45c8-ac2e-351e7f8ca19d.jpg


总结。


从名字上来区分。非阻塞赋值的的意思是赋值过程是不阻塞仿真流程的,赋值是在当前仿真时间结束前的最后一刻才进行的;阻塞赋值的意思是赋值过程是阻塞仿真流程的,只有赋值完以后,仿真才可以往下走。


考虑一下把非阻塞赋值程序改成下面这样,结果会怎么改变?


always@(posedge clk)
begin
    b <= a;
    #5
    c <= b;
end


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
1
关闭 站长推荐上一条 /3 下一条