当前位置:   article > 正文

【数字IC/FPGA】半整数分频

半整数分频

整数分频回顾

之前的博客中,我们讨论的偶数分频和奇数分频,总结一下,就是:
1.偶数分频时,设计一个计数器,从0计到N-1,然后又回到0,信号在计数器等于N/2-1和N-1的时候翻转。
2.奇数分频时,设计两个计数器cnt_p和cnt_n,分别在时钟的上升沿和下降沿改变,并且计数范围为0-N-1,同时设计两个信号clk_p和clk_n,clk_p在时钟上升沿改变,clk_n在下降沿改变,当计数器cnt_p的值为(N-1)/2和N-1时,clk_p信号翻转,clk_n同理。最后两个信号相或就能得到最终的结果。

半整数分频

本文我们讨论半整数分频的实现,即K+0.5分频器的设计。
我们设K+0.5=N,则下面是我们的设计方法,在下图中,我们首先设置了两个计数器cnt_p和cnt_n,分别在时钟上升沿和下降沿改变,同时也设置了两个时钟信号clk_p,clk_n,同样也分别在上升沿和下降沿改变。
我们让clk_p信号的高电平持续N+0.5个周期,低电平信号持续N-0.5个周期,clk_n信号也做同样的处理,但是,让这两者的相位差为N个周期(这是容易做到的),这样,我们将clk_p和clk_n相与,就能得到一个N分频的时钟,尽管占空比不等于50%。
在这里插入图片描述

代码实现

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/03/08 15:52:45
// Design Name: 
// Module Name: clk_div
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module clk_div
#(parameter N = 5)       //5+0.5分频
(
input logic clk,
input logic rst,
output logic clk_div
    );

logic [3:0] cnt_p;
logic [3:0] cnt_n;
logic clk_p;
logic clk_n;
always_ff@(posedge clk,posedge rst)
if(rst)
     cnt_p<=0;
else if(cnt_p==(2*N+1)-1)
     cnt_p<=0;
else
     cnt_p<=cnt_p+1;
//
always_ff@(negedge clk,posedge rst)
if(rst)
    cnt_n<=0;
else if(cnt_n==2*N+1-1)
    cnt_n<=0;
else 
    cnt_n<=cnt_n+1;
//clk_p
always_ff@(posedge clk,posedge rst)
if(rst)
     clk_p<=0;
else if(cnt_p==0)
     clk_p<=1;
else if(cnt_p==(N+1))
     clk_p<=0;
//clk_n
always_ff@(negedge clk,posedge rst)
if(rst)
     clk_n<=1;
else if(cnt_n==0)
     clk_n<=0;
else if(cnt_n==N)
     clk_n<=1;
//
assign clk_div=clk_n&clk_p;
endmodule

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69

仿真平台:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/03/08 10:45:00
// Design Name: 
// Module Name: test_tb
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module test_tb(

    );
logic clk;
logic rst;
logic clk_div;
initial begin
    clk=0;
    forever begin
        #5 clk=~clk;
    end
end
initial
begin
    rst=1;
    #21
    rst=0;
end
clk_div 
#(.N(3))
U(.*);
endmodule

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

仿真得到的波形(以5.5分频为例)
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/519172
推荐阅读
相关标签
  

闽ICP备14008679号