目录

1.偶数分频

2. 奇数分频

3.半整数分频


分频器是FPGA中常用的设计之一,在FPGA设计中担任重要的角色(时钟对于FPGA电路系统的重要性不言而喻!)。尽管大多数设计中会广泛采用厂家集成的锁相环PLL资源进行分频,倍频和相移(每个厂商Xilinx/Alter等其开发套件会提供各自的IP),但对对时钟要求不高的基本设计还是需要通过自行设计分频相移,可节省锁相环资源。

提到分频,对于初学者可定就会想到利用一个计数器才基时钟下计数,通过翻转获得想要的时钟。这样的方法的确可以实现偶数分频,但是实现奇数分频的话,一个计数器可能不够,一般需要两个计数器。


1.偶数分频

偶数分频较奇数分频更为常见,通过一个计数器就完全可以实现了。如需要N分频(N为偶数,则N/2为整数),可通过一个计数器在待分频时钟的触发下循环奇数。当计数器从0奇数至N/2 -1时,输出时钟翻转。

Verilog实现:

module even(  clk_in    ,rst_n     ,clk_out
);input      clk_in;
input      rst_n;
output reg clk_out;parameter N=6;   //定义分频参数
reg [3:0] cnt;always @(posedge clk_in or negedge rst_n)
beginif(!rst_n) begin    cnt     <= 4'b0000  ;clk_out <= 1'b0     ;endelse if(cnt==(N/2-1)) beginclk_out <= ~clk_out;cnt     <= 4'b0000;end else cnt<=cnt+1; endendmodule

2. 奇数分频

首先看一下3分频的时序图:

从时序图上可以看出,对于奇数分频,就是分别利用主时钟的上升沿触发生成一个时钟,然后用下降沿触发生成一组时钟,然后将两个时钟信号进行或运算得到奇数分频的结果。

如果N是奇数,那么N/2非整数了(N-1/2为整数),那么该如何实现呢?

实现方法为:

        Step1:   双沿计数器计数;

使用2个计数器:cnt_up和cnt_down,分别在时钟的上升沿触发计数器cnt_up和cnt_down。

        Step2:生成两个控制信号Clk_up和Clk_down;

cnt_up计数到(N-1)/2-1电平翻转信号Clk_up,再计数到N-1电平翻转信号Clk_up,同时cnt_down计数到(N-1)/2-1电平翻转信号Clk_down,再计数到N-1电平翻转信号Clk_down。

        Step3:  求出分频后时钟;

如果Clk_up和Clk_down信号与Clk_out的关系与Clk_up和Clk_down信号中高低电平比有关(占空比):

(1)如果高 / 低电平比例为N-1/2      : N-1/2 + 1  ,则分频时钟 clk_div = clk_up || clk_down (如图 1 所示)。

(2)如果高 / 低电平比例为 N-1/2 +1 :N/2        ,则分频时钟 clk_div = clk_up && clk_down(如图 2 所示)。

module div3(clk     ,rst_n   ,clk_out );input     clk  ,  rst_n;
output    clk_out      ;//=======================================================================\
//**************************Internal Signals******************************
//=======================================================================/reg [3:0] cnt_p , cnt_n;  //clk上升沿(下降沿)触发生成的计数器cnt_p(cnt_n)
reg       clk_p , clk_n;  //clk上升沿(下降沿)触发生成的时钟clk_p(clk_n)parameter N=5 ;          //分频参数//===========================================================================\
//*****************************main code************************************
//==========================================================================///cnt_p 0-4
always @(posedge clk or negedge rst_n) beginif(!rst_n)cnt_p <= 4'd0;else if(cnt_p == N-1)cnt_p <= 0;else cnt_p <= cnt_p + 1'b1;end//cnt_n  0-4
always @(negedge clk or negedge rst_n) begin if(!rst_n)cnt_n <= 4'd0;else if(cnt_n == (N-1))cnt_n <= 0;else cnt_n <= cnt_n + 1'b1;end//clk_p
always @(posedge clk or negedge rst_n) beginif(!rst_n)clk_p <= 1;else if(cnt_p == (N-1)/2-1) clk_p <= ~clk_p;else if(cnt_p == (N-1))clk_p <= ~clk_p;end//clk_p
always @(negedge clk or negedge rst_n) beginif(!rst_n)clk_n<=1;else if(cnt_n==(N-1)/2-1)clk_n<=~clk_n;else if(cnt_n==(N-1))clk_n<=~clk_n;end  assign clk_out=clk_n|clk_p;endmodule


3.半整数分频

半整数分频,本次以2.5分频为例子。这个主要是利用时钟的上升沿和下降沿进行计数。

Verilog设计(二):分频电路设计相关推荐

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

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

  2. 【数字IC手撕代码】Verilog半整数分频|题目|原理|设计|仿真

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

  3. 【Verilog 设计】Verilog 实现偶数、奇数分频和任意小数分频

    目录 写在前面 偶数分频 Verilog 实现 TestBench 测试文件 RTL 视图 仿真波形 奇数分频 Verilog 实现 TestBench 测试文件 RTL 视图 仿真波形 任意小数分频 ...

  4. Verilog分频器的设计(6分频和1.5分频)

    一.分频器的设计 分频:将一个时钟N分频,则分频等到的时钟频率为原时钟的1/N,而周期为原时钟周期的N倍. 4种分频: 2n 分频:如2.4.8.16分频等:                  偶数分 ...

  5. FPGA数字信号处理(二)并行FIR滤波器Verilog设计

    该篇是FPGA数字信号处理的第二篇,选题为DSP系统中极其常用的FIR滤波器.本文将简单介绍FIR滤波器的原理,详细介绍使用Verilog HDL设计并行FIR滤波器的流程和方法.接下来几篇会介绍串行 ...

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

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

  7. Verilog设计实例(3)基于Verilog的单端口同步读写RAM设计

    文章目录 写在前面 正文 电路设计 行为仿真 交个朋友 写在前面 为什么要写单端口同步读写RAM呢? 没有那么多为什么?就是因为简单.基础,能清晰说明单端口RAM的原理,顺手给出设计,也能说明你的设计 ...

  8. [SugerTangYL] 简易电子时钟Verilog设计

    目录 前言 一.简易电子时钟的功能要求 二.设计思路&整体框架 三.完整代码 四.仿真 总结 前言 来分享第一个案例了!简易电子时钟的Verilog设计,电子时钟应该算是走嵌入式和FPGA开发 ...

  9. FPGA数字信号处理(三)串行FIR滤波器Verilog设计

    该篇是FPGA数字信号处理的第三篇,选题为DSP系统中极其常用的FIR滤波器.本文将在上一篇"FPGA数字信号处理(二)并行FIR滤波器Verilog设计" https://blo ...

  10. Verilog设计实例(2)一步一步实现一个多功能通用计数器

    博文目录 写在前面 正文 普通的二进制计数器 电路设计 行为仿真 普通的格雷码计数器 电路设计 行为仿真 LFSR 电路设计 行为仿真 多功能计数器 电路设计 行为仿真 生成语句实现方式 电路设计 行 ...

最新文章

  1. 86岁还在录网课:MIT教授Gilbert Strang最新「线性代数」课程上线
  2. 值得推荐的C/C++框架和库(转载)
  3. 工作改进三步曲:简化、优化、固化
  4. C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数发生器种子( seed)
  5. 【机器学习】Pandas练习题-提高你的数据分析技能
  6. PHP处理跨域:header(AccessControlAllowOrigin:星)允许所有来源访问;后端Curl请求转发
  7. mysql 树表删除无效节点
  8. 童年真的回来了么?《摩尔庄园》手游深度分析
  9. 深度学习——02、深度学习入门 15-18
  10. 被替换的项目不是替换值长度的倍数_面试官,为啥HashMap的长度是2的n次方?
  11. 以下python注释代码格式正确的是_Python文件头注释的含义,你肯定不懂
  12. C++ 模板全特化中的函数特化
  13. 文件上传学习:(结合upload-labs 01-12):part01
  14. [转] 接触C# 反射 2
  15. tensorflow - model.predict
  16. 1. Zend_Acl
  17. C++入门系列博客二 C++ 控制流
  18. java面试简历精通n_对标金九银十:各大厂最新Java面试真题整理+简历模板
  19. Python中sys.argv[]的用法简明解释
  20. clamwin + 拖拽查毒+右键查毒

热门文章

  1. MySQL优化器成本记录表
  2. 腾讯云安装和搭建宝塔面板详细教程
  3. 广东计算机职业学校排名2015年,广东职业高中学校排名
  4. DOSBOX搭建汇编环境
  5. u盘安装linux卡logo,安装Ubuntu16.04卡在logo界面
  6. [二分法]leetcode2187:完成旅途的最少时间(medium)
  7. css+html创建一个大风车
  8. js报错- cannot set property xxx of undefined
  9. html div 100 无效,HTML / CSS - IE中div没有100%高度
  10. outlook仅限于此计算机如何解决,Outlook2013中IMAP方式已发送邮件、已删除邮件等文件夹注册失败...