没有任何寄存器逻辑,RTL设计是不完整的。RTL是寄存器传输级或逻辑,用于描述依赖于当前输入和过去输出的数字逻辑。
同步和异步复位
在ASIC/FPGA设计中,何时使用异步复位或同步复位总是导致设计者头脑混乱。同步复位信号在时钟边缘和数据路径的一部分进行采样,而异步复位信号的采样与时钟信号无关,而与数据路径或数据输入逻辑的一部分无关。本节介绍使用异步和同步复位的Verilog RTL for 触发器。
D触发器异步复位
异步复位不是数据路径的一部分,用于初始化触发器,而不考虑时钟边沿,因此称为异步复位。这种初始化触发器的技术不推荐用于生成内部复位信号,因为它容易出现故障。设计者需要注意在内部同步该复位信号,以避免出现故障。内部同步复位信号应用于存储元件。复位解除(reset deassertion)是异步复位信号的主要问题,采用两级同步器可以克服这一问题。两级同步器(Level synchronizer)避免了复位解除期间的绕线情况。
Verilog RTL如图所示,使用低电平异步复位信号“reset_n”(示例5.3)。
图5.10显示了具有异步复位“reset_n”的D触发器的综合逻辑。
示例5.3 D触发器,带低电平异步复位信号“reset_n”输入
图5.10 带低电平异步复位信号输入的综合D触发器
D触发器同步复位
在同步复位中,复位信号是作为数据路径的数据输入的一部分,取决于活动时钟边沿。同步复位不存在故障或危险(glitches or hazards)问题,因此这种方法最适合设计。该机制不需要额外的同步电路。
例5.4中描述了Verilog RTL,它使用低电平同步复位信号“reset_n”。
示例5.4 D触发器,带有源低同步复位输入
图5.11同步复位D触发器的综合逻辑
带同步复位输入的正边沿触发D触发器的综合逻辑如图5.11所示。
带使能异步复位的触发器
在大多数实际应用中,需要多个异步输入。考虑一个应用程序,当激活输入时,它需要加载输入数据。即使在复位信号激活且有效时,也必须等待初始化寄存器。如果两个异步输入同时到达,则输出应取决于这些信号的优先级分配。
如示例5.5所示,两个异步输入被命名为“reset_n”和“load_en”。“ reset_n”具有最高优先级,“load_en”具有最低优先级。使用“if-else”构造优先级。
综合逻辑如图5.12所示。
示例5.5带异步“reset_n”和“load_en”的D触发器的Verilog RTL
图5.12异步复位D触发器的综合输出
带使能同步复位的触发器
如果多个信号或输入是数据路径的一部分,并且在时钟的活动边沿上采样,则在时钟的活动边缘上分配时序单元的输出。考虑示例5.6中所示的Verilog RTL,输入“reset_n”和“load_en”是同步输入并在时钟的正边上采样。同步输入“reset_n”具有最高优先级,“load_en”具有最低优先级。
综合逻辑如图5.13所示,“reset_n”和“load_en”是数据路径的一部分。
示例5.6带同步“reset_n”和“load_en”的D触发器
图5.13带同步“reset_n”和“load_en”的综合逻辑
原文:OpenFPGA
作者:碎碎思
相关文章推荐
更多FPGA技术干货请关注FPGA 的逻辑技术专栏。