Verilog分频器的设计(6分频和1.5分频)

一.分频器的设计

  • 分频:将一个时钟N分频,则分频等到的时钟频率为原时钟的1/N,而周期为原时钟周期的N倍。
  • 4种分频: 2n 分频:如2、4、8、16分频等;
                     偶数分频:如6分频,10分频等;
                     奇数分频:如3分频,7分频等;
                     小数分频:如1.5分频、3.22分频等。
  • 分频的方法:使用计数器实现。

二、六分频器的设计

  1. 偶数分频(2m分频):使用2m进制计数器实现,而且可使时钟均匀,占空比50%。 例子:设计一个6分频时钟,则需要一个6进制计数器来实现。
  2. 代码
    module div6(clk,reset,div6);
    input reset,clk;
    output div6;reg div6;
    reg [2:0]counter;
    always@(posedge clk)begin if(reset)counter<=0;elsebeginif(counter==5)counter<=0;else counter<=counter+1;endend
    always@(posedge clk)begin if(reset)div6<=0;else if(counter<3)div6<=1;else div6<=0;end
    endmodule

     

  3. 仿真波形

    三、1.5分频器的设计 

1. 在进行N.5分频是shiftcount需要2N位 分别采用上升沿与下降沿进行采样,其中采样的高电平时间为N,最后将二者的结果进行或运算。

2.代码

module div1dot5(clk,reset,div1d5,clkN,clkP,count);input clk,reset;output div1d5,clkN,clkP;output [2:0] count;reg [2:0] count;wire [2:0]shiftcount;reg clkP,clkN;assign shiftcount = 3'b001;always @ (posedge clk ,negedge reset)if(!reset)count <= shiftcount;else count <= {count[1:0],count[2]}; always @ (negedge clk or negedge reset)if(!reset)clkN <= 0;else if(count == 3'b010)clkN <= 1;else clkN <= 0;  always @ (posedge clk or negedge reset)if(!reset)clkP <= 0;else if(count == 3'b100)clkP <= 1;else clkP <= 0;  
assign div1d5 = clkP | clkN;
endmodule

3.仿真波形
 

Verilog分频器的设计(6分频和1.5分频)

一.分频器的设计

  • 分频:将一个时钟N分频,则分频等到的时钟频率为原时钟的1/N,而周期为原时钟周期的N倍。
  • 4种分频: 2n 分频:如2、4、8、16分频等;
                     偶数分频:如6分频,10分频等;
                     奇数分频:如3分频,7分频等;
                     小数分频:如1.5分频、3.22分频等。
  • 分频的方法:使用计数器实现。

二、六分频器的设计

  1. 偶数分频(2m分频):使用2m进制计数器实现,而且可使时钟均匀,占空比50%。 例子:设计一个6分频时钟,则需要一个6进制计数器来实现。
  2. 代码
    module div6(clk,reset,div6);
    input reset,clk;
    output div6;reg div6;
    reg [2:0]counter;
    always@(posedge clk)begin if(reset)counter<=0;elsebeginif(counter==5)counter<=0;else counter<=counter+1;endend
    always@(posedge clk)begin if(reset)div6<=0;else if(counter<3)div6<=1;else div6<=0;end
    endmodule

     

  3. 仿真波形

    三、1.5分频器的设计 

1. 在进行N.5分频是shiftcount需要2N位 分别采用上升沿与下降沿进行采样,其中采样的高电平时间为N,最后将二者的结果进行或运算。

2.代码

module div1dot5(clk,reset,div1d5,clkN,clkP,count);input clk,reset;output div1d5,clkN,clkP;output [2:0] count;reg [2:0] count;wire [2:0]shiftcount;reg clkP,clkN;assign shiftcount = 3'b001;always @ (posedge clk ,negedge reset)if(!reset)count <= shiftcount;else count <= {count[1:0],count[2]}; always @ (negedge clk or negedge reset)if(!reset)clkN <= 0;else if(count == 3'b010)clkN <= 1;else clkN <= 0;  always @ (posedge clk or negedge reset)if(!reset)clkP <= 0;else if(count == 3'b100)clkP <= 1;else clkP <= 0;  
assign div1d5 = clkP | clkN;
endmodule

3.仿真波形