欢迎来到天天文库
浏览记录
ID:30808348
大小:344.34 KB
页数:7页
时间:2019-01-03
《基于verilog的分频器设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、分频器是指使输出信号频率为输入信号频率整数分之一的电子电路。在许多电子设备中如电子钟、频率合成器等,需要各种不同频率的信号协同工作,常用的方法是以稳定度高的晶体振荡器为主振源,通过变换得到所需要的各种频率成分,分频器是一种主要变换手段。早期的分频器多为正弦分频器,随着数字集成电路的发展,脉冲分频器(又称数字分频器)逐渐取代了正弦分频器。下面以VerilogHDL语言为基础介绍占空比为50%的分频器。1偶分频偶分频比较简单,假设为N分频,只需计数到N/2-1,然后吋钟翻转、计数清零,如此循环就可以得到N(偶)分频。代码如下。modulefpeven(clko
2、ut,clkin,rst);outputclkout;inputelkin;inputrst;reg[1:0]ent;regclk_out;parameterN=6;always@(posedgeclk_inornegedgerst)beginif(!rst)beginent〈二0;clk_out〈二0;endelsebeginif(cnt=N/2-l)beginclk_out<=!clk_out;cnt<=0;endelseent<=ent+1;endendendmodule可以通过改变参量N的值和计数变量ent的位宽实现任意偶分频。偶分频(N=6)的R
3、TL原理图:偶分频(N=6)的行为仿真结果:2奇分频实现奇数(N)分频,分别用上升沿计数到(N-l)/2,再计数到N-1;用下降沿计数到(N-1)/2,再计数到N-1,得到两个波形,然后把它们相或即可得到N分频。代码如下:modulefp_odd(clk_out,clk_p,elk_n,clk_in,rst);outputclkout;outputclk_p,clk_n;inputclk_in,rst;reg[2:0]cnt_p,cnt_n;regclk_p,clkn;parameterN=5;always@(posedgeclk_inornegedger
4、st)beginif(!rst)cnt_p<=0;cnt_p<=0;elseif(cnt_p==N-l)elsecnt_p<=cnt_p+1;endalwaysbegin@(posedgeclk_inornegedgerst)if(!rst)clkp<=0;elseif(ent_p==(N~l)/2)clk_p〈二!clk_p;elseif(cnt_p二二NT)clk_p<=!clk_p;endalwaysbegin@(negedgeclk_inornegedgerst)if(!rst)entn<=0;elseif(cnt_n二二NT)cnt_n<=0;e
5、lseentn<=entn+1;endalwaysbegin@(negedgeclk_inornegedgerst)if(!rst)clk_n<=0;elseif(cnt_n二二(NT)/2)elk_n<=!clk_n;elseif(cnt_n二二NT)elkn<=!clkn;endclk_n;assignclk_out=clk_pendmoduleRTLSchematic:SimulateBehavioralModel:ConvertimXbOOlH1500mtOOOru11111I111112006、f111a1j1LtlIHbbJL—-J.1—acf®一n下r—r"5""oro&4匚1心21;•;rumTTTTnoTTl7、方式来分频:50000000/880=56818o显然这个数字不是2的整幕次方,那么我们可以设定一个参数,让它到56818的时候重新计数就可以实现了。程序如下:modulediv(elk,clk_div);inputelk;outputclk_div;reg[15:0]counter;always©(posedgeelk)if(counter==56817)counter<=0;elsecounter<=counter+1;assignclkdiv二counter[15];cndmodulc分频的应用很广泛,一般的做法是先用高频时钟计数,然后使用计数器的某8、一位输岀作为工作时钟进行其他的逻辑设计,上面的程序就是一个体现。下
6、f111a1j1LtlIHbbJL—-J.1—acf®一n下r—r"5""oro&4匚1心21;•;rumTTTTnoTTl7、方式来分频:50000000/880=56818o显然这个数字不是2的整幕次方,那么我们可以设定一个参数,让它到56818的时候重新计数就可以实现了。程序如下:modulediv(elk,clk_div);inputelk;outputclk_div;reg[15:0]counter;always©(posedgeelk)if(counter==56817)counter<=0;elsecounter<=counter+1;assignclkdiv二counter[15];cndmodulc分频的应用很广泛,一般的做法是先用高频时钟计数,然后使用计数器的某8、一位输岀作为工作时钟进行其他的逻辑设计,上面的程序就是一个体现。下
7、方式来分频:50000000/880=56818o显然这个数字不是2的整幕次方,那么我们可以设定一个参数,让它到56818的时候重新计数就可以实现了。程序如下:modulediv(elk,clk_div);inputelk;outputclk_div;reg[15:0]counter;always©(posedgeelk)if(counter==56817)counter<=0;elsecounter<=counter+1;assignclkdiv二counter[15];cndmodulc分频的应用很广泛,一般的做法是先用高频时钟计数,然后使用计数器的某
8、一位输岀作为工作时钟进行其他的逻辑设计,上面的程序就是一个体现。下
此文档下载收益归作者所有