Verilog HDL的赋值语句分为阻塞赋值和非阻塞赋值两种。阻塞赋值是指在当前赋值完成前阻塞其他类型的赋值任务,阻塞赋值由=来完成;非阻塞赋值在赋值的同时,其他非阻塞赋值可以同时被执行,非阻塞赋值由《=来完成。
(1)组合逻辑中的阻塞和非阻塞
eg.
always@(a or b or c or d)
begin
t1 = a & b;
t2 = c & d;
out = t1 | t2;
end
当abcd均由0变为1时,采用阻塞赋值语句时:t1=1,t2=1,out=1;
采用非阻塞赋值语句时:t1=1,t2=1,out=0。非阻塞赋值每一条语句执行不会阻止其他非阻塞语句的同时执行,故此时的t1和t2还未更新,所以out的值不变。
(2)时序逻辑中的阻塞和非阻塞
eg.实现D触发器
always@(posedge clk)
begin
q1 《= d;
q2 《= q1;
end
采用非阻塞赋值时,q1=d,q2=q1;采用阻塞赋值时q1=q2=d,不符合D触发器的要求。
综述:对于组合逻辑(always模块敏感列表为电平触发),采用阻塞赋值(=);对于非阻塞逻辑(always模块敏感列表为边沿触发),采用非阻塞赋值(《=)。
原文标题:阻塞赋值与非阻塞赋值
文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。
全部0条评论
快来发表一下你的评论吧 !