rtl 阻塞赋值和非阻塞赋值区别,请举例说明
时间: 2024-03-29 13:40:03 浏览: 186
RTL(Register Transfer Level)是数字电路设计中的一个级别,它描述了硬件电路的行为和操作。在 RTL 设计中,常用的赋值语句有阻塞赋值和非阻塞赋值。
阻塞赋值(Blocking Assignment)是指在赋值语句执行期间,该语句后面的语句必须等待该语句执行完成后才能执行。例如下面的代码:
```
always @ (posedge clk)
begin
a = b;
c = a;
end
```
在上面的代码中,当 `clk` 上升沿到来时,`a` 被赋值为 `b`,然后 `c` 被赋值为 `a`。由于使用的是阻塞赋值,所以在执行 `a = b` 期间,后面的语句必须等待,直到 `a` 被赋值成功后才能执行。因此,`c` 的值将是上一次 `a` 的值,而不是当前的 `a` 的值。
非阻塞赋值(Non-Blocking Assignment)是指在赋值语句执行期间,该语句后面的语句可以立即执行,不需要等待该语句执行完成。例如下面的代码:
```
always @ (posedge clk)
begin
a <= b;
c <= a;
end
```
在上面的代码中,当 `clk` 上升沿到来时,`a` 被赋值为 `b`,然后 `c` 被赋值为 `a`。由于使用的是非阻塞赋值,所以在执行 `a <= b` 期间,后面的语句可以立即执行,不需要等待,因此,`c` 的值将是当前的 `a` 的值,而不是上一次的 `a` 的值。
总结来说,阻塞赋值和非阻塞赋值的区别在于执行的顺序和时间,阻塞赋值会阻塞后续语句的执行,而非阻塞赋值则不会。
阅读全文