时钟分频也是笔试题里面经常出现的,(我已经遇到过了),看完这一篇,分分钟掌握!

目录

偶数分频

D触发器级联法

计数器法

奇数分频

占空比50% 的奇数分频

占空比无要求的奇数分频

任意小数分频


偶数分频

 如上图输入给clk,输出将其变成周期为2倍的clk_out2, 将其变成周期为4倍的clk_out4,将其变成周期为8倍的clk_out8,占空比为50%

D触发器级联法

对于偶数分频电路,在不考虑时钟同步时钟延迟的问题时,直接使用D触发器级联来实现:关键在于,上升沿才能触发翻转,但是一个周期只有一个上升沿,因此周期翻倍

`timescale 1ns/1nsmodule even_div(input     wire rst ,input     wire clk_in,output    wire clk_out2,output    wire clk_out4,output    wire clk_out8);reg clk_out2_r, clk_out4_r, clk_out8_r;always@(posedge clk_in or negedge rst) beginif(~rst)clk_out2_r <= 0;elseclk_out2_r <= ~clk_out2_r;endalways@(posedge clk_out2 or negedge rst) beginif(~rst)clk_out4_r <= 0;elseclk_out4_r <= ~clk_out4_r;endalways@(posedge clk_out4 or negedge rst) beginif(~rst)clk_out8_r <= 0;elseclk_out8_r <= ~clk_out8_r;endassign clk_out2 = clk_out2_r;assign clk_out4 = clk_out4_r;assign clk_out8 = clk_out8_r;endmodule

计数器法

2、4、8恰好是2的次方,可构造一个3位计数器,依靠第0位,第1位,第2位的变化速度来实现:

2分频的输出=cnt第0位(由于计数器在clk=高电平时才+1,因此本身就是2倍的周期)

4分频输出=cnt第1位

8分频输出=cnt第2位

eg 4分频:000 001 010 011 100 101 110 111 000

`timescale 1ns/1ns
module even_div(input     wire rst ,input     wire clk_in,output    wire clk_out2,output    wire clk_out4,output    wire clk_out8);reg [2:0]cnt;always@(posedge clk_in or negedge rst)if(!rst)cnt <= 3'b111;//初始赋全1elsecnt <= cnt+1;assign clk_out2 = ~cnt[0];//根据波形,一开始全为高电平assign clk_out4 = ~cnt[1];assign clk_out8 = ~cnt[2];
endmodule

奇数分频

占空比50% 的奇数分频

设计一个同时输出7分频的时钟分频器,占空比要求为50%

对于奇数分频电路,主要难点在于50%占空比的实现。单触发沿在奇数分频中是没有办法实现50%占空比的,因此需要考虑使用双边沿加组合逻辑实现50%占空比

设置计数器,计数器从0→6,当计数器==3,上升沿触发得到clk_pos,下降沿触发得到clk_neg,

而输出的7分频clk,上升沿在clk_neg触发,下降沿在clk_pos触发,是clk_neg和clk_pos进行或运算的结果

根据这个思路,我们可以得到任意奇数分频,占空比为50%的输出,修改N值即可,代码如下:

`timescale 1ns/1nsmodule odo_div_or#(parameter N = 7)(input    wire  rst ,input    wire  clk_in,output   wire  clk_out7);reg [3:0]            cnt ;always @(posedge clk_in or negedge rst) beginif (!rst) begincnt    <= 'b0 ;endelse if (cnt == N-1) begincnt    <= 'b0 ;endelse begincnt    <= cnt + 1'b1 ;endendreg                  clkp ;always @(posedge clk_in or negedge rst) beginif (!rst) beginclkp <= 1'b0 ;endelse if (cnt == (N>>1)) begin clkp <= 1 ;endelse if (cnt == N-1) begin clkp <= 0 ;endendreg                  clkn ;always @(negedge clk_in or negedge rst) beginif (!rst) beginclkn <= 1'b0 ;endelse if (cnt == (N>>1) ) begin clkn <= 1 ;endelse if (cnt == N-1) begin clkn <= 0 ;endendassign clk_out7 = clkp | clkn ;endmodule

占空比无要求的奇数分频

实现一个5分频clk,占空比可修改

由于一个cnt其实=2个clk_in ,所以在占空比不要求的情况下,即使是奇数分频也=一个偶数,我们可以把这个偶数分成2个偶数的和,(例如5分频相当于10clk_in,10=4+6,可以4clk_in低电平,6clk_in高电平)(而要求占空比的时候,10=5+5,需要参考上面的做法)

一个完整的clk周期要包含5个clk_in,但是占空比不要求,那么设置一个计数器cnt,计数范围0-4,每个clk_in周期加1。当计数器数值在0~1时,clk_out5==1;当计数器数值在2~4时,clk_out5==0。这样就实现了周期为5、占空比为3/5 ​的clk_out5

`timescale 1ns/1nsmodule odd_div (    input     wire rst ,input     wire clk_in,output    wire clk_out5
);parameter N = 5;reg [2:0] cnt;
reg       clk_n;always @(posedge clk_in or negedge rst)
beginif(!rst)cnt <= 3'b000;else if (cnt == N-1)cnt <= 3'b000;elsecnt <= cnt + 1'b1;
endalways @(posedge clk_in or negedge rst)
beginif(!rst)clk_n <= 1'b0;else if (cnt == (N-1)/2)clk_n <= ~clk_n;else if (cnt <= 3'b000)clk_n <= ~clk_n;elseclk_n <= clk_n;
endassign clk_out5 = clk_n;endmodule

任意小数分频

小数分频器是分频器中最难的一种,而且不能像整数分频那样得到均匀且占空比为50%的分频输出

`timescale 1ns/1nsmodule div_M_N(input  wire clk_in,input  wire rst,output wire clk_out
);parameter M_N = 8'd87; parameter c89 = 8'd24;  // 8/9时钟切换点parameter div_e = 5'd8; //偶数周期parameter div_o = 5'd9; //奇数周期
//*************code***********//reg [3:0] clk_cnt;reg [6:0] cyc_cnt;reg div_flag;reg clk_out_r;always@(posedge clk_in or negedge rst) beginif(~rst)clk_cnt <= 0;else if(~div_flag)clk_cnt <= clk_cnt==(div_e-1)? 0: clk_cnt+1;elseclk_cnt <= clk_cnt==(div_o-1)? 0: clk_cnt+1;endalways@(posedge clk_in or negedge rst) beginif(~rst)cyc_cnt <= 0;elsecyc_cnt <= cyc_cnt==(M_N-1)? 0: cyc_cnt+1;endalways@(posedge clk_in or negedge rst) beginif(~rst)div_flag <= 0;elsediv_flag <= cyc_cnt==(M_N-1)||cyc_cnt==(c89-1)? ~div_flag: div_flag;endalways@(posedge clk_in or negedge rst) beginif(~rst)clk_out_r <= 0;else if(~div_flag)clk_out_r <= clk_cnt<=((div_e>>2)+1);elseclk_out_r <= clk_cnt<=((div_o>>2)+1);endassign clk_out = clk_out_r;
//*************code***********//
endmodule

FPGA——时钟分频相关推荐

  1. (91)FPGA时钟分频与倍频问题,面试必问(十五)(第19天)

    (91)FPGA时钟分频与倍频问题,面试必问(十五)(第19天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)FPGA时钟分频与倍频问题,面试必问(十五)(第1 ...

  2. 4种FPGA时钟分频 【附源码】:1.偶数分频;2.奇数分频(占空比50%);3.奇数分频(任意无占空比);4.小数分频;

    题目来源于牛客网,完整工程源码:https://github.com/ningbo99128/verilog 目录 VL37 偶数分频 VL40 奇数分频(占空比50%) VL42 奇数分频(任意无占 ...

  3. IC/FPGA面试之任意时钟分频电路的产生

    IC/FPGA面试之任意时钟分频电路的产生 #题目分析 第一步:确定输入输出,输入时钟,复位信号,分频选择信号,输出分频信号. 第二步:偶数分频实现通过计数即可.奇数分频,首先产生分频电路,其次使用始 ...

  4. (29)VHDL实现时钟分频

    (29)VHDL实现时钟分频 1.1 目录 1)目录 2)FPGA简介 3)VHDL简介 4)VHDL实现时钟分频 5)结语 1.2 FPGA简介 FPGA(Field Programmable Ga ...

  5. XILINX FPGA时钟资源

    Xilinx FPGA时钟资源 Xilinx FPGA时钟包括全局时钟资源.局部时钟资源和I/O时钟资源.Xilinx FPGA除了提供丰富的时钟网络之外,还提供了强大的时钟管理模块,并不断改进,从V ...

  6. Verilog功能模块——时钟分频

    一. 模块功能与应用场景 模块功能:对输入时钟进行任意倍数分频. 应用场景: 需要对时钟进行分频,而PLL不能满足要求或者使用起来不方便 需要固定倍数关系的时钟 二. 模块框图与使用说明 通过参数DI ...

  7. Xilinx FPGA时钟资源的使用

    赛灵思FPGA时钟资源的类型:DCM.PLL.PMCD.MMCM DCM:数字时钟管理器 PLL:锁相环 PMCD:相位匹配时钟分频器 MMCM:混合模式时钟管理器 DCM实际上就是一个DLL(延迟锁 ...

  8. STM8L芯片启动时钟分频问题及发现(转)

    源:STM8L芯片启动时钟分频问题及发现 转载于:https://www.cnblogs.com/LittleTiger/p/4460684.html

  9. n分频器 verilog_时钟分频系列——分数分频电路的Verilog实现

    IC君的第47篇原创文章 上一篇文章时钟分频系列--偶数分频/奇数分频/分数分频,IC君介绍了各种分频器的设计原理,其中分数分频器较为复杂,这一篇文章IC君再跟大家聊聊分数分频的具体设计实现. 一个分 ...

最新文章

  1. 关于RasASM的一个编译错误
  2. 信管师培训之第十二节课作业(外包管理+需求管理+组织级与大项目管理)
  3. AB1601运行后反复复位问题排查过程
  4. 会计日历-自动生成脚本
  5. 【原理+实战+视频+源码】docker映射端口教程
  6. 【学习笔记】第一章——操作系统的系统调用(陷入指令、库函数、作用流程)
  7. MySQL查询实验报告_实验报告数据库的基本查询'
  8. BZOJ 1019: [SHOI2008]汉诺塔( dp )
  9. MySQL数据库性能优化之硬件瓶颈分析
  10. Richard Hamming - You and Your Research
  11. 用python实现搜索树_二叉搜索树的python实现
  12. Windows Server 2019 安装应用商店
  13. I2C接口触摸屏驱动分析
  14. python中round(x、2)是什么意思_python中round函数具体使用详解
  15. 可任意切换分频倍数的时钟分频电路
  16. 记录你生活的点滴,体会分享的快乐
  17. python下载MP3到本地
  18. 点击链接跳转到微信公众号的方法
  19. 仿牛客论坛项目(3)
  20. 收藏!纯净windows系统镜像下载网站

热门文章

  1. QT 软键盘实现
  2. 2021年涡阳四中高考成绩查询,振奋人心,全是省重点!高考成绩出来了,涡阳家长快来看看!...
  3. mkv视频怎么转成mp4?
  4. PT100所谓的二线制,三线制,四线制如何接线(详解)
  5. 基于pandas、matplotlib、pyecharts的人工智能相关职位招聘市场数据分析
  6. 没比这更简单的了!安装PHP composer(windows环境)及简易使用
  7. 学习笔记 -《量子计算与编程入门》- 量子程序
  8. 上架APPStore 截图尺寸要求
  9. echarts 水滴图 去掉波浪阴影
  10. ESPnet-SE 开源工具介绍