fpga学习笔记1分频电路设计.doc_第1页
fpga学习笔记1分频电路设计.doc_第2页
fpga学习笔记1分频电路设计.doc_第3页
fpga学习笔记1分频电路设计.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

FPGA学习笔记1分频电路设计 分频就是用一个时钟信号通过一定的电路结构变成不同频率的时钟信号,这里介绍一下整数分频电路的设计方法。整数分频电路有偶数分频和奇数分频两种,我们以实现占空比为50%的分频电路为例子来解释一下分频电路设计的基本原理。假设时钟周期为T,则二分频后输出的时钟周期为2T,三分频后输出的时钟周期为3T,N分频后输出的时钟周期为NT,这是设计分析的基本思路。 1.偶数分频实现 二分频电路设计 二分频电路的实现是最为简单的,只需要用一个D触发器便能实现,因为D触发的输出值每隔一个输入时钟周期T才更新一次值,所以我们只要每次D触发器寄存值的时候把它的输出值取反就可以了,这样它的高电平持续时间为T,低电平持续时间也为T,则为二分频。具体的代码如下所示。 module clkdiv(clk,rst_n,clk_2); input clk,rst_n; output clk_2; reg q; always (posedge clk or negedge rst_n) if(!rst_n) q<=1b0; else q<=q; assign clk_2=q; endmodule 这个设计非常简单,不作过多解释。 六分频电路设计 按照设计的思路,六分频总的时钟周期应该为6T,高电平持续时间为3T,低电平持续时间为3T,我们只需要用一个0-5的计数器,计数从0到5一直循环,当计数器为0,1,2时,输出高电平,计数器为3,4,5时,输出低电平。 具体代码实现如下 module clkdiv6(clk,rst_n,clk_2); input clk,rst_n; output clk_2; reg 2:0 q; /因为用到0-5的计数器,一共要3位D触发器 reg clk_2; always (posedge clk or negedge rst_n) if (!rst_n) q<=3d0; else if(q=3d5) q<=3d0; else q<=q+1b1; always (posedge clk or negedge rst_n) if(!rst_n) clk_2<=1b0; else if(q<3d3) clk_2<=1b1; else clk_2<=1b0; endmodule 经过仿真,符合六分频的设计思路,占空比也为50%,3T的时间为高电平,3T的时间为低电平。 2N分频电路设计思路 偶数分频电路的基本实现思路就是利用计数器,利用0-(2N-1)的计数器,当计数器计数在0-(N-1)的时候输出高电平,其余时间输出低电平就可以完成占空比50%的2N分频电路了 2.奇数分频实现 三分频电路实现 三分频的电路如果按照偶数分频的思想来设计就会遇到一个难题,因为是奇数,不能做到计数器计数到一半的时候输出取反,也就是说按照偶数分频的思路做不到占空比50%,在这里要换一个思路来设计。我们仍然分析一下三分频电路的特点,三分频电路的周期为3T,高电平持续时间为1.5T,低电平持续时间也为1.5T。假设用上面的思路,用1个计数器来分频,则也可以得到三分频,但是占空比为66.7%,即高电平持续时间为2T,低电平持续时间为1T。以下为占空比50%的三分频电路实现,用2个三进制计数器,第1个为时钟上升沿触发,第2个为时钟下降沿触发。对第1个计数器而言,小于2取高电平则,0-2T为高电平,2T-3T为低电平,对第2个计数器而言,小于2取高电平,则0.5T-2.5T为高电平,2.5T-3.5T为低电平,实质上第2个的波形延时了0.5T,他们公共的取高电平的时间为0.5T-2T,刚好是1.5T,正式三分频占空比为50%高电平所持续的时间。下面为具体代码实现。 module clkdiv3(clk,rst_n,clk_2); input clk,rst_n; output clk_2; reg 1:0count1;/上升沿触发的3进制计数器1 reg 1:0count2;/下降沿触发的3进制计数器2 reg clk_p,clk_n; always (posedge clk or negedge rst_n)/上升沿触发的3进制计数器1 if(!rst_n) count1<=2d0; else if(count1=2d2) count1<=1b0; else count1<=count1+1b1; always (posedge clk or negedge rst_n) if(!rst_n) clk_p<=1b0; else if(count1<2d2) clk_p<=1b1; else clk_p<=1b0; always (negedge clk or negedge rst_n)/下降沿触发的3进制计数器2 if(!rst_n) count2<=2d0; else if(count2=2d2) count2<=2d0; else count2<=count2+1b1; always (negedge clk or negedge rst_n) if(!rst_n) clk_n<=1b0; else if (count2<2d2) clk_n<=1b1; else clk_n<=1b0; assign clk_2=clk_p&clk_n; endmodule 仿真的波形图如下 可见,实现了三分频占空比为50%的功能,但是仍然有不足的地方就是相位不是和原始时钟同相,延迟了0.5T。 五分频电路设计 按照三分频的分频思路,五分频的代码如下 module clkdiv5(clk,rst_n,clk_2); input clk,rst_n; output clk_2; reg 2:0count1;/上升沿触发的5进制计数器1 reg 2:0count2;/下降沿触发的5进制计数器2 reg clk_p,clk_n; always (posedge clk or negedge rst_n)/上升沿触发的5进制计数器1 if(!rst_n) count1<=3d0; else if(count1=3d4) count1<=1b0; else count1<=count1+1b1; always (posedge clk or negedge rst_n) if(!rst_n) clk_p<=1b0; else if(count1<5d4) clk_p<=1b1; else clk_p<=1b0; always (negedge clk or negedge rst_n)/下降沿触发的5进制计数器2 if(!rst_n) count2<=3d0; else if(count2=3d4) count2<=3d0; else count2<=count2+1b1; always (negedge clk or negedge rst_n) if(!rst_n) clk_n<=1b0; else if (count2<3d4) clk_n<=1b1; else clk_n&

温馨提示

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

评论

0/150

提交评论