题解 | #任意奇数倍时钟分频#
任意奇数倍时钟分频
https://www.nowcoder.com/practice/b058395d003344e0a74dd67e44a33fae
`timescale 1ns/1ns
module clk_divider
#(parameter dividor = 5)
( input clk_in,
input rst_n,
output clk_out
);
reg [3:0] cnt;
reg clk_out1,clk_out2;
always @(posedge clk_in or negedge rst_n) begin
if(rst_n == 1'b0)
cnt <= 4'd0;
else if(cnt == dividor - 1)
cnt <= 'd0;
else
cnt <= cnt + 1'b1;
end
always @(posedge clk_in or negedge rst_n) begin
if(rst_n == 1'b0)
clk_out1 <= 1'b0;
else if(cnt == (dividor-1)>>1)
clk_out1 <= 1'b1;
else if(cnt == dividor-1)
clk_out1 <= 1'b0;
else
clk_out1 <= clk_out1;
end
always @(negedge clk_in or negedge rst_n) begin
if(rst_n == 1'b0)
clk_out2 <= 1'b0;
else if(cnt == (dividor-1)>>1)
clk_out2 <= 1'b1;
else if(cnt == dividor-1)
clk_out2 <= 1'b0;
else
clk_out2 <= clk_out2;
end
assign clk_out = clk_out1 | clk_out2;
endmodule