FPGA学习笔记——分频电路设计

发布时间:2015-10-3023:29:52

分频就是用一个时钟信号通过一定的电路结构变成不同频率的时钟信号,这里介绍一下整数分频电路的设计方法。整数分频电路有偶数分频和奇数分频两种,我们以实现占空比为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<=1'b0;

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<=3'd0;

else if(q==3'd5)

q<=3'd0;

else

q<=q+1'b1;

always @(posedge clk or negedge rst_n)

if(!rst_n)

clk_2<=1'b0;

else if(q<3'd3)

clk_2<=1'b1;

else

clk_2<=1'b0;

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:0]count1;//上升沿触发的3进制计数器1

reg [1:0]count2;//下降沿触发的3进制计数器2

reg clk_p,clk_n;

always @(posedge clk or negedge rst_n)//上升沿触发的3进制计数器1

if(!rst_n)

count1<=2'd0;

else if(count1==2'd2)

count1<=1'b0;

else

count1<=count1+1'b1;

always @(posedge clk or negedge rst_n)

if(!rst_n)

clk_p<=1'b0;

else if(count1<2'd2)

clk_p<=1'b1;

else

clk_p<=1'b0;

always @(negedge clk or negedge rst_n)//下降沿触发的3进制计数器2

if(!rst_n)

count2<=2'd0;

else if(count2==2'd2)

count2<=2'd0;

else

count2<=count2+1'b1;

always @(negedge clk or negedge rst_n)

if(!rst_n)

clk_n<=1'b0;

else if (count2<2'd2)

clk_n<=1'b1;

else

clk_n<=1'b0;

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:0]count1;//上升沿触发的5进制计数器1

reg [2:0]count2;//下降沿触发的5进制计数器2

reg clk_p,clk_n;

always @(posedge clk or negedge rst_n)//上升沿触发的5进制计数器1

if(!rst_n)

count1<=3'd0;

else if(count1==3'd4)

count1<=1'b0;

else

count1<=count1+1'b1;

always @(posedge clk or negedge rst_n)

if(!rst_n)

clk_p<=1'b0;

else if(count1<5'd4)

clk_p<=1'b1;

else

clk_p<=1'b0;

always @(negedge clk or negedge rst_n)//下降沿触发的5进制计数器2

if(!rst_n)

count2<=3'd0;

else if(count2==3'd4)

count2<=3'd0;

else

count2<=count2+1'b1;

always @(negedge clk or negedge rst_n)

if(!rst_n)

clk_n<=1'b0;

else if (count2<3'd4)

clk_n<=1'b1;

else

clk_n<=1'b0;

assign clk_2=clk_p&clk_n;

endmodule

设计的思路和三分频一样,只是把计数器的进制改动了,并且把翻转时的判断逻辑改动了。

总结

按照以上偶数分频和奇数分频的方法,可以设计任意的N分频电路,以获得占空比为50%的时钟,不足之处是奇数分频不能获得与时钟同相的波形。

FPGA学习笔记——分频电路设计相关推荐

  1. FPGA学习笔记(1)简单的时序逻辑电路——流水灯

    FPGA学习笔记(1)简单的时序逻辑电路--流水灯 编程语言为Verilog HDL 原理 (1)设计一个计数器,使开发板上的4个LED状态每500ms翻转一次.开发板上的晶振输出时钟频率为50MHz ...

  2. 小梅哥FPGA学习笔记

    小梅哥FPGA学习笔记 一.38译码器 功能: 译码器其任一时刻的稳态输出,仅仅与该时刻的输入变量的取值有关,它是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等).38 ...

  3. FPGA学习笔记(八):ASK调制解调的仿真

    笔记八是ASK调制解调的仿真实现. ASK调制解调的实现原理:首先使用MATLAB产生存储基带波形的coe文件,再让ROM读取coe文件输出基带波形,然后DDS产生正弦波信号作为载波信号,接下来使用乘 ...

  4. FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程

    FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程 很多做过单片机的朋友都知 道,我们在对MCU烧写完程序固件后,那么该程序固件就存储在了该MCU内部.即使MCU断电了再重新上电,程序 ...

  5. FPGA学习笔记(七): DSB调制解调的仿真

    笔记七是DSB调制解调的仿真实现. DSB调制解调的实现原理:首先使用DDS产生低频正弦波信号作为调制信号,再用DDS产生高频信号作为载波信号,然后使用乘法器将两者相乘产生DSB信号,DSB信号与载波 ...

  6. FPGA学习笔记(八)同步/异步信号的打拍分析处理及亚稳态分析

    系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...

  7. FPGA学习笔记_ROM核调用与调试

    FPGA学习笔记 ROM核调用与调试 1. ROM存储器IP核的使用 2. 创建.mif文件 3. In system memory content editor内存查看工具的使用 4. Signal ...

  8. FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇尾

    FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇一 FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇二 ...

  9. FPGA学习笔记(十二)IP核之FIFO的学习总结

    系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...

最新文章

  1. Confluence 6 下载和安装 MySQL 驱动
  2. 那些伤害不大,侮辱性极强的瞬间
  3. HTML中的列表和表格
  4. bokeh.model API
  5. python爬虫爬取慕课网中的图片
  6. 802.1D生成树STP协议
  7. 测试自动化普遍存在的问题
  8. NYOJ71-独木舟上的旅行
  9. angular第六天
  10. tensorflow summary demo with linear-model
  11. FFmpeg学习教程
  12. Linux虚拟机的安装与创建【超详细】【手把手教学】
  13. AutoCAD2011官方原版软件下载
  14. 完美解决Python 发送邮件126,136,QQ等,都会报•554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件
  15. 无密码多重身份验证(MFA)2022年全球行业分析报告
  16. 图像处理中的forward warping 和 inverse warping
  17. Star CCM+ 案例 - 旋风分离器 (cyclone separator)-2 生成网格
  18. BPM软件_财务报销流程管理解决方案_K2工作流引擎
  19. Sun发布全球首款“统一存储系统”Storage7000
  20. pod repo update 理解

热门文章

  1. ALSA子系统(五)------XRUN排查
  2. 时评:所谓游戏人才六十万缺口背后
  3. AnyConnect 安卓系统的使用教程
  4. steam进社区显示服务器错误,Steam错误代码-118怎么办 社区打不开解决方法
  5. linux文件系统研究与设计,Linux下实时文件系统的设计
  6. 微信小程序免费http转https
  7. 50 道 Python 基础练习题(附答案详解)
  8. 微软在盈利前确认裁员
  9. micro-ros arduino esp32 ros2 笔记
  10. 线性稳压器的基本类型