門控時鐘 使能時鐘的實現

2021-08-09 22:22:35 字數 1223 閱讀 9903

在編寫fpga的時候我們常常會遇到這樣的問題:全域性時鐘的頻率太高了,某些模組需要頻率更低的時鐘來驅動,總是呼叫pll太浪費資源了。現在說說這種時候該怎麼辦

1. 門控時鐘分頻

門控時鐘就是通過計數的方式來實現對全域性時鐘的分頻,滿足你對低頻時鐘的需求。

基於計數器的分頻器不說了太基礎了,現在說說非整數分頻怎麼實現。非整數分頻有兩種方法,分別為交錯法和累加法。

a. 交錯法

交錯法其實就是用兩種整數分頻交替出現使得總結果與原非整數分頻等效

舉個例子,要實現8.3分頻,那麼就可以用x次8分頻和y次9分頻交替來實現。滿足(8x+9y)/(x+y)的一切x和y都可以。所以x=7,y=3就滿足條件。即7次8分頻和3次9分頻交替出現。

設原時鐘頻率為f,即1s有f個時鐘脈衝,8.3分頻就是實現8.3s有f個時鐘脈衝。7次8分頻的結果為56s有7f個時鐘脈衝,3次9分頻的結果為27s有3f個時鐘脈衝,合起來就是83s有10f個時鐘脈衝,即8.3s有f個時鐘脈衝,就實現了與8.3分頻等效。

b. 累加法

類加法就是用乙個計數器來實現非整數分頻

設要實現a/b分頻(a>b),設乙個計數器x從0開始自加,每個clk自加b. x>=a/2時cllkout = ~clkout,x>=a時clkout = ~clkout同時x <= x - a(變相的求餘數)。記住一定要對x的每種狀態都做上述的判斷,這樣輸出的clkout才會是a/b分頻。

舉個例子,仍然是8.3分頻,需要先把8.3寫成166/20,不寫成83/10是因為83不能被2整除。那麼暫存器x的兩個閾值就分別為83和166,自加步長為20,分頻器就完成了。下面驗證clkout的是不是8.3分頻。

x的自加步長為20,那麼自加166次本來的應該20*166,花費的時間是166clk. 因為每到大閾值就取一次餘數因此自加166次共計有20*166/166=20次到達過大閾值。因此這166次自加共計輸出20個時鐘脈衝,即166clk有20個時鐘脈衝,即8.3clk有1個時鐘脈衝,所以8.3s有f個時鐘脈衝,8.3分頻沒有問題。

2. 使能時鐘

使能時鐘的思路是這樣的,保持全域性時鐘不變,也不增設新的時鐘,而是通過使能訊號控制下一級工作。

舉個例子全域性時鐘是f,下一級的工作頻率為f/10. 那麼就可以在上一級每10個clk輸出乙個有效的使能訊號,而下一級只有接收到有效的使能訊號時才工作,這樣下一級的輸入時鐘仍然是f,但是工作頻率卻是達到了f/10. 就滿足了需求。使能時鐘的效能和效率都要優於門控時鐘,因此在條件允許的情況下推薦使用使能時鐘。

**:

門控時鐘和時鐘使能

在fpga設計中,我們經常會使用分頻的方法來得到乙個我們需要的時鐘頻率,而在很多開發板廠家配套的教程裡,他們常常會使用計數器分頻得到的高低電平時鐘來當做驅動時鐘,這種方法簡單易懂,但是,在工程設計中,這種方法是不被允許的。門控時鐘就是使用計數器和邏輯門翻轉來產生的時鐘,下面是典型的門控時鐘 生成i2...

GPIO時鐘使能和串列埠時鐘使能的關係

由於stm32有很多外設,為降低功耗,每個外設都對應著乙個時鐘。在晶元剛剛上電時,這些時鐘都是被關閉的。如果想要外設工作,必須把相應的時鐘開啟。即當gpio口復用usart進行通訊時,必須要先使能gpio的時鐘,然後再使能具體外設的時鐘 usart的時鐘 1.stm32微控制器的i o埠配置步驟 1...

clock gating門控時鐘

asic設計人員主要使用正邊沿觸發的d觸發器來生成暫存器。這些觸發器在每個時鐘週期被時鐘觸發 如果需要保持以前的值,通常使用mux多路器電路。圖1顯示了這個電路。雖然這個電路在概念上很簡單,但它可以通過幾種方式進行改進。圖2顯示了門控時鐘的等效電路。這個電路的效能更高,因為它從輸入到觸發器的時序關鍵...