zoukankan      html  css  js  c++  java
  • 简单分频原理与实现——计数器

    一个数字系统中往往需要多种频率的时钟脉冲作为驱动源,这样就需要对FPGA的系统时钟(频率较高)进行分频。

    比如在进行流水灯、数码管动态扫描设计时不能直接使用系统时钟(太快而肉眼无法识别),或者需要进行通信时,

    由于通信速度不能太高(由不同的标准限定),这样就需要对系统时钟分频以得到较低频率的时钟。

    分频器主要分为偶数分频、奇数分频、半整数分频和小数分频,如果在设计过程中采用参数化设计,就可以随时改变参量以得到不同的分频需要。

    在对时钟要求不是很严格的FPGA系统中,分频通常都是通过计数器的循环计数来实现的。

     

    偶数分频(2N)

    偶数分频最为简单,很容易用模为N的计数器实现50%占空比的时钟信号,即每次计数满N(计到N-1)时输出时钟信号翻转。

    奇数分频(2N+1)

    使用模为2N+1的计数器,让输出时钟在X-1(X在0到2N-1之间)和2N时各翻转一次,则可得到奇数分频器,但是占空比并不是50%(应为 X/(2N+1))。

    得到占空比为50%的奇数分频器的基本思想是:将得到的上升沿触发计数的奇数分频输出信号CLK1,和得到的下降沿触发计数的相同(时钟翻转值相同)奇数分频输出信号CLK2,

    最后将CLK1和CLK2相或之后输出,就可以得到占空比为50%的奇数分频器。原理图如下:

    clip_image001[7]

    用Quartus II 得到的占空比为50%的9分频时钟输出信号outclk如下:

    clip_image002

     

    半整数分频(N-0.5)

    基本设计思想为:首先进行模N的计数,计数到N-1时输出时钟翻转;而且在计数返回到0时,输出时钟再次翻转。

    所以,只要使计数值N-1保持半个时钟周期,即可实现N-0.5分频时钟。那么如何保持半个时钟周期呢?

    因为计数器是上升沿触发计数,如果在计数值=N-1时把计数器的触发时钟翻转,则时钟的下降沿就变成了上升沿。即计数值=N-1时,时钟马上翻转,

    则计数值保持半个时钟周期后,会遇到上升沿而使计数值归0. 然后计数器以翻转了的时钟继续计数,在产生N-0.5个分频周期后,时钟再次翻转。

     

    2.5分频的时序示意图如下:

    clip_image003

    怎样才能够使计数器的触发时钟在N-1时翻转呢? 由半整数分频器的原理图可知,将输出时钟二分频后和输入时钟相异或就可使触发时钟翻转。

     

    半整数分频器原理图如下:

    clip_image004

    用Quartus II 实现的2.5分频时序图如下:

    clip_image005

    由通用分频器电路组成图可以看到,半整数分频器是由整数分频器加上二分频和异或门而构成的。

    那么,如果使用元件例化的思想就可以得到通用的分频(即可选择整数分频和半整数分频)。

    如果想要得到任意分频,则可以参考CrazyBingo 的 利用DDS原理教你什么才是真正的任意分频

  • 相关阅读:
    15. DML, DDL, LOGON 触发器
    5. 跟踪标记 (Trace Flag) 834, 845 对内存页行为的影响
    4. 跟踪标记 (Trace Flag) 610 对索引组织表(IOT)最小化日志
    14. 类似正则表达式的字符处理问题
    01. SELECT显示和PRINT打印超长的字符
    3. 跟踪标记 (Trace Flag) 1204, 1222 抓取死锁信息
    2. 跟踪标记 (Trace Flag) 3604, 3605 输出DBCC命令结果
    1. 跟踪标记 (Trace Flag) 1117, 1118 文件增长及空间分配方式
    0. 跟踪标记 (Trace Flag) 简介
    SpringBoot + Redis + Shiro 实现权限管理(转)
  • 原文地址:https://www.cnblogs.com/chenwu128/p/2290012.html
Copyright © 2011-2022 走看看