Verilog中非阻塞赋值与阻塞赋值

1、阻塞赋值:b=a;

1.1、特点:

一般用于组合逻辑。

这种方式是马上执行,也就是说,执行找下一条语句时,b已经等于a。

1.2、为什么"="称为阻塞赋值?

在赋值计算时,先计算"="右手方向(RHS)部分的值,这时赋值语句不允许任何别的Verilog语句的干扰,直到现行的赋值完成时刻。也就是说,把RHS赋值给LHS的时刻,它允许别的赋值语句的执行。

一般可综合的赋值操作在RHS不能设定有延迟。若在RHS上加上延迟,则在延迟期间会阻止赋值语句的执行,延迟后才执行赋值,这种赋值语句是不可综合的。

因此,可以认为:只有一个步骤的操作,即:计算RHS并更新LHS,此时,不允许有来自任何其他Verilog语句的干扰。

2、非阻塞赋值:b<=a;

2.1、特点:

一般用于时序逻辑。

一般"always"模块内的reg型信号都是采用这种赋值方式。

"always"块内的下一条语句执行后,b并不等于a,而是保持原来的值,"always"块执行结束后,才进行赋值。

2.2、为什么"<="称为非阻塞赋值?

在赋值操作时刻开始时,计算RHS表达式,赋值操作结束时刻结束才更新LHS,在计算RHS和更新LHS期间,其他的Verilog语句,包括其他的verilog非阻塞赋值语句都能同时计算RHS和更新LHS。

允许其他的Verilog语句同时进行操作。

因此,可认为:

(1)在赋值开始时刻,计算非阻塞赋值RHS

(2)在赋值结束时刻,更新非阻塞赋值LHS

3、用非阻塞赋值法确定reg型信号

c 复制代码
always@(posedge clk)
	begin
		b<=a;
		c<=b;
	end

4、编程要点

(1)时序电路、锁存器电路,用非阻塞赋值;

(2)用always块描述组合逻辑时,用阻塞赋值;

(3)在同一个always块中描述时序和混合电路时,用非阻塞赋值;

(4)不要在同一个always块中同时使用阻塞和非阻塞赋值;

(5)严禁在多个always块中对同一个变量赋值;

相关推荐
FPGA之旅1 天前
FPGA从零到一实现FOC(一)之PWM模块设计
fpga开发·dubbo
XMAIPC_Robot1 天前
基于ARM+FPGA的光栅尺精密位移加速度测试解决方案
arm开发·人工智能·fpga开发·自动化·边缘计算
cycf1 天前
状态机的设计
fpga开发
szxinmai主板定制专家1 天前
【精密测量】基于ARM+FPGA的多路光栅信号采集方案
服务器·arm开发·人工智能·嵌入式硬件·fpga开发
千宇宙航1 天前
闲庭信步使用SV搭建图像测试平台:第三十二课——系列结篇语
fpga开发
千宇宙航2 天前
闲庭信步使用SV搭建图像测试平台:第三十一课——基于神经网络的手写数字识别
图像处理·人工智能·深度学习·神经网络·计算机视觉·fpga开发
小眼睛FPGA2 天前
【RK3568+PG2L50H开发板实验例程】FPGA部分/紫光同创 IP core 的使用及添加
科技·嵌入式硬件·ai·fpga开发·gpu算力
forgeda2 天前
如何将FPGA设计验证效率提升1000倍以上(2)
fpga开发·前沿技术·在线调试·硬件断点·时钟断点·事件断点
9527华安3 天前
FPGA实现40G网卡NIC,基于PCIE4C+40G/50G Ethernet subsystem架构,提供工程源码和技术支持
fpga开发·架构·网卡·ethernet·nic·40g·pcie4c
search73 天前
写Verilog 的环境:逻辑综合、逻辑仿真
fpga开发