小白学懂分频器(二)

这篇具有很好参考价值的文章主要介绍了小白学懂分频器(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

分频:简单来说,二分频后的方波一个周期为标准方波高低电平循环两个周期,四分频为4个周期。分频后的时钟周期为原来的n倍,即为n分频。
  频率和周期的关系:f=1/T

(1)简单的计数器

  计数器实质是对输入的驱动时钟进行计数,在某种意义上讲,等同于对时钟进行分频。
  下面举例来说明:假设寄存器位数为n,最大计数长度为2n(从0计数到N-1)的计数器。假设位数为3,从0开始依次计数为:000、001、010、011、100、101、110、111。一共计8个数,计满后下一次计数为000,开始循环计数。观察这几个数的最高位,00001111,每一个周期计数一次,共计8次,8个周期,8分频。次高位为00110011,4个周期完成循环,为4分频。最低位为01010101,2个周期完成循环,为2分频。最高位的输出为N=2^n分频,次高位为N/2分频。

module test#(parameter N=3)(
	input clk,
	input rst_n,
	output clk_div
);

	reg [N-1:0] div_reg ;//分频计数器
	always @(posedge clk or negedge rst_n)
    if (rst_n == 1'b0 )
        div_reg    <= 0 ;
    else
        div_reg    <= div_reg + 1'b1 ;

	assign clk_div = div_reg[N-1] ;


endmodule

  当n不是2的整数次幂时,如n为5,从0计数到n-1,其最高位作为时钟输出(占空比不一定为 50%),即从0计数到4后又返回0,那么需要定义一个三位的寄存器。寄存器的计数过程为:
000-001-010-011-100-000-001-010-011-100-000-001-010-011-100-000-001-010-011-100···
最高位为0-0-0-0-1-0-0-0-0-1,计数5次,5个周期,为5分频。但占空比不是50%。
可以看出:一个最大计数长度为N(从0计数到N-1)的计数器,其最高位的输出,是输入频率的N分频。
(2)偶数分频(50%占空比)
  当进行2、4、8(2的n次)分频时,输出2的n次最高位即为相应分频,并且占空比为50%,但6、10这样的分频,占空比就不是50%了,该怎么办呢?
  解决办法很简单,以6分频举例,当计数到3时,将时钟翻转,计数清零并重新计数。当n=6时,6/2=3,计算机计数从0开始,0、1、2、3共计数4次。

module test#(parameter N=6)(
input clk,
input rst_n,
output clk_div
);
reg div_reg ;
reg [N-1:0] div_cnt        ;//分频计数器
always @(posedge clk or negedge rst_n)
    if (rst_n == 1'b0 )begin
        div_cnt    <= 0 ;
        div_reg    <= 0 ;
    end
    else if(div_cnt == (N/2 - 1))begin
        div_cnt    <= 0;
        div_reg    <= ~div_reg ;
    end
    else
        div_cnt    <= div_cnt + 1'b1 ;

assign clk_div = div_reg ;
endmodule

(3)奇数倍分频

①占空比接近50%

  第一种方法与上面的类似,先将奇数变成偶数,再除以2,计数完成进行时钟翻转。此时得出的分频接近50%,N越大越趋近于50%。

②占空比50%

  一个周期的系统时钟可以分为一个高电平和低电平。假设目标为3分频,循环三次的话高低高低高低;假如我是说假如在高低高这三个阶段输出1,在地高低这三个阶段输出0,组成的新时钟刚好是占空比为50%的3分频时钟。
那我们该怎样实现呢?
  从上升沿开始计数到1(也就是上面系统时钟的高低),计数时输出1,完成后输出0,一直到计数到2时翻转。
从下降沿开始计数,计一个周期(也就是上面的低高),计数时输出1,完成后输出0,一直到计数为2时翻转。两个时钟相或,就可以得到想要的结果。如下图所示:

小白学懂分频器(二),fpga开发
  第一个上升沿来临后,计数器从0开始自加1,同时输出1,第二个上升沿来临后,计数器值自加1,输出变为0,第三个上升沿来临计数为2,下一个上升沿来临时,计数器满足要求,开始翻转输出,这样循环。
下降沿采用同样思路编写代码。

module test#(parameter N=5)(//N分频
input clk,
input rst_n,
output clk_div
);

reg sig_r ;//定义一个上升沿翻转的信号
reg sig_f ;//定义一个下降沿翻转的信号
reg [N-1:0]    cnt_r;//上升沿计数器
reg [N-1:0]    cnt_f;//下降沿计数器

wire clk_f ;
assign clk_f = ~clk ;//用来触发下降沿计数器的时钟
                    //由于同时使用上升沿和下降沿触发器不好,因此我们为同一边沿,都使用上升沿触发
                    //只不过是将时钟进行反向

always @(posedge clk or negedge rst_n)begin//上升沿计数
    if(rst_n == 1'b0)begin
        sig_r    <= 0 ;
        cnt_r    <= 0 ;
    end else if( cnt_r == (N-1)/2 )begin
        sig_r    <= ~sig_r ;
        cnt_r    <= cnt_r + 1 ;
    end else if ( cnt_r == (N-1) )begin
        sig_r    <= ~sig_r ;
        cnt_r    <= 0 ;
    end else
        cnt_r    <= cnt_r + 1 ;
end

always @(posedge clk_f or negedge rst_n)begin//下降沿计数
    if(rst_n == 1'b0)begin
        sig_f    <= 0 ;
        cnt_f    <= 0 ;
    end else if( cnt_f == (N-1)/2 )begin
        sig_f    <= ~sig_f ;
        cnt_f    <= cnt_f + 1 ;
    end else if ( cnt_f == (N-1) )begin
        sig_f    <= ~sig_f ;
        cnt_f    <= 0 ;
    end else
        cnt_f    <= cnt_f + 1 ;
end

assign clk_div = sig_f || sig_r ;

endmodule

  结语:结合奇数部分和偶数部分,编写新的代码。
  新的代码如下所示:文章来源地址https://www.toymoban.com/news/detail-571586.html

module test #( parameter cfactor= 5)(
  input clk,
  input rst_n,
  output clk_div
);
reg clk_loc;
//reg [15:0] cnt;//allowed maximum clock division factor is 65536
reg [7:0] cnt;//allowed maximum clock division factor is 256

assign clk_div = (cfactor==1)? clk : clk_loc;
//assign clk_div = ((rst==1) || (cfactor==1))? clk : clk_loc;

always@(posedge clk or negedge rst_n)
  if(!rst_n)begin
    cnt <= 'd0;
    clk_loc = 1;
  end
  else begin
    cnt <= cnt + 1'b1;
    if(cnt==cfactor/2-1)
      clk_loc = 0;
    else if(cnt==cfactor-1) begin
      cnt <= 'd0;
      clk_loc = 1;
    end
  end

endmodule

到了这里,关于小白学懂分频器(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA 多路分频器实验

    1 概述         在 FPGA 中,时钟分频是经常用到的。本节课讲解 2 分频、3 分频、4 分频和 8 分频的 Verilog 实现并且学习 generate 语法功能的应。 2 程序设计思路         1)整数倍分频,为 2、4、8,这种 2^n 次方倍数倍数关系的分频最容易实现,所以我们可以把这 3 种分

    2024年01月19日
    浏览(38)
  • 【FPGA & Verilog】奇数分频器 (50%)

    2.1 设计输⼊ 1. 模块名称:FrequencyDivider 2. 输⼊输出:CLK、RSTn、CLK_15 2.2 引脚约束 1. 输⼊端 ⾃定义 2. 输出端 ⾃定义 2.3 设计要求 1. 输出时钟的周期是输⼊时钟的15倍(15分频器) 2. 分别实现 7/15 占空⽐和 50% 占空⽐两种分频⽅式 3. 使⽤RTL View分析电路的区别 2.4 电路仿真1.

    2024年02月03日
    浏览(34)
  • FPGA学习日记——verilog实现分频器

    主要思想是利用计数器实现分频器功能,其中按原理不同可分为分频和降频 一、先说分频。 1、第一种实现方式 输入信号为系统时钟50MHz,本例子先以偶数倍六分频为例实现分频的第一种方式:计数器对系统时钟的上升沿进行计数,最大计数M=5,即count取值范围为0~5,当计数

    2024年02月04日
    浏览(45)
  • FPGA基础设计(二):任意分频器(奇数,偶数,小数)

    FPGA开发板上一般只有一个晶振,即一种时钟频率。数字系统设计中,时间的计算都要以时钟作为基本单元,对基准时钟进行不同倍数的分频而得到各模块所需时钟频率,可通过Verilog代码实现;倍频可通过锁相环【PLL】实现。 把输入信号的频率变成成倍的低于输入频率的输出

    2024年02月01日
    浏览(44)
  • 【FPGA】Verilog:时序电路设计 | 二进制计数器 | 计数器 | 分频器 | 时序约束

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:计数器与分频器   ​​ 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用

    2024年02月02日
    浏览(62)
  • 实验二 基于FPGA的分频器的设计(基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。拓展任务1:用按键或开关控制蜂鸣器的响与不响。拓展任务2:用按键或开)

    1. 实验目的: (1) 掌握QuartusⅡ软件的层次型设计方法; (2) 掌握元件封装及调用方法; (3) 熟悉FPGA实验平台,掌握引脚锁定及下载。 2. 实验任务: (1) 基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。 (2) 拓展任务1:用按键或开关

    2024年02月06日
    浏览(47)
  • 12-分频器 -偶分频

    计数器是对于时钟信号进行计数,板载晶振的时钟频率是固定的,有时候需要进行分频和倍频才能满足需要 开发板上只有一种晶振,只有一种频率的时钟,想要通过对与固定时钟进行分频或者是倍频的方式得到各个模块所需的时钟频率,得到比固定时钟快的时钟通过 倍频 ,得到比固

    2024年02月06日
    浏览(42)
  • 分频器——(任意奇分频(50%占空比、非50%占空比),任意偶分频,任意小数分频)

            在数字系统的设计中经常会碰到 需要使用多个时钟 的情况。时钟信号的产生通常具有两种方法,一种是使用PLL(Phase Locked Loop,锁相环),可生成 倍频、分频信号 ;另一种则是使用硬件描述语言构建一个分频电路。         分频器的设计通常分为以下 三类:

    2023年04月23日
    浏览(69)
  • VHDL实现分频器

    目录 设计要求: 实现代码: 生成元件图形: 模拟仿真结果:​ 整体项目资源在:VHDL分频器-占空比50%-将FPGA板上的50Mhz的信号分频为1hz时钟信号-嵌入式文档类资源-CSDN文库 设计要求:                 将系统时钟50MHz 分频为1Hz 的时钟信号                 占

    2024年02月12日
    浏览(38)
  • 06 分频器设计

    实现分频一般有两种方法,一种方法是直接使用 PLL 进行分频,比如在 FPGA 或者 ASIC 设计中,都可以直接使用 PLL 进行分频。但是这种分频有时候受限于 PLL 本身的特性,无法得到频率很低的时钟信号,比如输入 100Mhz 时钟,很多PLL 都无法得到 1Mhz 以下的时钟信号。另外一种方

    2024年02月19日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包