Verilog中阻塞赋值=和非阻塞赋值<=理解一

本文详细介绍了Verilog语言中非阻塞赋值(<=)与阻塞赋值(=)的区别。非阻塞赋值在时序逻辑设计中更为常见,其赋值操作在always块结束后完成,适合描述触发器行为。阻塞赋值则在执行过程中立即改变变量值,可能导致意外结果。通过示例展示了两种赋值方式在电路实现上的差异,强调了正确使用的重要性。
摘要由CSDN通过智能技术生成

本文主要参考夏宇闻的Verilog数字系统设计

1. 非阻塞赋值方式(b<=a)

(1)在语句块中,上面语句所赋的变量值不能立即就为下面的语句所用;

(2)块结束后才能完成这次赋值操作,而所赋的变量是上一次赋值所得到的

(3)在编写可综合的时序逻辑模块时,这是最常用的赋值方式。

example

用非阻塞赋值法确定reg型信号b和c

always @ (posedge clk)begin
  b_reg <= a_reg;
  c_reg <= b_reg;
end

该always块中,用了非阻塞赋值方式,定义两个reg信号b和c,clk信号的上升沿到来时,b就等于a, c就等于b, 这里用到了两个触发器。

注意:赋值是在always 块结束后执行的,c应为原来的b的值。

这个always块描述的电路功能如下:

2. 阻塞赋值方式(b=a)

(1)赋值语句执行完成后,块才结束;

(2)b的值在赋值语句执行完后立刻就改变的

(3)在时序逻辑中使用时,可能会产生意向不到的结果

example

用阻塞赋值法确定reg型信号b和c

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

该always块中用了阻塞赋值方式,clk的信号上升沿到来时,将发生如下变化:b马上取a的值,c马上取b的值(即等于a)。 

 这个always块描述的电路如下

 图中只用了一个触发器来寄存a的值,又输出给b和c。这大概不是设计者的初衷。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值