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

569c69681db7e5550cf06f99acb8d307.png

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

-Synchronous Counters

没有任何寄存器逻辑,RTL设计是不完整的。RTL是寄存器传输级或逻辑,用于描述依赖于当前输入和过去输出的数字逻辑。
c9d5bc58a101d3f0bb2c510367df41ec.png

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

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

d9642994a3cc2fa3a786edefbee7a3f7.png图5.14四位二进制计数器

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

三位递增计数器

计数器用于在时钟的活动边缘上生成预定义和所需的计数序列。在ASIC/FPGA设计中,使用可综合结构为计数器编写有效的RTL代码是至关重要的。用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”触发的正边缘时钟指示。

db246d3813f039ebd6f179e5c45c7684.png示例5.7三位递增计数器的Verilog RTL aa5b132094185d31c870142277931dba.png图5.15三位递增计数器综合顶层图

三位递减计数器Three-Bit Down Counter

用Verilog描述了三位递减计数器的产生和综合设计。计数器从“111”计数到“000”,在时钟的正边缘触发,并在达到计数值“000”后在计数的下一个正边缘环回到“111”。三位递减计数器的时序如图5.16所示。

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

7b8bd20c05204f3ec20a341e87468b76.png图5.16三位二进制递减计数器的时序 7e4a6c90f937f32ff4d2b5c6db5acd65.png示例5.8三位递减计数器的Verilog RTL 6277c3662ed785fb746a0a054eb4e6be.png图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”。在正常操作期间,“复位”处于高电平状态(示例5.9)。

d854d3239bee6cf9d69186ee4d32ad05.png图5.18三位递增、递减计数器

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

353ba3df0a37c37cdf04bbc88117e0da.png示例5.9三位递增、递减计数器的Verilog RTL f9ee49698f82baff4166fbfc3f988f85.png图5.19三位递增、递减计数器顶层综合模块

格雷码计数器Gray Counters

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

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

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

计数器具有激活的高电平异步复位“rst”输入,当它处于激活的高电平时,输出行“out”上的状态为“0000”。正常运行期间,“rst”处于低电平状态。

6287a42a3926b3d71704bc55da924731.png 8e68a83eba78b8bf065647e137eacbd6.png示例5.10四位Gray计数器

格雷码和二进制计数器

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

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

四位二进制计数器的模拟结果如下面的时序图5.20所示,并且对于时钟计数器的每个正边缘,输出增量为1。

5ac525b470cb1fa9812d6183ca897048.png示例5.11参数化二进制和格雷码计数器的Verilog RTL 51adfaa3b4d6df81a6d3cb64847ce84b.png图5.20四位二进制计数器的时序

环形计数器Ring Counters

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

示例5.12中描述了四位环形计数器的Verilog RTL,计数器具有“set_in”输入,以将输入初始化值设置为“1000”,并在时钟信号的正边缘工作。

综合逻辑如图5.22所示。

2c78c884414e79784734d93e4bb29369.png图5.21环形计数器内部结构 fe2b7d6d3d9b82209cbf459a549b6b16.png示例5.12四位环形计数器的Verilog RTL 9a3f6847a3b334cc8ef7f12c61144591.png图5.22四位环形计数器的综合逻辑

约翰逊计数器Johnson Counters

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

四位约翰逊计数器的Verilog RTL如例5.13所示。

综合逻辑如图5.24所示。

3393a7418bf16113a0d6a63857dfb75e.png图5.23三位约翰逊计数器 0acbe81cedaae5d4486707b5e3b7b3c3.png示例5.13四位约翰逊计数器的Verilog RTL 1179117912d51754db75c75bc7b3713d.png图5.24四位约翰逊计数器的综合逻辑

参数化计数器

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

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

1236a98eac968f27d45d16cb9ae3c6a4.png图5.25八位参数化计数器的Verilog RTL b71715307b72e98907e627fcc4cc993a.png图5.26参数化计数器的综合逻辑

8d04e6a043bdc35ac9ced07dc47d2b61.png

数字硬件建模综述


ab59a18164adad8c2cf76baabd03e79f.png

数字硬件建模-从另一方面理解Verilog(一)


9d9b2501aa295a621b6ca2009f3274e6.png

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


ddec6954281a970d942c0490047b4777.png

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


8c83ba410bcff986f2d2fe493fe7adaa.png

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


ae0f6ebd13706c644840eccde66d03e0.png

Verilog/SV代码检查器-Lint 建模规则检查器与 Verilator


35677527267ef7854ca66da9fd3f121e.png

Verilog组合逻辑设计指南


f2d35df33d6f4a322b269e3277d778f0.png

Verilog时序逻辑硬件建模设计(一)锁存器D-latch和触发器Flip-Flop


b8512d0a83544fcd21128bb127e18235.png

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



  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OpenFPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值