初学者读夏宇闻老师书上一个问题,是关于阻塞赋值和非.....

2019-07-16 01:11发布

阻塞赋值操作符用等号(即 = )表示。为什么称这种赋值为阻塞赋值呢?这是因为在赋值时先计算等号
右手方向(RHS)部分的值,这时赋值语句不允许任何别的 Verilog 语句的干扰,直到现行的赋值完成时
刻,即把 RHS 赋值给 LHS 的时刻,它才允许别的赋值语句的执行。
非阻塞赋值操作符用小于等于号 (即 <= )表示。为什么称这种赋值为非阻塞赋值?这是因为在赋值操作
时刻开始时计算非阻塞赋值符的 RHS 表达式,赋值操作时刻结束时更新 LHS。
这两句话读过来读过去还是同一句话么,计算RHS表达式,然后赋值么。谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
fantasy1989
2019-07-16 05:02
你应该看一看例子:
always@(posedge clk)
begin
b=a;
c=b;
end

always@(posedge clk)
begin
b<=a;
c<=b;
end
这两句的不同。
前一个,所谓阻塞,是指b=a这个赋值完成之前,后面的c=b语句是不执行的,所以这个always块把a的现值传给b,b又传给了c,相当于把a赋给c;
后一个,这两个赋值没有前后,他把a的现值赋给b;b把自己当前值赋给c,所以没有把a的现值传给c;
你画一下电路图,或者综合后看一下电路,可以看出其中的区别。

一周热门 更多>