偶数分频:(占空比50%)
偶数N分频比较简单,设定计数器,计数值达到N/2-1时翻转,即可得N分频
module fre_div_even
#(
parameter CNT_WIDTH = 32'd 5, //计数器位宽
parameter DIV_NUM = 32'd 4 //分频数
)
(
input clk,
input rstn,
output reg Data,
output reg [CNT_WIDTH-1:0] CNT
);
always @(posedge clk or posedge rstn)
begin
if (!rstn)
begin
CNT <= 0; // reset
Data <= 0;
end
else if (CNT < DIV_NUM/2-1)
begin
CNT <= CNT + 1'b1;
end
else
begin
CNT <= 0;
Data <= ~Data;
end
end
endmodule
tb:
奇数分频:(50%占空比 )
奇数N分频设置两个clk_a/clk_b,分别对clk正边沿/负边沿跳转,设定两个计数器分别在(N-1)/2和N-1跳转得Data_a/Data_b,最后将两个相或即可得Data
ps:!-逻辑取反 ~按位取反
module fre_div_odd
#(
parameter CNT_WIDTH = 32'd10,
para