数字门级电路可分为两大类:组合逻辑和时序逻辑。锁存器是组合逻辑和时序逻辑的一个交叉点,在前面会作为单独的主题处理。
组合逻辑描述了门级电路,其中逻辑块的输出直接反映到该块的输入值的组合,例如,双输入AND门的输出是两个输入的逻辑与。如果输入值发生变化,输出值将反映这一变化,组合逻辑的RTL模型须要反映这些门级行为用jk触发器实现t触发器,这意味着逻辑块的输出必须一直反映该逻辑块当前输入值的组合。
SystemVerilog有三种在可综合RTL级别表示组合逻辑的方式:连续形参句子、always程序块和函数。接下来几篇文章将阐述每种编码风格,并推荐最佳实践编码风格。
时序逻辑概念
时序逻辑描述了一种重要的门级电路,其中输出反映了一个由门的内部状态储存的值。只有特定的输入变化用jk触发器实现t触发器,如时钟沿,才会造成储存的变化。对于D触发器,时钟输入的特定边缘将改变触发器的储存,但D输入值的变化并不直接改变储存。相反,特定的时钟沿会使触发器的内部储存更新为时钟沿的D输入值。
时序逻辑的RTL模型须要反映这些门级行为,也就是说,逻辑块的输出必须在一个或多个时钟周期内储存一个值,并且只为特定的输入变化而更新储存的值,而不是所有输入变化。在RTL层面,一个always或always_ff过程被拿来模拟这些时序行为。本系列文章主要研究:
触发器和寄存器的RTL模型
触发器和寄存器被拿来在一段时间内储存信息。术语触发器和寄存器常常被当做同义词使用,尽管它们在加载和复位的形式上可能存在差别。触发器是一种存储元件,在时钟沿上改变储存的状态。各种各样的硬件应用都可以由触发器建立,如计数器、数据寄存器、控制寄存器、移位寄存器和状态寄存器。寄存器可以由任何类型的数据储存设备完善,包括触发器、锁存器和RAM。大多数硬件寄存器是由触发器构建的。
时序逻辑触发器和寄存器的RTL模型是用一个带有灵敏度列表的always或always_ff过程建模的,该过程使用时钟边缘来触发过程的评估。一个RTL触发器的事例是:
一般来说,RTL模型被写成在时钟输入的正边缘触发触发器。所有的ASIC和FPGA元件都支持在时钟的上升沿(正边缘)触发的触发器。一些ASIC或FPGA元件还支持在时钟的增长沿触发的触发器。触发器和由触发器组成的寄存器可以是不可复位或可复位的。复位可以是同步的,也可以是与时钟触发不同步的。一些触发器也有一个异步复位输入。
在门级设计中,有几种类型的触发器,例如。SR, D,JK和T触发器。RTL模型可以从这个实现细节中具象下来,并被写成通用的触发器。
在RTL建模中,重点是设计功能,而不是设计实现。综合编译器的作用是将具象的RTL功能描述映射到具体的门级实现。大多数ASIC和FPGA元件使用D型触发器,所以本文假定综合编译器从RTL触发器中推论出的触发器类型。
RTL时序逻辑的综合要求
当always程序的敏感度列表包含关键字posedge或negedge时,综合编译器将尝试推论出一个触发器。然而,综合编译器还要求满足以下额外的代码限制,以便推算出一个触发器。