三 基於Verilog的奇偶分頻器設計

2021-08-22 04:30:49 字數 2470 閱讀 8419

在對時鐘進行分頻時,如果要保證設計出的時鐘占空比為 50% ,需要考慮的問題是分頻係數是偶數還是奇數。針對分頻係數的奇偶性,設計出對應的 module 。

偶分頻電路指的是分頻係數為 2、4、6、8  ... 等偶數整數的分頻電路,我們可以直接進行分頻。例如下面 divider.v 中,對輸入時鐘進行 6 分頻,即假設 clk 為 50mhz ,分頻後的時鐘頻率為  (50/6) mhz 。

module divider(

input wire clk,

input wire rst_n,

output reg clk_div

);parameter num_div = 6;

reg [3:0] cnt;

always @(posedge clk or negedge rst_n)

if(!rst_n) begin

cnt <= 4'd0;

clk_div <= 1'b0;

endelse if(cnt < num_div / 2 - 1) begin

cnt <= cnt + 1'b1;

clk_div <= clk_div;

endelse begin

cnt <= 4'd0;

clk_div <= ~clk_div;

endendmodule

由於奇分頻需要保持分頻後的時鐘占空比為 50% ,所以不能像偶分頻那樣直接在分頻係數的一半時使時時鐘訊號翻轉。在此我們需要利用輸入時鐘上公升沿和下降沿來進行設計。

接下來我們設計乙個 5 分頻的模組,設計思路如下:

採用計數器 cnt1 進行計數,在時鐘上公升沿進行加 1 操作,計數器的值為 0、1 時,輸出時鐘訊號 clk_div 為高電平;計數器的值為2、3、4 時,輸出時鐘訊號 clk_div 為低電平,計數到 5 時清零,從頭開始計數。我們可以得到占空比為 40% 的波形 clk_div1。

採用計數器 cnt12進行計數,在時鐘下降沿進行加 1 操作,計數器的值為 0、1 時,輸出時鐘訊號 clk_div 為高電平;計數器的值為2、3、4 時,輸出時鐘訊號 clk_div 為低電平,計數到 5 時清零,從頭開始計數。我們可以得到占空比為 40% 的波形 clk_div2。

clk_div1 和clk_div2 的上公升沿到來時間相差半個輸入週期,所以將這兩個訊號進行或操作,即可得到占空比為 50% 的5分頻時鐘。

具體**如下:

module divider(

input wire clk,

input wire rst_n,

output wire clk_div

);parameter num_div = 5;

reg[2:0] cnt1;

reg[2:0] cnt2;

reg clk_div1, clk_div2;

always @(posedge clk or negedge rst_n)

if(!rst_n)

cnt1 <= 0;

else if(cnt1 < num_div - 1)

cnt1 <= cnt1 + 1'b1;

else

cnt1 <= 0;

always @(posedge clk or negedge rst_n)

if(!rst_n)

clk_div1 <= 1'b1;

else if(cnt1 < num_div / 2)

clk_div1 <= 1'b1;

else

clk_div1 <= 1'b0;

always @(negedge clk or negedge rst_n)

if(!rst_n)

cnt2 <= 0;

else if(cnt2 < num_div - 1)

cnt2 <= cnt2 + 1'b1;

else

cnt2 <= 0;

always @(negedge clk or negedge rst_n)

if(!rst_n)

clk_div2 <= 1'b1;

else if(cnt2 < num_div / 2)

clk_div2 <= 1'b1;

else

clk_div2 <= 1'b0;

assign clk_div = clk_div1 | clk_div2;

endmodule

對其進行測試和驗證,得到如下波形:

具體的分頻設計**及相應設計**已上傳:

聽說,打賞是檢驗珍愛的唯一標準!

Verilog的奇偶分頻

這裡參考了兩個部落格,內容大體相同。但是要說一點,這兩個部落格在介紹奇數分頻時,都說了一段話 對於實現占空比為50 的n倍奇數分頻,首先進行上公升沿觸發進行模n計數,計數選定到某乙個值進行輸出時鐘翻轉,然後經過 n 1 2再次進行翻轉得到乙個占空比非50 奇數n分頻時鐘。再者同時進行下降沿觸發的模n...

verilog奇數分頻,三分頻例項

目的 輸入乙個時鐘訊號,輸出占空比為50 的三分頻。首先得到乙個占空比為1 3的分頻時鐘,然後將輸入訊號取反,得到乙個移相180度的占空比為1 3的分頻時鐘,將兩個時鐘相或得到目的時鐘。verilog module divider 3 input clk,clock input rst n,asyn...

verilog奇數分頻器的問題講解(7分頻為例)

先不多嗶嗶,直接上 veriloghdl 的後面講原理 module fenpin3 clk,clk7,rst input clk,rst 設定rst的目的是當rst 1的時候給cnt0和cnt1賦初值 output clk7 reg 2 0 cnt0,cnt1 定義兩個加法器分別生成兩個7分頻的訊...