FPGA分数分频程序.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
FPGA分数分频程序

任意分数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+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个(quotient+1)分频和(denominator -remainder)个quotient分频组成。 ?????? 还是以68/9为例。我们得出了5个8分频和4个7分频可以实现这个分数分频,但这5个8分频和4个7分频怎么放置呢? ?????? 先放5个8分频,再放4个7分频,这样绝对是不行的。为了均匀的放置这两种频率,我从小数分频中学到一种方法。找个临时变量temp(程序中用的是sum)。初始化为0。每次分频完让它加上余数,判断是否大于分母,如果小于分母,择输出7分频,否则输出8分频,并且将这个值减去分母(让它小于分母)。这样temp值就变成了5 1 6 2 7 3 8 4 0 5…… 分频值就成了7 8 7 8 7 8 7 8 8 7 8 7 8 7 8 7 8 8……可以统计一下7分频和8分频的比例就正好是4:5,这样就实现了分数分频。 ?????? 程序如下所示: 输入信号:clk,rst,clkin(要分频的时钟信号),numerator(分子), denominator,(分母) 输出信号:pulse 中间信号:quotient(商),remainder(余数)等 hightime为输出信号pulse输出高电平时间,可控制占空比 /************************************************* ? //module name:fredivAB ? //designer:kang ? //date:2010-10-08 ? //version:1.00 ? *************************************************/ module fredivAB( ??????????? //input signals ??????????? clk, ??????????? rst, ??????????? clkin, ??????????? numerator,????? //fenzi ??????????? denominator,??? //fenmu ??????????? //output signals ??????????? pulse?????? ??????????? ); input clk; input rst; input clkin; input [15:0] numerator; input [15:0] denominator; ? output pulse; reg pulse; ? //parameter HIGHTIME=16d2; ? wire [15:0] quotient;?? //shang wire [15:0] remainder;? //yushu reg ina; reg inb; reg upclk; reg counter_clkin; reg [15:0] counter; reg [15:0] divnum; reg [15:0] sum; reg flag; reg [15:0] counter_pulseh; wire [15:0] hightime; ? assign quotient=(denominator)?numerator/denominator:16h0; assign remainder=(denominator)?numerator%denominator:16h0; assign hightime={1b0,quotient[15:1]}; //assign hig

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档