Verilog分频器的设计(6分频和1.5分频)
一.分频器的设计
- 分频:将一个时钟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;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
- 仿真波形
三、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分频等。 - 分频的方法:使用计数器实现。
二、六分频器的设计
- 偶数分频(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;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
- 仿真波形
三、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.仿真波形
发布评论