欢迎来到天天文库
浏览记录
ID:56483436
大小:123.00 KB
页数:7页
时间:2020-06-24
《基于Verilog的分频器设计.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、分频器是指使输出信号频率为输入信号频率整数分之一的电子电路。在许多电子设备中如电子钟、频率合成器等,需要各种不同频率的信号协同工作,常用的方法是以稳定度高的晶体振荡器为主振源,通过变换得到所需要的各种频率成分,分频器是一种主要变换手段。早期的分频器多为正弦分频器,随着数字集成电路的发展,脉冲分频器(又称数字分频器)逐渐取代了正弦分频器。下面以VerilogHDL 语言为基础介绍占空比为50%的分频器。1 偶分频偶分频比较简单,假设为N分频,只需计数到N/2-1,然后时钟翻转、计数清零,如此循环就可以得到N(偶)分频。代码如下。modulefp_even(
2、clk_out,clk_in,rst);outputclk_out;inputclk_in;inputrst;reg[1:0]cnt;regclk_out;parameterN=6; always@(posedgeclk_inornegedgerst)beginif(!rst) begin cnt<=0; clk_out<=0; endelsebegin if(cnt==N/2-1) beginclk_out<=!clk_out;cnt<=
3、0;end else cnt<=cnt+1; endendendmodule可以通过改变参量N的值和计数变量cnt的位宽实现任意偶分频。偶分频(N=6)的RTL原理图:偶分频(N=6)的行为仿真结果: 2 奇分频 实现奇数(N)分频,分别用上升沿计数到(N-1)/2,再计数到N-1;用下降沿计数到(N-1)/2,再计数到N-1,得到两个波形,然后把它们相或即可得到N分频。代码如下:modulefp_odd(clk_out,clk_p,clk_n,clk_in,rst);outputclk_out;ou
4、tputclk_p,clk_n;inputclk_in,rst; reg[2:0]cnt_p,cnt_n;regclk_p,clk_n;parameterN=5; always@(posedgeclk_inornegedgerst)begin if(!rst) cnt_p<=0; else if(cnt_p==N-1) cnt_p<=0; elsecnt_p<=cnt_p+1;end always@(posedgeclk_inornegedgerst)begin if(!rst)
5、clk_p<=0; elseif(cnt_p==(N-1)/2) clk_p<=!clk_p; elseif(cnt_p==N-1) clk_p<=!clk_p;end always@(negedgeclk_inornegedgerst)begin if(!rst) cnt_n<=0; else if(cnt_n==N-1) cnt_n<=0; elsecnt_n<=cnt_n+1;end always@(neg
6、edgeclk_inornegedgerst)begin if(!rst)clk_n<=0; elseif(cnt_n==(N-1)/2) clk_n<=!clk_n; elseif(cnt_n==N-1) clk_n<=!clk_n;end assignclk_out=clk_p
7、clk_n;endmodule RTLSchematic: SimulateBehavioralModel:同理,可以通过改变参量N的值和计数变量cnt_p和cnt_n的位宽实现任意奇分频。 3
8、 任意占空比的任意分频在verilog程序设计中,我们往往要对一个频率进行任意分频,而且占空比也有一定的要求这样的话,对于程序有一定的要求,现在在前面两个实验的基础上做一个简单的总结,实现对一个频率的任意占空比的任意分频。比如: FPGA系统时钟是50MHz,而我们要产生的频率是880Hz,那么,我们需要对系统时钟进行分频。很容易想到用计数的方式来分频:50000000/880=56818。显然这个数字不是2的整幂次方,那么我们可以设定一个参数,让它到56818的时候重新计数就可以实现了。程序如下:modulediv(clk,clk_div);input
9、clk;outputclk_div;reg[15:0]counter;alway
此文档下载收益归作者所有