任意整数分频

发布时间 2023-12-22 15:13:48作者: DOVI666
//**************************************************************************
              任意整数分频,占空比为 1:2
//**************************************************************************

module div_clk
//========================< 参数 >==========================================
#(
parameter DIV               = 2                   //分频系数(奇偶任意)
)
//========================< 端口 >==========================================
(
input   wire                clk                 , //时钟,50Mhz
input   wire                rst_n               , //复位,低电平有效
output  wire                div_clk               //分频时钟
);
//========================< 信号 >==========================================
reg   [31:0]                pos_cnt             ;
wire                        pos_clk             ;
reg   [31:0]                neg_cnt             ;
wire                        neg_clk             ;
//==========================================================================
//==    clk上升沿分频
//==========================================================================
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        pos_cnt <= 0;
    else if(pos_cnt == DIV - 1)
        pos_cnt <= 0;
    else
        pos_cnt <= pos_cnt + 1;
end

assign pos_clk = (pos_cnt < DIV/2) ? 0 : 1;
//==========================================================================
//==    clk下降沿分频
//==========================================================================
always @(negedge clk or negedge rst_n) begin
    if(!rst_n)
        neg_cnt <= 0;
    else if(neg_cnt == DIV - 1)
        neg_cnt <= 0;
    else
        neg_cnt <= neg_cnt + 1;
end

assign neg_clk = (neg_cnt < DIV/2) ? 0 : 1;
//==========================================================================
//==    奇偶判断后,输出正确的分频
//==========================================================================
assign div_clk = DIV[0] ? (pos_clk & neg_clk) : pos_clk;


endmodule

 

对应RTL:

 

参考:咸鱼IC