阻塞赋值与非阻塞赋值:
在描述组合逻辑电路的时候,使用阻塞赋值,比如 assign 赋值语句和不带时钟的 always 赋值语句,这种电路结构只与输入电平的变化有关系
在描述时序逻辑的时候,使用非阻塞赋值,综合成时序逻辑的电路结构,比如带时钟的 always 语句;这种电路结构往往与触发沿有关系,只有在触发沿时才可能发生赋值的变化
assign 和 always 区别:
assign 语句使用时不能带时钟。
always 语句可以带时钟,也可以不带时钟。在 always 不带时钟时,逻辑功能和 assign 完全一致,都是只产生组合逻辑。
比较简单的组合逻辑推荐使用 assign 语句,比较复杂的组合逻辑推荐使用 always 语句。在always带时钟信号时,这个逻辑语句才能产生真正的寄存器
什么是 latch
latch 是指锁存器,是一种对脉冲电平敏感的存储单元电路。锁存器和寄存器都是基本存储单元,锁存器是电平触发的存储器,寄存器是边沿触发的存储器。
两者的基本功能是一样的,都可以存储数据。锁存器是组合逻辑产生的,而寄存器是在时序电路中使用,由时钟触发产生的。
latch的主要危害是会产生毛刺,这种毛刺对下一级电路时很危险的。并且隐蔽性很强,不易查出。因此,在设计中,因避免latch的使用。
代码中出现latch的两个原因时在组合逻辑中,if或者case语句不完整的描述,比如if缺少else分支,case缺少default分支,导致代码在综合过程中出现了latch。解决办法就是if必须带else分支,case必须带default分支。只有不带时钟的 always 语句 if 或者 case 语句不完整才会产生 l
FPGA学习笔记(一)
最新推荐文章于 2024-05-10 15:31:53 发布