大多数ASIC/FPGA实现都使用同步逻辑的同步设计(图)

Verilog时序逻辑硬件建模设计(三)同步计数器

-同步计数器

如果所有存储元件都由相同的源时钟信号触发,则称该设计是同步的。同步设计的优点是总传播延迟等于触发器或存储元件的传播延迟。STA 非常容易进行同步逻辑分析,甚至可以通过使用流水线来提高性能。大多数 ASIC/FPGA 实现使用同步逻辑。本节介绍同步计数器的设计。

四位二进制计数器用于从“0000”到“1111”计数,四位BCD计数器用于从“0000”到“1001”计数。图5.14 显示了一个四位二进制计数器,其中每一级被两个计数器划分。

图5.14位四位二进制计数器

如图5.14。计数器有四个输出线“QA、QB、QC、QD”,其中“QA”是 LSB,“QD”是 MSB。“QA”处的输出在每个时钟脉冲上切换一次,因此除以 2。“QB”处的输出每两个时钟周期切换一次,因此它可以被 4 整除,“QC”处的输出每四个时钟周期切换一次,所以它是能被八整除。类似地,“QD”处的输出每 8 个周期切换一次,因此“QD”处的输出除以输入时钟时间周期的 16。在实际应用中,计数器用作时钟分频器网络。在分频合成器中使用偶数计数器来产生可变频率输出。

三位数向上计数器

计数器用于在时钟的有效边沿上生成预定义和所需的计数序列。使用可综合结构为计数器编写高效的 RTL 代码在 ASIC/FPGA 设计中至关重要。Verilog 中描述了一个三位递增计数器,以生成可综合的设计。计数器在时钟上升沿从“000”计数到“111”,并在下一个计数上升沿循环回到“000”。示例 5.7 中描述的计数器是一个可预设的计数器,具有同步激活的高“load_en”输入以采样所需的三位预设值。数据输入为三位,表示为“data_in”。

计数器有一个低电平有效异步“reset_n”输入,当它为低电平时,“q_out”上的输出状态为“000”。在正常操作期间,“reset_n”处于高电平状态。

可合成输出如图5.15 所示,具有三位数据输入线“data_in”、高电平有效“load_en”和低电平有效复位输入“reset_n”。输出由“q_out”和“clk”触发的上升沿时钟指示。

示例 5.7 Verilog RTL 用于三位递增计数器

图5.15位三位加计数器综合顶层图

三位递减计数器

Verilog 中描述了三位递减计数器的生成和综合设计。计数器从“111”计数到“000”,在时钟的上升沿触发,达到“000”的计数值后,在下一个计数的上升沿循环回到“111”。三位递减计数器的时序如图5.16 所示。

示例5.9 中描述的计数器是一个可预设的计数器,具有同步激活的高电平“load_en”输入,用于对所需的三位可预设值进行采样。数据输入为三位,表示为“data_in”。

图5. 16位二进制递减计数器的时序

用于 8 个三位递减计数器的示例 5.Verilog RTL

图5.17 集成三位递减计数器顶层图

计数器有一个低异步“reset_n”输入,当它为低时,输出“q_out”的状态为“000”。在正常操作期间,“reset_n”处于高电平状态。

可合成输出如图5.17 所示,具有三位数据输入线“data_in”、高电平有效“load_en”和低电平有效复位输入“reset_n”。输出由“q_out”和“clk”触发的上升沿时钟指示。

三个上下计数器

Verilog 中描述了由三位上下计数器生成的可综合时序设计。递减计数器从“111”计数到“000”,在时钟上升沿触发,达到计数值“000”后,在下一个计数上升沿循环回到“111”。递增计数器从“000”计数到“111”,在时钟的上升沿触发,达到“000”的计数值后,在下一个计数上升沿循环回到“000”。

图5.18 显示了三位二进制加减计数器的内部结构。当 UP/DOWN 等于逻辑“1”时,计数器用作向上计数器,当 UP/DOWN 等于“0”时,计数器用作向下计数器。

示例5.9 中描述的计数器是一个可预设的计数器,具有同步激活的高电平“load_en”输入,用于对所需的三位可预设值进行采样。数据输入为三位,表示为“data_in”。向上或向下计数操作由输入“up_down”选择,“up_down=1”计数器用作向上/向下计数器,“up_down=0”计数器用作向下/向下计数器。

计数器有一个低电平有效异步“reset_n”输入,当它为低电平时,输出“q_out”上的状态为“000”。在正常操作期间,“reset”为高电平(例如 5.9).

图5.18位三位上下计数器

可合成输出如图5.19 所示,具有三位数据输入线“data_in”、高电平有效“load_en”和低电平有效复位输入“reset_n”。输出由“q_out”和“clk”触发的上升沿时钟指示,选择行为“up_down”。

示例 5.9 三位加减计数器的 Verilog RTL

图5.19 三位递增递减计数器顶层综合模块

灰色计数器

格雷码计数器用于多时钟域设计,因为在时钟边沿只有一位变化。格雷码也用于同步器中。

此示例中描述了格雷码计数器,相对于计数器的先前输出,在有效时钟沿上只有一位发生了变化。在这种情况下,高电平复位输入为“rst”。当“rst=1”时,计数器“out”的输出分配为“0000”。

示例 5.10 中描述的计数器是一个可预设的计数器,它具有一个同步有效的高电平“load_en”输入,用于对所需的四位可预设值进行采样。数据输入为四位,表示为“data_in”。

计数器有一个高电平有效异步复位“rst”输入,当它为高电平有效时8位可逆计数器设计代码,输出线“out”上的状态为“0000”。在正常操作期间,“rst”为低电平。

示例 5.10 四位灰度计数器

格雷码和二进制计数器

在大多数实际应用中,需要二进制和格雷码计数器。格雷码计数器可以通过使用组合逻辑从二进制计数器输出生成。有关二进制到灰度和灰度到二进制转换器的信息,请参阅之前的文章。

示例中描述了参数二进制和格雷码计数器,并描述了 Verilog RTL 以生成四位二进制和格雷码输出。对于“rst_n=0”,二进制和格雷码计数器输出分配值“0000”。四位格雷码输出表示为“灰色”(例如 5.11).

四位二进制计数器的模拟结果如下图5.20所示,时钟计数器每上升一个上升沿,输出就加1。

示例 5.11 用于参数化二进制和格雷码计数器的 Verilog RTL

图5.20 四位二进制计数器的时序

环形计数器

环形计数器在实际应用中用于提供预定义的延迟。这些计数器本质上是同步的,以引入一定数量的预定义延迟,并用于交通灯控制器、计时器等实际应用中。图5.21展示了一个使用D触发器的四位环形计数器的内部逻辑结构,如图所示,MSB触发器的输出反馈到LSB触发器输入,计数器在时钟信号数据的每个有效边沿上移动。

四位环形计数器的 Verilog RTL 在示例 5.12 中进行了描述8位可逆计数器设计代码,该计数器具有“set_in”输入,用于将输入初始化值设置为“1000”,并在时钟信号的上升沿运行。

综合逻辑如图5.22 所示。

图5.21 环形计数器内部结构

示例 5.12 个四位环形计数器的 Verilog RTL

图5.22 四位环形计数器的综合逻辑

约翰逊计数器

Johnson 计数器是一种特殊类型的同步计数器,采用移位寄存器设计。三位约翰逊计数器的内部结构如图5.23 所示。

四位数 Johnson 计数器的 Verilog RTL 如示例 5.13 所示。

综合逻辑如图5.24 所示。

图 5.23 三位约翰逊计数器

13 个四位 Johnson 计数器的示例 5.Verilog RTL

图5.24位四位约翰逊计数器集成逻辑

参数化计数器

在实际应用中,为了提高计数器的可读性和复用性,通过定义参数来设计计数器。参数整数值可用于定义计数器的位数。图 5.25 显示了 8 位参数化计数器的 Verilog RTL。

参数化计数器的可综合顶层模块如图5.26所示。

图 5. 25 个八位字节参数化计数器的 Verilog RTL

图5.26 参数化计数器的综合逻辑

数字硬件建模综述

数字硬件建模 – 从另一个角度理解 Verilog (一)

数字硬件建模——从另一面重新理解 Verilog (二)

组合逻辑硬件建模设计(一)逻辑门

组合逻辑硬件建模设计(二)算术电路

Verilog/SV 代码检查器 – Lint 建模规则检查器和验证器

Verilog 组合逻辑设计指南

Verilog 时序逻辑硬件建模设计(一)Latch D-latch and Flip-Flop

Verilog时序逻辑硬件建模设计(二)同步和异步复位

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论