verilog_实现任意占空比、任意分频的方法

verilog_实现任意占空比、任意分频的方法

ID:3140742

大小:56.00 KB

页数:15页

时间:2017-11-19

verilog_实现任意占空比、任意分频的方法_第1页
verilog_实现任意占空比、任意分频的方法_第2页
verilog_实现任意占空比、任意分频的方法_第3页
verilog_实现任意占空比、任意分频的方法_第4页
verilog_实现任意占空比、任意分频的方法_第5页
资源描述:

《verilog_实现任意占空比、任意分频的方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、分频程序虽然简单,但我觉得由简入难是学习的一个必然阶段,慢慢的我们自然会成长起来。所以如果有时间的话,大家都可以将自己的这种“小程序”贴到论坛上来。如果你的程序好,其他人也可以学习;如果你的程序有问题,大家可以一起帮你找问题,共同进步。还有,我觉得在发贴的时候,最好能将原理说一下。一来大家看你的贴能学到东西;二来也方便解答你的问题,不然还得解答者自己去找资料搞懂原理,然后再回答你,回答你问题的人自然也就不多了。说了一些题外话,下面转入正文:在verilog程序设计中,我们往往要对一个频率进行任意分频,而且占空比也有一定的要求这样的话,对

2、于程序有一定的要求,现在我在前人经验的基础上做一个简单的总结,实现对一个频率的任意占空比的任意分频。比如:我们FPGA系统时钟是50MHz,而我们要产生的频率是880Hz,那么,我们需要对系统时钟进行分频。我们很容易想到用计数的方式来分频:50000000/880=56818这个数字不是2的整幂次方,那么怎么办呢?我们可以设定一个参数,让它到56818的时候重新计数不就完了吗?呵呵,程序如下:modulediv(clk,clk_div);inputclk;outputclk_div;reg[15:0]counter;always@(po

3、sedgeclk)if(counter==56817)counter<=0;elsecounter<=counter+1;assignclk_div=counter[15];endmodule//modulediv(clk,rst,clk_div);inputclk,rst;outputregclk_div;reg[15:0]counter;salways@(posedgeclk)if(!rst)begincounter<=0;clk_div<=0;endelseif(counter==56817)begincounter<=0;clk

4、_div<~clk_div;endelsecounter<=counter+1;endmodule下面我们来算一下它的占空比:我们清楚地知道,这个输出波形在counter为0到32767的时候为低,在32767到56817的时候为高,占空比为40%多一些,如果我们需要占空比为50%,那么怎么办呢?不用急,慢慢来。我们再设定一个参数,使它为56817的一半,使达到它的时候波形翻转,那不就完了吗?呵呵,再看看:modulediv(clk,clk_div);inputclk;outputclk_div;reg[14:0]counter;alw

5、ays@(posedgeclk)if(counter==28408)counter<=0;elsecounter<=counter+1;regclk_div;always@(posedgeclk)if(counter==28408)clk_div<=~clk_div;endmodule占空比是不是神奇地变成50%了呢?呵呵。继续让我们来看如何实现任意占空比,比如还是由50M分频产生880Hz,而分频得到的信号的占空比为30%。56818×30%=17045modulediv(clk,reset,clk_div,counter);inpu

6、tclk,reset;outputclk_div;output[15:0]counter;reg[15:0]counter;regclk_div;always@(posedgeclk)if(!reset)counter<=0;elseif(counter==56817)counter<=0;elsecounter<=counter+1;always@(posedgeclk)if(!reset)clk_div<=0;elseif(counter<17045)clk_div<=1;elseclk_div<=0;endmodule三分频的Ve

7、rilog实现//很实用也是笔试面试时常考的,已经经过仿真占空比要求50%和不要求占空比差别会很大,先看一个占空比50%的描述modulediv3(CLKIN,CLKOUT,RESETn);inputCLKIN,RESETn;outputCLKOUT; //internalcountersignalsreg[1:0]count_a;reg[1:0]count_b;reg     CLKOUT; always@(negedgeRESETnorposedgeCLKIN)begin   if(RESETn==1'b0)       count

8、_a<=2'b00;   else       if(count_a==2'b10)           count_a<=2'b00;       else           count_a<=coun

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。