【FPGA】幾種時序問題的常見解決方法
掃描二維碼
隨時隨地手機看文章
今天寫一下時許問題常見的跨時鐘域的亞穩(wěn)態(tài)問題。
先說明一下亞穩(wěn)態(tài)問題:
D觸發(fā)器的原理圖和程序:
D觸發(fā)器有個明顯的特征就是建立時間(setup time)和保持時間(hold time)
參照上圖的下方,如果輸入信號在建立時間和保持時間發(fā)生變化,則可能產(chǎn)生亞穩(wěn)態(tài),如果在時鐘上升沿也就是D觸發(fā)器采樣期間,輸入點評判斷為1則輸出為1,如果是0則輸出為0,另外一種情況就是在時鐘上升沿時,D在發(fā)生變化,在中間思考跳轉很久,但不知道Dinput跳到0還是1(此狀態(tài)出現(xiàn)概率非常低,但會出現(xiàn))到下一個時鐘還沒有思考好是0還是1,沒有出現(xiàn)穩(wěn)定狀態(tài),這就是亞穩(wěn)態(tài)。[1]
總結
在FPGA系統(tǒng)中,如果數(shù)據(jù)傳輸中不滿足觸發(fā)器的Tsu和Th不滿足,或者復位過程中復位信號的釋放相對于有效時鐘沿的恢復時間(recovery time)不滿足,就可能產(chǎn)生亞穩(wěn)態(tài),此時觸發(fā)器輸出端Q在有效時鐘沿之后比較長的一段時間處于不確定的狀態(tài),在這段時間里Q端在0和1之間處于振蕩狀態(tài),而不是等于數(shù)據(jù)輸入端D的值。這段時間稱為決斷時間(resolution time)。經(jīng)過resolution time之后Q端將穩(wěn)定到0或1上,但是穩(wěn)定到0或者1,是隨機的,與輸入沒有必然的關系。[2]
總結亞穩(wěn)態(tài)問題產(chǎn)生場景
1)跨時鐘域的信號傳輸,由于源信號時鐘與目的信號時鐘的相移未知,可能導致保持時間和建立時間條件不滿足,從而產(chǎn)生亞穩(wěn)態(tài)現(xiàn)象。
2)異步信號,最常見的為異步復位信號,由于異步信號不與觸發(fā)器同步時鐘同步,所以可能導致保持時間和建立時間條件不滿足,產(chǎn)生亞穩(wěn)態(tài)現(xiàn)象。
(建立時間保持時間條件:數(shù)據(jù)在建立時間和保持時間保持穩(wěn)定)
亞穩(wěn)態(tài)導致的后果
一般情況下亞穩(wěn)態(tài)產(chǎn)生的后果為產(chǎn)生不可預知的數(shù)據(jù),或者在前面所述亞穩(wěn)態(tài)第三種情況可能導致系統(tǒng)崩潰。在數(shù)據(jù)表現(xiàn)方面來說會產(chǎn)生毛刺、突變等現(xiàn)象。影響系統(tǒng)后續(xù)的邏輯判斷和程序整體運行走向。
一般FPGA的建立時間和保持時間加起來為1ns左右,所以可以根據(jù)概率論來計算亞穩(wěn)態(tài)產(chǎn)生的概率,也就是同步時鐘周期的倒數(shù)。
亞穩(wěn)態(tài)的串擾,也就是D觸發(fā)器處于震蕩狀態(tài)時會影響后續(xù)觸發(fā)器的狀態(tài),一般來說如果震蕩狀態(tài)不超過同步時鐘周期,也就不會串擾下一個觸發(fā)器導致下一個觸發(fā)器也產(chǎn)生振蕩,一般工程上來講串兩至三個觸發(fā)器基本就可以保證不串擾。(是可能不串擾,不是一定不串擾,串擾的可能性很?。?
針對上述的亞穩(wěn)態(tài)問題,常見的解決方法
1)通過對異步信號邊沿提取實現(xiàn)異步信號同步處理,在邊沿提取過程中也要防止亞穩(wěn)態(tài)串擾,進行多寄存器緩存減小亞穩(wěn)態(tài)串擾的可能性。
2)通過FIFO實現(xiàn)異步信號同步處理。
3)對于異步時鐘通過異步復位同步釋放的方法實現(xiàn)亞穩(wěn)態(tài)大可能的消除:
異步復位,同步釋放就是對異步復位時鐘進行兩次或兩次以上緩存,盡可能的減少亞穩(wěn)態(tài)信號進入到系統(tǒng)內部。
在進行異步復位同步釋放的時候一定能夠要進行至少兩次緩存,這樣才能保證亞穩(wěn)態(tài)串擾的可能性大大降低。(上述代碼為兩次緩存)





