基于Verilog的分频器设计_第1页
基于Verilog的分频器设计_第2页
基于Verilog的分频器设计_第3页
基于Verilog的分频器设计_第4页
基于Verilog的分频器设计_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分频器是指使输出信号频率为输入信号频率整数分之一的电子电路。在许多电子设备中如电子钟、频率合成器等,需要各种不同频率的信号协同工作,常用的方法是以稳定度高的晶体振荡器为主振源,通过变换得到所需要的各种频率成分,分频器是一种主要变换手段。早期的分频器多为正弦分频器,随着数字集成电路的发展,脉冲分频器(又称数字分频器)逐渐取代了正弦分频器。下面以Verilog HDL语言为基础介绍占空比为50%的分频器。1偶分频偶分频比较简单,假设为N分频,只需计数到N/21,然后时钟翻转、计数清零,如此循环就可以得到N(偶)分频。代码如下。module fp_even(clk_out,clk_in,rst);output clk_out;input clk_in;input rst;reg 1:0 cnt;reg clk_out;parameter N=6;always (posedge clk_in or negedge rst)beginif(!rst)begincnt = 0;clk_out = 0;endelse beginif(cnt=N/2-1)begin clk_out = !clk_out; cnt=0; endelsecnt = cnt + 1;endendendmodule可以通过改变参量N的值和计数变量cnt的位宽实现任意偶分频。偶分频(N6)的RTL原理图:偶分频(N6)的行为仿真结果:2奇分频实现奇数(N)分频,分别用上升沿计数到(N-1)/2,再计数到N-1;用下降沿计数到(N-1)/2,再计数到N-1,得到两个波形,然后把它们相或即可得到N分频。代码如下:module fp_odd(clk_out,clk_p,clk_n,clk_in,rst);output clk_out;output clk_p,clk_n;input clk_in,rst;reg 2:0 cnt_p,cnt_n;reg clk_p,clk_n;parameter N=5;always (posedge clk_in or negedge rst)beginif(!rst)cnt_p = 0;elseif(cnt_p=N-1)cnt_p =0;else cnt_p = cnt_p + 1;endalways (posedge clk_in or negedge rst)beginif(!rst) clk_p = 0;else if(cnt_p=(N-1)/2)clk_p = !clk_p;else if(cnt_p=N-1)clk_p = !clk_p;endalways (negedge clk_in or negedge rst)beginif(!rst)cnt_n = 0;elseif(cnt_n=N-1)cnt_n =0;else cnt_n = cnt_n + 1;endalways (negedge clk_in or negedge rst)beginif(!rst) clk_n = 0;else if(cnt_n=(N-1)/2)clk_n = !clk_n;else if(cnt_n=N-1)clk_n = !clk_n;endassign clk_out = clk_p | clk_n;endmoduleRTL Schematic:Simulate Behavioral Model:同理,可以通过改变参量N的值和计数变量cnt_p和cnt_n的位宽实现任意奇分频。3任意占空比的任意分频在verilog程序设计中,我们往往要对一个频率进行任意分频,而且占空比也有一定的要求这样的话,对于程序有一定的要求,现在在前面两个实验的基础上做一个简单的总结,实现对一个频率的任意占空比的任意分频。比如:FPGA系统时钟是50M Hz,而我们要产生的频率是880Hz,那么,我们需要对系统时钟进行分频。很容易想到用计数的方式来分频:50000000/880 = 56818。显然这个数字不是2的整幂次方,那么我们可以设定一个参数,让它到56818的时候重新计数就可以实现了。程序如下:module div(clk, clk_div);input clk;output clk_div;reg 15:0 counter;always (posedge clk)if(counter=56817) counter = 0;else counter = counter+1;assign clk_div = counter15;endmodule分频的应用很广泛,一般的做法是先用高频时钟计数,然后使用计数器的某一位输出作为工作时钟进行其他的逻辑设计,上面的程序就是一个体现。下面我们来算一下它的占空比:我们清楚地知道,这个输出波形在counter为0到32767的时候为低,在32768到56817的时候为高,占空比为40%多一些,如果我们需要占空比为50%,那么我们需要再设定一个参数,使它为56817的一半,使达到它的时候波形翻转,就可以实现结果了。程序如下:module div(clk, clk_div);input clk;output clk_div;reg 14:0 counter;always (posedge clk)if(counter=28408) counter = 0;else counter = counter+1;reg clk_div;always (posedge clk)if(counter=28408) clk_div = clk_div;endmodule继续让我们来看如何实现任意占空比,比如还是由50 M分频产生880Hz,而分频得到的信号的占空比为30%。5681830%=17045module div(clk,reset,clk_div,counter);input clk,reset;output clk_div;output 15:0 counter;reg 15:0 counter;reg clk_div;always (posedge clk)if(!reset) counter = 0;else if(counter=56817) counter = 0;else counter = counter+1;always (posedge clk)if(!reset) clk_div = 0;else if(counter17045) clk_div = 1;else cl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论