一.分频器的设计

  • 分频:将一个时钟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;
    	else
    		begin
    		if(counter==5)counter<=0;
    		else counter<=counter+1;
    		end
    	end
    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.仿真波形
 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐