欢迎来到天天文库
浏览记录
ID:38653174
大小:42.50 KB
页数:5页
时间:2019-06-17
《任意分数分频Verilog实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、任意分数Verilog实现 网上常见的多为小数分频,分数分频也为有规律的分频,如N/2、M-1/N等。而像M/N型分数分频却很少。现介绍一下本人的分数分频实现方法,如果不当之处敬请指教。 分数分频实现基本上都是靠吞脉冲方法实现,如5/2分频,就可以分成一个2分频,一个3分频接替出现,这样(2+3)/2就是5/2分频。 下面以68/9为例介绍下怎么计算。 68=9*7+5,即商为7,余数为5。可以推出68/9分频,可以看成5个8分频和4个7分频,即(5*8+
2、4*7)/9=68/9。这个7分频和8分频中的数字7和8就是从商中得出来的。那5个8分频和4个7分频中的数字5和4就是从余数中的出来的,5是余数,4是(9-5)。 分子:numerator。分母denominator。商quotient。余数remainder。(翻译不是很准确,表达下意思就行了,呵呵)。 numerator=quotient*denominator+remainder.那么numerator/denominator分频就可以通过remainder个(quot
3、ient+1)分频和(denominator-remainder)个quotient分频组成。 还是以68/9为例。我们得出了5个8分频和4个7分频可以实现这个分数分频,但这5个8分频和4个7分频怎么放置呢? 先放5个8分频,再放4个7分频,这样绝对是不行的。为了均匀的放置这两种频率,我从小数分频中学到一种方法。找个临时变量temp(程序中用的是sum)。初始化为0。每次分频完让它加上余数,判断是否大于分母,如果小于分母,择输出7分频,否则输出8分频,并且将这个值减去分母(让
4、它小于分母)。这样temp值就变成了5162738405……分频值就成了787878788787878788……可以统计一下7分频和8分频的比例就正好是4:5,这样就实现了分数分频。 程序如下所示:输入信号:clk,rst,clkin(要分频的时钟信号),numerator(分子),denominator,(分母)输出信号:pulse中间信号:quotient(商),remainder(余数)等hightime为输出信号pulse输出高电平时间,可控制占空比/*************
5、************************************ //modulename:fredivAB //designer:kang //date:2010-10-08 //version:1.00 *************************************************/modulefredivAB( //inputsignals clk, rst, clkin,
6、 numerator, //fenzi denominator, //fenmu //outputsignals pulse );inputclk;inputrst;inputclkin;input[15:0]numerator;input[15:0]denominator; outputpulse;regpulse; //parameterHIGHTIME=16'd2; wire[
7、15:0]quotient; //shangwire[15:0]remainder; //yushuregina;reginb;regupclk;regcounter_clkin;reg[15:0]counter;reg[15:0]divnum;reg[15:0]sum;regflag;reg[15:0]counter_pulseh;wire[15:0]hightime; assignquotient=(denominator)?numerator/denominator:16'h0;assi
8、gnremainder=(denominator)?numerator%denominator:16'h0;assignhightime={1'b0,quotient[15:1]};//assignhightime=16'h1; //savethepriorandcurrentstateofclkinalways@(posedgeclkornegedgerst) begin if(!rst) begin ina<=0; inb<=0; en
此文档下载收益归作者所有