学习之前,先理解一下什么叫占空比?
占空比:对于一串理想的脉冲序列中(如方波),正脉冲的持续时间与脉冲中周期的比值,叫做这个方波的占空比。

偶数倍分频

偶数倍分频应该是大家比较熟悉的分频,也是最简单的分频计数器,完全可以通过计数器直接实现的。例如进行N倍数偶数分频,那么可以通过待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出的时钟进行翻转,并且将计数器复位,是的下一个时钟从零开始计数。以此循环,即可实现任意偶数倍分频

奇数倍分频

奇数倍分频常常在论坛上有人问起,实际上,奇数倍分频有两种实现方法:
首先,完全可以通过计数器来实现,如进行三分频,通过待分频时钟 上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转,比如可以在计数器计数到1时,输出时钟进行翻转,计数到2时再次进行翻转。即是在计数 值在邻近的1和2进行了两次翻转。这样实现的三分频占空比为1/3或者2/3。如果要实现占空比为50%的三分频时钟,可以通过待分频时钟下降沿触发计 数,和上升沿同样的方法计数进行三分频,然后下降沿产生的三分频时钟和上升沿产生的时钟进行相或运算,即可得到占空比为50%的三分频时钟。这种方法可以 实现任意的奇数分频。
归类为一般的方法为:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数选定到某一个值进行输出时钟翻 转,然后经过(N-1)/2再次进行翻转得到一个占空比非50%奇数n分频时钟。再者同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相 同值时,进行输出时钟时钟翻转,同样经过(N-1)/2时,输出时钟再次翻转生成占空比非50%的奇数n分频时钟。两个占空比非50%的n分频时钟相或运 算,得到占空比为50%的奇数n分频时钟。
另外一种方法:对进行奇数倍n分频时钟,首先进行n/2分频(带小数,即等于(n-1)/2+0.5),然后再 进行二分频得到。得到占空比为50%的奇数倍分频。

小数分频

首先讲讲如何进行n+0.5分频,这种分频需要对输入时钟进行操作。基本的设计思想:对于进行n+0.5分频,首先进行模n的计数,在计数到 n-1时,输出时钟赋为‘1’,回到计数0时,又赋为0,因此,可以知道,当计数值为n-1时,输出时钟才为1,因此,只要保持计数值n-1为半个输入时 钟周期,即实现了n+0.5分频时钟,因此保持n-1为半个时钟周期即是一个难点。从中可以发现,因为计数器是通过时钟上升沿计数,因此可以在计数为n- 1时对计数触发时钟进行翻转,那么时钟的下降沿变成了上升沿。即在计数值为n-1期间的时钟下降沿变成了上升沿,则计数值n-1只保持了半个时钟周期,由 于时钟翻转下降沿变成上升沿,因此计数值变为0。因此,每产生一个n+0.5分频时钟的周期,触发时钟都是要翻转一次。设计思路如下:

下面为任意正整数分频代码:

module div_clk(input clk,input   rst_n,output    o_clk
);parameter WIDTH = 3;parameter    N     = 6;reg [WIDTH-1:0]  cnt_p;reg               clk_p;reg               clk_n;assign    o_clk = (N==1)?clk : (N[0])?(clk_p | clk_n) : clk_p;//其中N==1是判断不分频,N[0]是判断是奇数还是偶数,若为1则是奇数分频,若是偶数则是偶数分频。always @(posedge clk or negedge rst_n) beginif(!rst_n)cnt_p <= {WIDTH{1'b0}};else if(cnt_p == (N-1))cnt_p <= {WIDTH{1'b0}};elsecnt_p <= cnt_p + 1'b1;endalways @(posedge clk or negedge rst_n) beginif(rst_n == 1'b0)clk_p <= 1;//此处设置为0也是可以的,这个没有硬性的要求,不管是取0还是取1结果都是正确的。else if(cnt_p < (N>>1))/*N整体向右移动一位,最高位补零,其实就是N/2,不过在计算奇数的时候有很明显的优越性*/clk_p <= 1;elseclk_p <= 0;endalways @(negedge clk or negedge rst_n) beginif(rst_n == 1'b0)clk_n <= 1;else clk_n <= clk_n;endendmodule

下面为一段代码实现的奇数、偶数、小数分频

module divf #
(    parameter Div_num = 12 ,    // 分频数parameter state=0        //半分频为0,奇数分频为1,偶数分频为2
)
(
input                 clr,
input                 clk,
output                Div_clk
);
reg [24:0]  count;case(state)
1:   begin  //ji_shureg         pos_clk;reg         neg_clk;always@(posedge clk or negedge clr)if(!clr)                     count<=0;else if(count==0 & pos_clk)  count<=Div_num/2-1;else if(count==0)            count<=Div_num/2;else                         count<=count-1;always@(posedge clk or negedge clr)if(!clr)                     pos_clk<=0;else if(count==0)            pos_clk<=~pos_clk;else                         pos_clk<=pos_clk;always@(negedge clk or negedge clr)if(!clr)                     neg_clk<=0;else                         neg_clk<=pos_clk;assign Div_clk = pos_clk & neg_clk;end2:   begin  //ou_shureg          Div_clk1;always@(posedge clk or negedge clr)if(!clr)                     count<=0;else if(count==0)            count<=Div_num/2-1;else                         count<=count-1;always@(posedge clk or negedge clr)if(!clr)                     Div_clk1<=0;else if(count==0)            Div_clk1<=~Div_clk1;assign Div_clk = Div_clk1;end0:   begin   //ban_fen_pinreg         count_div;reg         count_div2;wire        clk_half;assign  clk_half = clk^count_div2;always@(posedge clk_half or negedge clr)   //模Div_num 计数if(!clr)                       count<=0;else if(count== Div_num-1)      count<=0;else                         count<=count+1;always@(posedge clk_half or negedge clr)   //模Div_num 计数if(!clr)                       count_div<=0;else if(count== Div_num-1)      count_div<=1;else                         count_div<=0;always@(posedge count_div or negedge clr)   //对count_div二分频if(!clr)                       count_div2<=0;else                         count_div2<=~count_div2;assign Div_clk = count_div;end
endcaseendmodule

FPGA知识点---任意分频电路设计相关推荐

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

    FPGA学习笔记--分频电路设计 发布时间:2015-10-3023:29:52 分频就是用一个时钟信号通过一定的电路结构变成不同频率的时钟信号,这里介绍一下整数分频电路的设计方法.整数分频电路有偶数 ...

  2. 【马春杰杰】使用FPGA实现任意分频、二分频

    博客已迁至[马春杰杰]http://www.machunjie.com/hardware/82.html 请移步新博客,谢谢.!

  3. 【FPGA】分频电路设计(Verilog HDL设计)(良心博文)

    目录 前言 分频器分类 偶分频 奇分频 占空比为50%的奇分频 占空比不限定的奇数分频器 前言 虽然在实际工程中要产生分频时钟一般采用FPGA的时钟管理器来进行分频.倍频,通过设置一下IP核中的参数即 ...

  4. FPGA分频电路实现(奇数,偶数,小数半分频,任意分频)

    https://blog.csdn.net/weixin_43950612/article/details/104687942(简介明了,奇数,偶数,小数,任意分频) http://www.myexc ...

  5. 奇偶分频电路设计(任意占空比、50%占空比)

    一.概述 分频电路一般就是以输入源时钟为参考,将其进行降频输出:分频可以使用锁相环时钟资源实现,也可以计数为基础,进行分频设计.本文主要记录后者的相关问题. 二.偶分频 1.一些概念 分频数:即降频倍 ...

  6. 为所欲为——教你什么才是真正的任意分频

    转自http://www.cnblogs.com/crazybingo/archive/2011/07/26/2117162.html 一.为啥要说任意分频 也许FPGA中的第一个实验应该是分频实验, ...

  7. 基于数字电路典型分频电路设计

    本系统使用的Multisim14仿真文件下载链接 基于数字电路典型分频电路设计 摘要 本系统通过数字电路设计,可以实现确定相位且频率较为准确的10KHZ.30KHZ.50KHZ的方波输出.所有电路均通 ...

  8. 分频电路设计(笔记)

    通常情况下,时钟的分频在FPGA设计中占有重要的地位,在此就简单列出分频电路设计的思考思路. 偶数分频电路: 如果要进行N倍偶数分频,可有待分频的时钟触发计数器,当计数器从0计到N/2-1时,输出时钟 ...

  9. verilog 语言实现任意分频

    1.偶分频 偶分频比较简单,假设为N分频,只需计数到N/2-1,然后时钟翻转.计数清零,如此循环就可以得到N(偶)分频.代码如下. module fp_even(clk_in,rst_n,clk_ou ...

最新文章

  1. Linux Socket学习(十三)
  2. lnmp之mysql原码编译
  3. /scriptalert(/xss/)/script
  4. 可以用在任何人身上:百战百胜人生10大成功秘诀
  5. Spring Cloud Alibaba 雪崩效应和容错解决方案
  6. github不支持html,为什么Github页面不允许我有效的HTML?
  7. GitHub 近两万 Star!深度学习 500 问带你入门人工智能!| 技术头条
  8. 浅析C++开发工程师的薪资与发展
  9. SpringBoot --thymeleaf(资源文件css、js的引入)
  10. 论文笔记_S2D.40_2017_CVPR_半监督深度学习的单目深度图预测
  11. 等保 2.0 二级 VS 三级
  12. Bluedroid 函数分析:bta_dm_gattc_register
  13. 解决阿里巴巴JSONObject工具 com.alibaba.fastjson.JSONObject cannot be cast to 的问题
  14. zabbix配置监控主机及微信报警功能
  15. iOS开发罗盘/指南针
  16. Oracle 删除数据后释放数据文件所占磁盘空间(表空间降高水位)
  17. R新建空矩阵循环放数据
  18. Linux中设置开机启动执行命令和普通用户配置环境变量开机启动生效
  19. 仿QQ浏览器mac版官网主页 html+css3特效
  20. win7系统软件安装显示NSIS ERROR的解决方法

热门文章

  1. vmware虚拟机安装 Android x86
  2. 【2020百度发帖教学】百度贴吧怎么发帖顶帖?发广告图不删?还能带联系方式推广?
  3. 轻松搞定手机在线制作gif动态表情图的操作技巧
  4. Vegas使用技巧——怎么用Vegas叠加视频和图片素材
  5. 珍爱网服务怎么样?我的真实经历告诉你!
  6. 毫米波雷达天线耦合(背景环境)的影响与消除
  7. 学IT最重要的东西是什么?
  8. Android使用FFmpeg开发播发器(一)编译FFmpeg
  9. 华东交通大学c语言程序设计,2016年华东交通大学理学院C语言程序设计考研复试题库...
  10. SpringCloud Invalid packaging for parent POM 1.0-SNAPSHOT, must be “pom“ but is “jar“