首页 > 其他分享 >5-时钟分频

5-时钟分频

时间:2023-01-14 15:33:07浏览次数:29  
标签:分频 clk 时钟 占空比 rstn 10

来自:https://www.runoob.com/w3cnote/verilog2-clock-division.html 目前在大部分设计中还广泛使用集成锁相环(如altera的PLL,Xilinx的DLL)来进行时钟的分频、倍频以及相移设计,但是,对于时钟要求不太严格的设计,通过自主设计进行时钟分频的实现方法仍然非常流行。首先这种方法可以节省锁相环资源,再者,这种方式只消耗不多的逻辑单元就可以达到对时钟操作的目的。

1. 偶数分频:

采用模N/2计数器,计数器在 (N/2-1)时,输出波形实现翻转。

module clk_div_odd(clk, rstn, clk_div10); 
    input wire clk ;   
    input wire rstn ;
    output wire clk_div10 ;
    parameter N = 10 ;
    reg clk_div10_r ;
    reg [3:0] cnt ;
    always @(posedge clk or negedge rstn) begin
        if(!rstn) cnt <= 'd0;
        else if(cnt==(N/2)-1) cnt <= 'd0;
        else cnt <= cnt + 1;
    end

    assign clk_div10 = clk_div10_r;
    always @(posedge clk or negedge rstn) begin
        if(!rstn) clk_div10_r <= 1'b0;
        else if(cnt == (N/2)-1) clk_div10_r <= ~clk_div10_r;
        else clk_div10_r <= clk_div10_r;
    end
endmodule        

2. 奇数分频

如果不要求占空比为 50%,可用模N计数器。然后根据计数值选择一定的占空比输出分频时钟。对于实现占空比为50%的奇数分频,可以利用源时钟双边沿特性并采用"与操作"或"或操作"的方式将分频时钟占空比调整到 50%。

或操作:

module clk_div_even(clk, rstn, clk_div9);
input wire clk ;
input wire rstn ;
output wire clk_div9 ;
parameter N = 9 ;
reg clk_div9_r ;
reg [3:0] cnt ;
always @(posedge clk or negedge rstn) begin
    if(!rstn) cnt <= 'd0;
    else if(cnt==N-1) cnt <= 'd0;
    else cnt <= cnt + 1;
end

//count when posedge
reg clkp_div9_r;
always @(posedge clk or negedge rstn) begin
    if(!rstn) clkp_div9_r <= 1'b0;
    else if(cnt == (N/2)-1) clkp_div9_r <= 1'b0; //4-8 low
    else if(cnt == N-1) clkp_div9_r <= 1'b1; //0-3 high
end

//count when negedge
reg clkn_div9_r;
always @(negedge clk or negedge rstn) begin
    if(!rstn) clkn_div9_r <= 1'b0;
    else if(cnt == (N/2)-1) clkn_div9_r <= 1'b0;
    else if(cnt == N-1) clkn_div9_r <= 1'b1;
end

assign clk_div9 = clkp_div9_r | clkn_div9_r ;

endmodule

与操作:

原理:假设实现N=2K+1分频,则计数器通过下降沿采样产生K个高电平;K+1个低电平的信号,通过下降沿采样将该信号平移0.5T相位,然后将这两个信号一或,则原来的高电平多出半个周期,原来的低电平减少半个周期。

3. 半整数分频:

在实际工程中,我们还经常会遇到半分频器。比如要得到2MHz的时钟信号,而系统晶振频率为25MHz,这时候就需要对系统时钟作12.5分频。那么这种半分频器又该如何实现呢?最直接的办法当然还是用计数器了,由于半整数分频无法实现50%的占空比(因为50%占空比就要求一个周期内高低电平都是6.25个系统时钟周期,这个0.25是不可能实现的),我们只能让占空比尽可能接近50%。

以4.5分频为例:

采用一个模9计数器分前5(3低2高)后4(2低2高),然后采用一个模5计数器在时钟下降沿采样产生一个调整信号,当计数到5/2-1=2的时候翻转,然后将这两个信号相或:

4. 小数分频

小数分频不能做到分频后的每个时钟周期都是源时钟周期的小数分频倍,更不能做到分频后的时钟占空比均为 50%,因为 Verilog 不能对时钟进行小数计数。和半整数分频中第一次分频时引入的"平均频率"概念类似,小数分频也是基于可变分频和多次平均的方法实现的。例如进行 7.6 倍分频,则保证源时钟 76 个周期的时间等于分频时钟 10 个周期的时间即可。

实现方法如下:

以7.6分频为例,其分频计算公式为:7M+8N=76;M+N=10,则

7 分频和 8 分频的实现顺序有以下 4 种:

(1) 先进行 4 次 7 分频,再进行 6 次 8 分频;

(2) 先进行 6 次 8 分频,再进行 4 次 7 分频;

(3) 将 4 次 7 分频平均地插入到 6 次 8 分频中;

(4) 将 6 次 8 分频平均地插入到 4 次 7 分频中。

前两种方法时钟频率不均匀,相位抖动较大,所以一般会采用后两种平均插入的方法进行小数分频操作。平均插入可以通过分频次数差累计的方法实现。

7.6 分频的实现过程如下:

(1) 第一次分频次数差值为 76-10*7 = 6 < 10,第一次进行 7 分频。

(2) 第二次差值累加结果为 6+6=12 > 10,第二次使用 8 分频,同时差值修改为 12-10=2。

(3) 第三次差值累加结果为 2+6=8 < 10,第三次使用 7 分频。

(4) 第四次差值累加结果为 8+6=14 > 10,第四次使用 8 分频,差值修改为 14-10=4。

以此类推,完成将 6 次 8 分频平均插入到 4 次 7 分频的过程。

标签:分频,clk,时钟,占空比,rstn,10
From: https://www.cnblogs.com/fukq/p/17051899.html

相关文章

  • 4-跨时钟域设计
    参考文献https://www.zhihu.com/people/li-hong-jiang-54/posts(非常感谢这位博主)《ClockDomainCrossing(CDC)Design&VerificationTechniquesUsingSystemVerilo......
  • 日子只能往前走,一个方向顺时钟
     又是年尾了,突然听到王力宏的依然爱你,歌词写的情深,意境却是懒散。是的,新的一年又到了,一年一年又一年,飞逝尽在一转眼,我不像从前的自己,你也有点不像你。唯一永远不改变,是不......
  • HAL库教程7:STM32的时钟系统
      STM32的时钟系统比较复杂,不像51单片机,可能只有一个时钟。原因:1、外设多,不同的外设有不同的时钟要求;2、功耗原因,速度越快,功耗越大,抗电磁干扰能力越弱。此处以STM32F405......
  • 牛客进阶题目18:无占空比要求的奇数分频
    直接采用0-5计数器,虽然题目说无占空比要求,但其实只有60%占空比才能通过`timescale1ns/1nsmoduleodd_div(inputwirerst,inputwireclk_in,......
  • Python实现画板、电子时钟、计算器、桌面放大镜
     1、Python实现画板功能importtkinterimportwx.stcimporttkinter.simpledialogimporttkinter.colorchooserimporttkinter.filedialogfromPILimportImage......
  • 【晶振】NTP网络校时服务器(卫星时钟)电路里的主心跳
    【晶振】NTP网络校时服务器(卫星时钟)电路里的主心跳【晶振】NTP网络校时服务器(卫星时钟)电路里的主心跳京准电子科技官微——ahjzsz晶振是NTP网络校时服务器(卫星时钟)电路......
  • 牛客进阶题目17:任意小数分频(重点)
    此题无思路,抄一个题解在这`timescale1ns/1nsmodulediv_M_N(inputwireclk_in,inputwirerst,outputregclk_out);parameterM_N=8'd87;parameterc......
  • 牛客进阶题目16:占空比50%的奇数分频
    根据题目中波形可以看出,周期为7,高电平和低电平分别持续3.5个周期。继续观察波形,输出信号拉高时和输入时钟下降沿对齐,拉低时和输入时钟上升沿对齐。由于同一个信号不能同时......
  • 牛客进阶题目13:时钟分频(偶数)
    用计数器来翻转即可`timescale1ns/1nsmoduleeven_div(inputwirerst,inputwireclk_in,outputwireclk_out2,outputwir......
  • STM32 - 时钟系统详解
    0.前言0.1什么是时钟时钟是由电路产生的具有周期性的脉冲信号,相当于单片机的心脏,给单片机提桶一个统一的信号要想使用单片机的外设必须开启相应的时钟,0.2时钟对单......