Verilog设计:时序反馈移位寄存器与阻塞非阻塞赋值解析

需积分: 17 2 下载量 54 浏览量 更新于2024-08-20 收藏 447KB PPT 举报
"时序反馈移位寄存器建模-Verilog数字系统设计-阻塞和非阻塞赋值" 本文将探讨时序反馈移位寄存器的建模以及在Verilog语言中如何利用阻塞和非阻塞赋值进行数字系统设计。时序反馈移位寄存器,即线性反馈移位寄存器(LFSR),是一种特殊的移位寄存器,其特点在于它通过一个生成多项式的线性函数将输出反馈到输入端,形成一个自循环的状态序列。生成多项式决定了LFSR的特性,例如,当m=3时,一个本原多项式可以生成一个3位的伪随机序列。 在Verilog中,LFSR的建模通常涉及使用`always`块,这是一个关键的结构,用于描述时序逻辑和组合逻辑。`always`块的事件控制表达式可以是沿触发(如posedge或negedge)或电平触发。对于时序逻辑,尤其是时序反馈移位寄存器,我们通常需要一个单一的时钟边沿(如posedge)来驱动状态的更新。在`always`块中,所有的变量应声明为`reg`类型,以表示它们是存储元件,可以保存状态。 在理解阻塞赋值(blocking assignment)和非阻塞赋值(non-blocking assignment)时,我们需要区分它们在电路行为上的差异。阻塞赋值 (`=`) 会在当前仿真时间点立即更新变量的值,而这个更新会影响到同一时刻后续的计算。相比之下,非阻塞赋值 (`<=`) 将变量的更新推迟到当前时间点的仿真结束,这意味着在同一个`always`块中的后续计算仍然使用的是赋值前的旧值,这在描述时序逻辑时尤为重要,因为它可以防止组合逻辑反馈导致的错误。 在设计时序逻辑电路时,避免在`always`块中创建组合反馈回路是非常重要的,因为这可能导致综合器插入不必要的电平敏感锁存器。如果无法避免,设计者必须明确地处理这些锁存器,以确保综合器能够正确地生成电路。另外,对于`reg`或`integer`变量,其赋值只能在一个`always`块内完成,多个`always`块对同一变量的赋值会导致语法错误。 在Verilog中,使用`'bx`赋值表示不确定状态,综合器会尽可能简化处理这类状态的硬件。阻塞赋值通常与输入电平变化直接关联,而非阻塞赋值则更多地用于描述时序逻辑中的延迟更新,以确保状态机等时序元素的行为正确。 理解和正确使用Verilog中的阻塞和非阻塞赋值对于构建时序反馈移位寄存器和其他复杂的数字系统至关重要。设计者需要确保逻辑的清晰性和综合器的兼容性,以避免潜在的错误和性能问题。