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