一.分频器的设计
- 分频:将一个时钟N分频,则分频等到的时钟频率为原时钟的1/N,而周期为原时钟周期的N倍。
- 4种分频: 2n 分频:如2、4、8、16分频等;
偶数分频:如6分频,10分频等;
奇数分频:如3分频,7分频等;
小数分频:如1.5分频、3.22分频等。 - 分频的方法:使用计数器实现。
二、六分频器的设计
- 偶数分频(2m分频):使用2m进制计数器实现,而且可使时钟均匀,占空比50%。 例子:设计一个6分频时钟,则需要一个6进制计数器来实现。
- 代码
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
- 仿真波形
三、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.仿真波形