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块中对同一个变量赋值;

相关推荐
ARM+FPGA+AI工业主板定制专家15 小时前
基于ZYNQ的目标检测算法硬件加速器优化设计
人工智能·目标检测·计算机视觉·fpga开发·自动驾驶
cycf15 小时前
时钟特性约束(四)
fpga开发
江苏学蠡信息科技有限公司1 天前
STM32中硬件I2C的时钟占空比
stm32·单片机·fpga开发
OliverH-yishuihan1 天前
FPGA 入门 3 个月学习计划表
学习·fpga开发
FPGA狂飙1 天前
传统FPGA开发流程的9大步骤是哪些?
fpga开发·verilog·fpga·vivado·xilinx
我爱C编程1 天前
【硬件片内测试】基于FPGA的完整DQPSK链路测试,含频偏锁定,帧同步,定时点,Viterbi译码,信道,误码统计
fpga开发·帧同步·viterbi译码·dqpsk·频偏锁定·定时点
szxinmai主板定制专家1 天前
【NI测试方案】基于ARM+FPGA的整车仿真与电池标定
arm开发·人工智能·yolo·fpga开发
爱吃汽的小橘2 天前
基于ads1256的ADC控制实现
fpga开发
易享电子3 天前
基于单片机车窗环境监测控制系统Proteus仿真(含全部资料)
单片机·嵌入式硬件·fpga开发·51单片机·proteus
cycf3 天前
系统同步接口输入延迟(五)
fpga开发