单数分频器Verilog
// 三分频电路:
module clk_div3(clk,reset,divclk);
input clk;
input reset;
output reg divclk;
reg[1:0] cnt1;
always@(posedge clk or negedge reset)
begin
if(!reset) cnt1 <=0;
else if(cnt1 < 2'b10) cnt1<= cnt1 + 1'b1;
else cnt1 <=0;
end
reg[2:0] cnt2;
always@(negedge clk or negedge reset)
begin
if(!reset) cnt2 <=0;
else if(cnt2 < 2'b10) cnt2<= cnt2 + 1'b1;
else cnt2 <=0;
end
always@(*)
begin
if(cnt2<2'b10 && cnt1<2'b10) divclk <=1'b1;
else divclk <=1'b0;
end
endmodule
//***********************************************************************
//五分频电路:
module clk_div5(clk,reset,divclk);
input clk;
input reset;
output reg divclk;
reg[2:0] cnt1;
always@(posedge clk or negedge reset)
begin
if(!reset) cnt1 <=0;
else if(cnt1 < 3'd4) cnt1<= cnt1 + 1'b1;
else cnt1 <=0;
end
reg[2:0] cnt2;
always@(negedge clk or negedge reset)
begin
if(!reset) cnt2 <=0;
else if(cnt2 < 3'd4) cnt2<= cnt2 + 1'b1;
else cnt2 <=0;
end
always@(*)
begin
if(cnt2<3'd3 && cnt1<3'd3) divclk <=1'b1;
else divclk <=1'b0;
end
endmodule
//********************************************************************
//七分频
module clk_div7(clk,reset,divclk);
input clk;
input reset;
output reg divclk;
reg[2:0] cnt1;
always@(posedge clk or negedge reset)
begin
if(!reset) cnt1 <=0;
else if(cnt1 < 3'd6) cnt1<= cnt1 + 1'b1;
else cnt1 <=0;
end
reg[2:0] cnt2;
always@(negedge clk or negedge reset)
begin
if(!reset) cnt2 <=0;
else if(cnt2 < 3'd6) cnt2<= cnt2 + 1'b1;
else cnt2 <=0;
end
always@(*)
begin
if(cnt2<3'd4 && cnt1<3'd4) divclk <=1'b1;
else divclk <=1'b0;
end
endmodule
//****************************************************************
浙公网安备 33010602011771号