0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Verilog时序逻辑中同步计数器的功能和应用

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2022-03-15 11:06 次阅读

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

48b095fe-9756-11ec-952b-dac502259ad0.png

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

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

48c23980-9756-11ec-952b-dac502259ad0.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”触发的正边缘时钟指示。

48d615cc-9756-11ec-952b-dac502259ad0.png

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

48ec0e5e-9756-11ec-952b-dac502259ad0.png

图5.15三位递增计数器综合顶层图

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

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

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

49028f3a-9756-11ec-952b-dac502259ad0.png

图5.16三位二进制递减计数器的时序

491941d0-9756-11ec-952b-dac502259ad0.png

示例5.8三位递减计数器的Verilog RTL

49317372-9756-11ec-952b-dac502259ad0.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)。

493f1234-9756-11ec-952b-dac502259ad0.png

图5.18三位递增、递减计数器

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

4975c6da-9756-11ec-952b-dac502259ad0.png

示例5.9三位递增、递减计数器的Verilog RTL

498acbf2-9756-11ec-952b-dac502259ad0.png

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

格雷码计数器Gray Counters

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

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

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

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

49a66970-9756-11ec-952b-dac502259ad0.png

49bfe238-9756-11ec-952b-dac502259ad0.png

示例5.10四位Gray计数器

格雷码和二进制计数器

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

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

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

49d526fc-9756-11ec-952b-dac502259ad0.png

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

49ea88bc-9756-11ec-952b-dac502259ad0.png

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

环形计数器Ring Counters

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

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

综合逻辑如图5.22所示。

4a1e5c32-9756-11ec-952b-dac502259ad0.png

图5.21环形计数器内部结构

4a36a760-9756-11ec-952b-dac502259ad0.png

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

4a4ea5ea-9756-11ec-952b-dac502259ad0.png

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

约翰逊计数器Johnson Counters

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

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

综合逻辑如图5.24所示。

4a65b3de-9756-11ec-952b-dac502259ad0.png

图5.23三位约翰逊计数器

4a7e8936-9756-11ec-952b-dac502259ad0.png

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

4aae0c1a-9756-11ec-952b-dac502259ad0.png

图5.24四位约翰逊计数器的综合逻辑

参数化计数器

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

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

4abfa40c-9756-11ec-952b-dac502259ad0.png

图5.25八位参数化计数器的Verilog RTL

4ad629de-9756-11ec-952b-dac502259ad0.png

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

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117721
  • Verilog
    +关注

    关注

    28

    文章

    1326

    浏览量

    109302
  • 计数器
    +关注

    关注

    32

    文章

    2121

    浏览量

    92976

原文标题:Verilog时序逻辑硬件建模设计(三)同步计数器

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    时序逻辑电路的精华——计数器

    时序逻辑电路的精华——计数器
    的头像 发表于 12-29 09:23 1056次阅读

    计数器时序电路原理及实验

    计数器时序电路原理及实验  一、实验目的1、了解时序电路的经典设计方法(D触发、JK触发和一般
    发表于 10-10 11:47

    【转】 时序逻辑电路的三种逻辑器件

    时序逻辑电路应用很广泛,根据所要求的逻辑功能不同进行划分,它的种类也比较繁多。在具体的授课环节,主要选取了应用较广、具有典型
    发表于 10-25 23:03

    【FPGA开源教程连载】第三章 时序逻辑电路设计之计数器

    本帖最后由 芯航线跑堂 于 2016-12-25 01:52 编辑 时序逻辑电路设计之计数器实验目的:以计数器为例学会简单的时序
    发表于 12-21 19:15

    时序电路设计的计数器详解

    的状态有关。这跟组合逻辑电路相反,组合逻辑的输出只会跟目前的输入成一种函数关系。换句话说,时序逻辑拥有储存元件(内存)来存储信息,而组合逻辑
    发表于 01-24 06:35

    格雷码计数器Verilog描述

    格雷码计数器Verilog描述
    发表于 08-03 09:39 45次下载
    格雷码<b class='flag-5'>计数器</b>的<b class='flag-5'>Verilog</b>描述

    中规模集成时序逻辑设计

    中规模集成时序逻辑设计:计数器:在数字逻辑系统中,使用最多的时序电路要算计数器了。它是一种对输入
    发表于 09-01 09:09 13次下载

    时序逻辑电路

    实验十六  时序逻辑电路? 实验(1) 计数器?一、实验目的?⒈ 熟悉计数器的设计方法及工作原理。?⒉ 了解同步
    发表于 09-24 22:17 3223次阅读
    <b class='flag-5'>时序</b><b class='flag-5'>逻辑</b>电路

    基于MSI的N进制计数器设计方法

    计数器是数字逻辑系统中的基本部件,它是数字系统中用得最多的时序逻辑电路,本文主要阐述了用中规模集成计数器设计任意进制
    发表于 02-28 11:41 6369次阅读
    基于MSI的N进制<b class='flag-5'>计数器</b>设计方法

    计数器时序电路

    1、了解时序电路的经典设计方法(D触发器、JK触发器和一般逻辑门组成的时序逻辑电路)。 2、了解同步
    发表于 07-10 14:37 15次下载

    计数器逻辑功能测试实验报告

    本文主要介绍了计数器逻辑功能测试实验报告。时序逻辑电路中,有一种电路叫计数器
    发表于 06-27 08:00 15次下载
    <b class='flag-5'>计数器</b><b class='flag-5'>逻辑</b><b class='flag-5'>功能</b>测试实验报告

    Verilog数字系统设计——时序逻辑实验1(10进制计数器

    ,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,编程实现10进制计数器,具有异步复位功能,十位和个位用8421BCD码表示一、4选1多路选择器是什么?示例:pandas 是基于NumPy 的一种工具
    发表于 12-05 19:06 10次下载
    <b class='flag-5'>Verilog</b>数字系统设计——<b class='flag-5'>时序</b><b class='flag-5'>逻辑</b>实验1(10进制<b class='flag-5'>计数器</b>)

    同步计数器和异步计数器是什么 同步计数器和异步计数器的主要区别?

    在数字电子产品中,计数器是由一系列触发器组成的时序逻辑电路。顾名思义,计数器用于计算输入在负或正边沿转换中出现的次数。根据触发触发器的方式,计数器
    的头像 发表于 03-25 17:31 1.9w次阅读
    <b class='flag-5'>同步</b><b class='flag-5'>计数器</b>和异步<b class='flag-5'>计数器</b>是什么 <b class='flag-5'>同步</b><b class='flag-5'>计数器</b>和异步<b class='flag-5'>计数器</b>的主要区别?

    时序逻辑电路设计之计数器

    前面已经学习了时序逻辑电路中的基本单元:触发器,这次就用其来整点活,实现计数器的设计,计数器可以说是任何和时序有关的设计都会用到他。
    的头像 发表于 05-22 16:54 2865次阅读
    <b class='flag-5'>时序</b><b class='flag-5'>逻辑</b>电路设计之<b class='flag-5'>计数器</b>

    时序逻辑电路设计之同步计数器

    时序电路的考察主要涉及分析与设计两个部分,上文介绍了时序逻辑电路的一些分析方法,重点介绍了同步时序电路分析的步骤与注意事项。 本文就
    的头像 发表于 05-22 17:01 2035次阅读
    <b class='flag-5'>时序</b><b class='flag-5'>逻辑</b>电路设计之<b class='flag-5'>同步</b><b class='flag-5'>计数器</b>