用Verilog HDL语言设计一个9分频器

用Verilog HDL语言设计一个9分频器

第1个回答  2015-07-07
N倍奇数分频器(Verilog)
修改参数N和cnt_p,cnt_n的位宽,可以实现奇数N的分频。

module N_odd_divider (
input i_clk,
input rst_n,
output o_clk
);
parameter N = 9;
parameter M = N>>1;

// bit_of_N: N_odd的二进制位宽
reg [3:0] cnt_p; //上升沿计数单位
reg [3:0] cnt_n; // 下降沿计数单位

reg clk_p; // 上升沿时钟
reg clk_n; // 下降沿时钟

assign o_clk = clk_n & clk_p;

// 上升沿计数器: 0~(N-1)
always @ (posedge i_clk or negedge rst_n)
begin
if (!rst_n)
cnt_p <= 0;
else begin
if (cnt_p == N-1)
cnt_p <= 0;
else
cnt_p <= cnt_p + 1'b1;
end
end

// 生成上升沿时钟
always @ (posedge i_clk or negedge rst_n)
begin
if (!rst_n)
clk_p <= 0;
else begin
if (cnt_p <= M) // 0 ~ (N/2)
clk_p <= 1;
else
clk_p <= 0;
end
end

// 下降沿计数器: 0~(N-1)
always @ (negedge i_clk or negedge rst_n)
begin
if (!rst_n)
cnt_n <= 0;
else begin
if (cnt_n == N-1)
cnt_n <= 0;
else
cnt_n <= cnt_n + 1'b1;
end
end

// 生成下降沿时钟
always @ (negedge i_clk or negedge rst_n)
begin
if (!rst_n)
clk_n <= 0;
else begin
if (cnt_n <= M) // 0 ~ (N/2)
clk_n <= 1;
else
clk_n <= 0;
end
end

endmodule本回答被网友采纳
相似回答