⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oddfp.v

📁 verilog实现的奇数分频器 针对任何规模的奇数分频
💻 V
字号:
module OddFP (
  input   i_clk,
  input   rst_n,
  output  o_clk
);
 
parameter N = 3; // 设置奇数(除1外)倍分频
parameter M = 1;     // M="N/2"
      
// bit_of_N: N_odd的二进制位宽
reg [1:0] cnt_p; // 上升沿计数单位
reg [1: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 <= 2'b0;
  else
  begin
    if (cnt_p == 2'd2)
      cnt_p <= 2'b0;
    else
      cnt_p <= cnt_p + 1'b1;
  end
end
 
// 生成上升沿时钟
// 0~(N>>1) ↑ -> 1; ((N/2)+1)~(N-1) ↑ -> 0
always @ (posedge i_clk or negedge rst_n)
begin
  if (!rst_n)
    clk_p <= 1'b0;
  else
  begin
    if (cnt_p <= 2'd1) // 0 ~ (N/2)
      clk_p <= 1'b1;
    else 
      clk_p <= 1'b0;
  end
end
 
 
// 下降沿计数器: 0~(N-1)
always @ (negedge i_clk or negedge rst_n)
begin
  if (!rst_n)
    cnt_n <= 2'b0;
  else
  begin
    if (cnt_n == 2'd2)
      cnt_n <= 2'b0;
    else
      cnt_n <= cnt_n + 1'b1;
  end
end
 
// 生成下降沿时钟
// 0~(N>>1) ↓ -> 1; ((N/2)+1)~(N-1) ↓ -> 0
always @ (negedge i_clk or negedge rst_n)
begin
  if (!rst_n)
    clk_n <= 1'b0;
  else
  begin
    if (cnt_n <= 2'd1) // 0 ~ (N/2)
      clk_n <= 1'b1;
    else 
      clk_n <= 1'b0;
  end
end
 
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -