Verilog 奇數分頻


代碼:

module odd_div( );
parameter    DIV_PARA = 3;    //分頻系數,3即3分頻
parameter    DIV_PARA_2 = DIV_PARA >> 1;
reg             clk, rstn, clk_div_pos, clk_div_neg;
wire            clk_div_out;
reg        [31:0]    cnt;

initial begin
    clk <= 0;
    rstn <= 0;
    #50 rstn <= 1;
end

always begin
    #10 clk <= 0;
    #10 clk <= 1;
end

// 計數循環
always@(posedge clk or negedge rstn) begin
    if (!rstn) begin
        cnt <= 32'd0;
        end
    else
        if (cnt < (DIV_PARA-1))
            cnt <= cnt + 1;
        else
            cnt <= 0;
end
// 上升沿觸發
always@(posedge clk or negedge rstn) begin
    if (!rstn) begin
        clk_div_pos <= 0;
        end
    else begin
        if (cnt < DIV_PARA_2)
            clk_div_pos <= 1;
        else
            clk_div_pos <= 0;
        end
end
// 下降沿觸發
always@(negedge clk or negedge rstn) begin
    if (!rstn) begin
        clk_div_neg <= 0;
        end
    else begin
        if (cnt < DIV_PARA_2)
            clk_div_neg <= 1;
        else
            clk_div_neg <= 0;
        end
end
// 生成分頻信號
assign clk_div_out = clk_div_pos | clk_div_neg;    

endmodule

 

這個代碼比較簡單,而且為了仿真方便,將dut和bench寫在一個模塊了。。。。

代碼設計思路來自這個帖子 https://blog.csdn.net/lt66ds/article/details/10035187

 

DIV_PARA參數設置分頻系數,MoldelSIm仿真圖如下

 

3分頻:

DIV_PARA = 3

原時鍾周期20ns,分頻后的時鍾周期為60ns,占空比為50%

 

 

5分頻:

DIV_PARA = 5

原時鍾周期20ns,分頻后的時鍾周期為100ns,占空比為50%

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM