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

相关推荐
XMAIPC_Robot2 小时前
RK3576/RK3588+FPGA+AI数据采集系统:实时性与边缘AI算力兼顾
人工智能·fpga开发·机器人·数据采集·rk3588+fpga·rk3576+fpga
1560820721921 小时前
JFMRFVU3P5G的bit正常,但烧录mcs程序后加载异常
fpga开发
狂奔蜗牛(bradley)21 小时前
把 EtherCAT 初始化从 FPGA 搬到 ARM:命令通道的接口设计与11个坑
arm开发·人工智能·fpga开发·架构
女神下凡2 天前
芯参谋(37):EEPROM_电路设计指南
arm开发·单片机·嵌入式硬件·fpga开发·设计规范
szxinmai主板定制专家3 天前
工业视觉新思路:FPGA图像预处理+RK NPU推理,实现高速缺陷检测
人工智能·嵌入式硬件·fpga开发·rk3576+codesys
FPGA小徐3 天前
【硬件实战】立创 EDA 绘制 TF/SD 卡模块电路|SPI 模式原理图 + 阻抗匹配 + PCB 布局布线全教程
单片机·嵌入式硬件·fpga开发
狂奔蜗牛(bradley)3 天前
EtherCAT DC 分布式时钟同步的 ModelSim 仿真:从帧模板到从站行为建模
人工智能·嵌入式硬件·fpga开发·架构
ALINX技术博客4 天前
8 通道同步采样 ADC!AN706 波形显示实验 【FPGA黑金云课堂】
fpga开发
szxinmai主板定制专家4 天前
RK3568+FPGA+CODESYS异构控制方案:赋能半导体设备与工业自动化升级
人工智能·fpga开发·自动化·rk3576·半导体设备
辰丁电子4 天前
allegro入门教程-菜单栏Logic
fpga开发·pcb设计·pcb工艺·layout·pcb layout