我是靠谱客的博主 安详红牛,最近开发中收集的这篇文章主要介绍FPGA基础入门篇(七) 多路分频器的实现——任意整数分频器(二),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

FPGA基础入门篇(七) 多路分频器的实现——任意整数分频器(二)

本次介绍分频的主要设计方法,如得到任意整数的分频器该怎么设计。前面介绍了2、3、4、8分频的设计方法。其实本质是利用计数器对时钟上升沿进行计数的基本操作。
所以简单的解决办法就是产生计数器,然后对计数进行高低电平处理。

一、2的幂次方分频
  1. 对于2分频,可以利用每次时钟上升沿进行输出反转操作,得到2分频。
  2. 对于4分频,可以利用上一次分频后的信号,进行信号上升沿反转。
    也可以定义1位1bit的计数器,产生0、1的循环序列,在0状态时,取反,其他状态保持,可以产生4分频;
    对于8分频,除了利用上一次分频后的信号,进行信号上升沿反转。定义2位2bit计数器,00状态取反,其他状态保持,可以产生8分频。
  3. 同样对于16等2n分频,均利用计数器的方式。对于16分频,定义三位3bit的计数器,在000状态取反,其他状态保持,可以产生16分频。

所以对于2n分频,定义一个n-1 位计数器,在0…0(n-1个)状态下反转,其他状态保持。即可以得到2n分频。

二、奇数分频
  1. 先讨论3分频的情况,即半时钟周期的奇数倍。需要用到时钟的上升沿和下降沿。
    因此先定义两个二位2bit的计数器。一个计数器用于在时钟上升沿的情况下计数,产生00、01、11三种状态,另一个计数器用于在时钟下降沿的情况下计数,产生00、01、11三种状态。再定义两个寄存器,分别在00状态下赋值为高电平,然后将两个计数器输出逻辑相或
  2. 对于5分频的情况,同样先定义两个3位3bit计数器,分别在时钟上升沿和下降沿计数,产生000、001、010、011、100五种状态,再分别定义两个寄存器,在000、001均赋值为1,其他赋值为0,然后逻辑相或得到五分频。
    (至于为什么三或五个状态,主要取决于多少分频,一个n分频等价于n倍时钟周期,所以需要n个状态)

所以对于奇数n分频,需要定义两个m位m bit的计数器(最小的m值,使2m > n),产生n个状态计数,再定义两个寄存器,然后在n/2之前的的状态计数赋值为1,其他均为0,最后逻辑相或即可得到奇数n分频

三、偶数分频

对于偶数n分频除了可以按照上面的奇数分频来定义n个状态,然后在前n/2个之前赋值为1,其他为0。还可以用到偶数的特性,可以减小一个bit位。即只需产生n/2个奇数状态即可,利用反转特性,即可得到。

  1. 对于6分频,定义一个2位2bit的计数器,产生00、01、11三种计数状态,然后在00状态下反转,其他保持,即可得到6分频。

所以对于偶数n分频,定义一个m位计数器(最小的m,2m >= n/2),产生n/2个计数状态,在0…0 (n/2个) 反转,其他保持,可以得到偶数n分频。
其中偶数2幂次放分频作为2m = n/2的特例,如8分频,m=2,16分频,m=3。

最后

以上就是安详红牛为你收集整理的FPGA基础入门篇(七) 多路分频器的实现——任意整数分频器(二)的全部内容,希望文章能够帮你解决FPGA基础入门篇(七) 多路分频器的实现——任意整数分频器(二)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部