数字电路设计之奇偶分频的verilog实现

奇偶分频使用计数器实现

1、若要进行N倍偶数分频,那么计数器就要从0~N/2-1,到N/2-1时反转。

例子:进行16分频。

module Even_Fre( clk_in,rst,clk_out );

  input wire clk_in,rst;

 output reg clk_out;

 reg   [2:0]count;

 always@(posedge clk_in) begin

    if( rst == 0 ) begin

     count   <= 0;

  clk_out <= 0;

 end

 else

 if( count == 7) begin

     count   <= 0;

     clk_out <= !clk_out;

 end

 else begin

    count    <= count + 1;

    clk_out  <= clk_out;

 end 

 end

endmodule

 

2、一般使用错位“异或”法来实现奇分频,奇分频的精髓在于为了实现奇分频,那么就必须把一个时钟周期分开,那么就可以使用上升沿和下降沿做到。

module Odd_Fre( clk_in,clk_out,rst );

 input wire  clk_in;

 input wire  rst;

 output wire clk_out;

    

 reg [1:0]cnt2,cnt1;

 reg clk_1to3p,clk_1to3n;

 

 always@(posedge clk_in)begin

     if(!rst) begin

       cnt1      <= 0;

      clk_1to3p <= 0;

  end

  else

  if(cnt1 == 2'b10) begin

       clk_1to3p <= clk_1to3p;

       cnt1      <= 0;

  end

  else begin

       clk_1to3p <= ~clk_1to3p;

       cnt1      <= cnt1 + 1;

  end

 end

 always@(negedge clk_in)begin

     if(!rst) begin

       cnt2      <= 0;

       clk_1to3n <= 0;

  end

  else

  if(cnt2 == 2'b10) begin

       clk_1to3n <= clk_1to3n;

      cnt2      <= 0;

  end

  else begin

       clk_1to3n <= ~clk_1to3n;

       cnt2      <= cnt2 + 1;

  end

 end

    assign clk_out = clk_1to3n | clk_1to3p;

endmodule

你可能感兴趣的:(Digital,Chip,Design)