前面分別介紹了偶數(shù)和奇數(shù)分頻(即整數(shù)分頻),接下來本文介紹小數(shù)分頻。
對于要求相位以及占空比嚴格的小數(shù)分頻,建議采用模擬電路實現(xiàn)。 而使用數(shù)字電路實現(xiàn)只能保證盡量均勻,在長時間內(nèi)進行分頻 。
在討論小數(shù)分頻之前,先問一個問題:設(shè)計中是否真的需要50%占空比的時鐘
在回答這個問題之前,可以先回顧之前我們寫過的RTL設(shè)計,可以看一下之前的RTL設(shè)計代碼中always塊是不是大部分都是@(posedge clk)。 對于絕大多數(shù)的觸發(fā)器,其實只需要用到時鐘的上升沿觸發(fā),很少用到下降沿。 在這種情況下,只要上升沿和時鐘頻率有關(guān)系,什么時候來下降沿不重要! 所以50%的占空比不是必須的 。
因此在小數(shù)分頻器中我們關(guān)注的是如何得到一個盡量均勻的分頻信號,而不是得到一個絕對50%占空比的分頻信號。
下面以4.5倍的分頻(非50%占空比)作為例子介紹,即每9個參考時鐘包含2個對稱脈沖。 下面是4.5分頻的設(shè)計步驟。
①:使用復(fù)位值為000000001的9位移位寄存器,可以在每個時鐘上升沿使移位寄存器循環(huán)左移一位。
②:要產(chǎn)生第一個脈沖,必須使在半周期時移動第一位并將第一位與第二位進行或操作。
③:要產(chǎn)生第二個脈沖,第5位和第6位必須在半周期時移動并與原始第6位進行或操作。
注意:所有這些移位都是用來保證輸出波形不含毛刺的必要條件。
上面產(chǎn)生的時鐘占空比為40%,并且輸出的時鐘完全不含毛刺。
always@(posedge clk or negedge rst_n)
if(!rst_n)
cnt[9:1] <= 9'b000000001;
else
cnt[9:1] <= cnt[9:1] << 1;
always@(negedge clk or negedge rst_n)
if(!rst_n)begin
count1 <= 1'b0;
count5 <= 1'b0;
count6 <= 1'b0;
end
else begin
count1 <= cnt[1];
count5 <= cnt[5];
count6 <= cnt[6];
end
assign clkout = (cnt[6] | count5 | count6) |
(cnt[0] | cnt[1] |count1);
-
脈沖
+關(guān)注
關(guān)注
20文章
889瀏覽量
95620 -
分頻器
+關(guān)注
關(guān)注
43文章
447瀏覽量
49876 -
時鐘
+關(guān)注
關(guān)注
10文章
1733瀏覽量
131446 -
RTL
+關(guān)注
關(guān)注
1文章
385瀏覽量
59760 -
小數(shù)分頻
+關(guān)注
關(guān)注
0文章
7瀏覽量
6678
發(fā)布評論請先 登錄
相關(guān)推薦
評論