5、通用奇数分频
以5分频为例:
module odd_div
#(
parameter CNT_MAX = 3'd5,
parameter WIDE = 8'd12
)
(
input clk,
input rst_n,
output clk_out
);
reg [WIDE-1:0] cnt;
reg clk1;
reg clk2;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
cnt <= 3'b0;
else if (cnt == CNT_MAX - 1)
cnt <= 3'b0;
else
cnt <= cnt + 1'b1;
end
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
clk1 <= 1'b1;
else if (cnt == (CNT_MAX - 1)>>1)
clk1 <= 1'b0;
else if (cnt == CNT_MAX - 1)
clk1 <= 1'b1;
end
always @(negedge clk or negedge rst_n) begin
if (!rst_n)
clk2 <= 1'b1;
else if (cnt == (CNT_MAX - 1)>>1)
clk2 <= 1'b0;
else if (cnt == CNT_MAX - 1)
clk2 <= 1'b1;
end
assign clk_out = clk1 & clk2;
endmodule