微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > fpga应用篇(三):你可能用了假分频

fpga应用篇(三):你可能用了假分频

时间:10-02 整理:3721RD 点击:

fpga应用篇(三):你可能用了假分频

分频对于fpga的重要性不言而喻,对于大多数通信方式来说,一个稳定且准确的分频程序对于通信的稳定很重要。为什么你的UART总是不稳定,很有可能你用了一个假分频。让我们来看一个例子:

假如主时钟50M,UART通信的波特率为9600,我们以16倍的波特率采样,以保证数据准确,我们需要计50M/(9600*16)个主时钟,即大约326个主时钟才输出一个分频时钟,我们返过去看看我们实际分出来的频率,50M/326=153374;而我们要的频率是9600*16=153600,竟然差了153600-153374=226hz,显然我们传统的分频方法并不准确,所以才会导致我们通信的不稳定。

下面我们看一种更加精准的分频方式,假如我们有一个N位的寄存器,则寄存器可以表示的最大数为2^N;寄存器初始值为0,以步长K增加,则寄存器每经过2^N/k个时钟回到初始状态。我们想要的频率Fo=F*k/2^N,F为主频,举个例子:假如主频50M,N为32,我们想要的频率仍为9600*16,则我们可以计算出K值,K=2^32*9600*16/50M=13194139,返回去求我们实际输出的频率 Fo=50M*13194139/2^32=153599.99379,可以看出已经跟153600相差无几,所以这种分频方式更加适合作为通信的分频。

这种方法到底怎么用,我们看一段程序:




我们采用的是32的寄存器,所以程序中最大值为ffff_ffff;一半为7fff_ffff;所以产生的divid信号为占空比为50%的信号,当然可以调节cnt的最大值来改变占空比。temp是divid信号延迟一个时钟的信号,up是divid信号的上升沿采用了我们上次介绍的边沿检测,以后我们每次产生不同频率的信号时只需改变span即步长的值,为了调用方便特把span作为parameter类型参数,方便例化。

采用这种分频方式的好处:1.精准2.不需要考虑奇偶分频。

给大家推荐一个fpga公众号:FPGA干货,每天分享FPGA内容



不错,直接调PLL不更好

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top