题解 | #任意奇数倍时钟分频#
任意奇数倍时钟分频
https://www.nowcoder.com/practice/b058395d003344e0a74dd67e44a33fae
`timescale 1ns/1ns
module clk_divider
#(parameter dividor = 5)
( input clk_in,
input rst_n,
output clk_out
);
parameter CNT_WIDTH = $clog2(dividor);
reg [CNT_WIDTH+1:0]cnt;
always@(posedge clk_in or negedge rst_n or negedge clk_in )
begin
if(!rst_n)cnt<=0;
else begin
if(cnt==2*dividor-1)cnt<=0;
else cnt<=cnt+1;
end
end
reg clk_out_reg;
always@(posedge clk_in or negedge rst_n or negedge clk_in )
begin
if(!rst_n)clk_out_reg<=0;
else begin
if(cnt==dividor-2| cnt==2*dividor-2)clk_out_reg<=(~clk_out_reg);
else clk_out_reg<=clk_out_reg;//复位信号撤销后要求cnt=3时就改变波形
end
end
assign clk_out=clk_out_reg;
endmodule


