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

相关推荐
坏孩子的诺亚方舟5 天前
FPGA系统架构设计实践15_高云Arora V系列时钟体系
fpga开发·系统架构
FPGA小徐5 天前
入门 CNN 结构全解析|从流程图理论到 FPGA Verilog 硬件实现(含习题带讲解)
fpga开发
FPGA小徐5 天前
FPGA 数字信号处理:并行 FIR 与串行滤波器设计原理、对比与完整 Verilog 实现
fpga开发
Saniffer_SH6 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
zlinear数据采集卡6 天前
双核架构深度解析:ARM+FPGA如何让数据采集卡实现500Ksps高性能?
arm开发·fpga开发·架构
9527华安6 天前
FPGA实现GTH Transceivers Wizard传输2路视频,基于aurora 8b10b编解码架构,提供4套工程源码和技术支持
fpga开发·gth·aurora 8b10b·transceivers
FPGA小徐7 天前
FPGA 数字信号处理(二):并行 FIR 滤波器的 Verilog 全流程设计与实现
fpga开发
国科安芯7 天前
基于AS32S601ZIT2型抗辐照MCU的商业航天卫星姿态确定与控制系统研究
单片机·嵌入式硬件·安全·fpga开发·架构·risc-v
ALINX技术博客7 天前
【黑金云课堂】FPGA技术教程FPGA基础:I2C 总线通信技术
fpga开发·i2c
Hello-FPGA7 天前
Xilinx KU040 FPGA Camera Link 图像采集
c++·fpga开发