分频电路(转)

2019-04-14 16:01发布

各种分频电路

偶数分频:

    偶数分频电路比较简单,需要使用计数器即可实现50%占空比的分频电路。     下面是一个N分频的偶数分频电路Verilog代码: module N_bit_even_divider (   input       i_clk, 
  input       rst_n, 
  output reg  o_clk
);   parameter N = N_bit_even;   // bit_of_N: N_bit_even的二进制位宽 reg [(bit_of_N - 1):0] cnt; // 计数器单元   // 上升沿计数: 0~(N-1) always @ (posedge i_clk, negedge rst_n) begin 
  if (!rst_n) 
   cnt <= 0;
  else   begin     if (cnt == N-1)       cnt <= 0;     else        cnt <= cnt + 1;   end 
end
  // 生成上升沿时钟 
// 0~(N/2-1) -> 1; (N/2)~(N-1) -> 0
always @ (posedge i_clk, negedge rst_n) begin   if (!rst_n)     o_clk <= 0; 
  else
  begin     if (cnt <= (N/2-1))       o_clk <= 1;     else       o_clk <= 0; 
  end
end endmodule  

奇数分频:

    非50%占空比的N倍奇数分频也可以简单的通过一个模N计数器来实现,如3分频电路,通过模三计数,在1和2时刻输出时钟进行翻转就可以实现占空比为1/3,2/3的分频电路。它的verilog代码实现与上面基本相同,就不在多说了。     50%占空比的N倍奇数分频。先进行上升沿触发进行模N计数,计数到(N-1)/2时进行输出时钟翻转,然后计数到N-1再次进行翻转得到一个占空比非50%的奇数n分频时钟;同时进行下降沿触发的模N计数,同样到(N-1)/2时进行输出时钟翻转,计数到N-1再次进行翻转,生成占空比非50%的奇数n分频时钟。两个占空比非50%的n分频时钟相或运算,即得到占空比为50%的奇数n分频时钟。     下面是一个N分频的奇数分频电路Verilog代码: module div(clr,clk,clkout);
input clr,clk;
output clkout;
reg clkreg1,clkreg2;
parameter n=5;
reg[n:0] counter1,counter2;

assign clkout=clkreg1||clkreg2;

always @(posedge clk)
    if(clr==1)
    begin
        clkreg1=0;
        counter1=0;
    end
    else
    begin 
        if(counter1==n-1)
        begin
            counter1=0;
            clkreg1=~clkreg1;
        end
        else if(counter1==(n-1)/2)
        begin
            counter1=counter1+1;
            clkreg1=~clkreg1;
        end
        else
        begin
            counter1=counter1+1;
        end
    end

always @(negedge clk)
    if(clr==1)
    begin
        clkreg2=0;
        counter2=0;
    end
    else
    begin 
        if(counter2==n-1)
        begin
            counter2=0;
            clkreg2=~clkreg2;
        end
        else if(counter2==(n-1)/2)
        begin
            counter2=counter2+1;
            clkreg2=~clkreg2;
        end
        else
        begin
            counter2=counter2+1;
        end
    end

endmodule
 

半整数分频:

    分频系数为N-0.5的分频器电路可由一个异或门、一个模N计数器和一个二分频器组成。在实现时,模N计数器可设计成带预置的计数器,这样可以实现任意分频系数为N-0.5的分频器。下图给出了通用半整数分频器的电路组成。     下面是一个4.5分频电路的Verilog代码: module div45(clk, rstn, clkout);
input clk;
input rstn;
output clkout;
reg  clkout;
reg  clkout1;
wire clk2;
integer cnt;

xor xor1(clk2,clk,clkout1); always@(posedge clkout or negedge rstn)
   if(~rstn) 
   begin
       clkout1<=1'b0;
   end 
   else
       clkout1<= ~clkout1;
always@(posedge clk2 or negedge rstn)
   if(~rstn)
   begin
      cnt<=0;
      clkout<=1'b0;
   end 
   else if(cnt==4)
   begin
      cnt<=0;
      clkout<=1'b1;
   end 
   else
   begin
      cnt<=cnt+1; 
      clkout<=1'b0;
   end 
endmodule 

小数分频:

        小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需要的小数分频值。如设计一个分频系数为10.1的分频器时,可以将分频器设计成9次10分频,1次11分频,这样总的分频值为: F=(9×10+1×11)/(9+1)=10.1         从这种实现方法的特点可以看出,由于分频器的分频值不断改变,因此分频后得到的信号抖动较大