FPGA時鐘進階
如何處理邏輯時鐘中的時鐘域
單一時鐘域:一個獨立的網(wǎng)絡(luò)可以驅(qū)動整個設(shè)計中所有觸發(fā)器的時鐘
跨時鐘域:設(shè)計中存在兩個或兩個以上的異步時鐘域
如果數(shù)據(jù)在如圖數(shù)據(jù)跳變發(fā)送在時鐘上升沿,則會發(fā)送亞穩(wěn)態(tài)??梢钥闯鲈撔盘栐趦蓚€時鐘域相鄰的時鐘沿上無法獲得相同的效果,但是在跨過時鐘域之后的第二個時鐘上升沿時刻,數(shù)據(jù)應該能穩(wěn)定下來。?

處理亞穩(wěn)態(tài)方法:
?
1、雙觸發(fā):
設(shè)計中使用的任何寄存器都會指定一個建立和保持時間,在時鐘上升沿前后的這個時間內(nèi)輸入數(shù)據(jù)被禁止發(fā)送任何變動。
有一個重要的問題需要思考:是否需要采樣從一個時鐘域傳輸?shù)搅硪粋€時鐘域?
有兩種情況:跨時鐘域邊界存在①跨時鐘域傳輸數(shù)據(jù)允許丟失部分采樣值和②跨時鐘域傳輸數(shù)據(jù)不允許丟失采樣值。
?
對于①情況,沒有必要去采樣每一個值,但需要注意的是被采樣的值必須要確保精確度;
對應②情況,一個跨時鐘域的信號必須要被正確識別,或者說在其允許發(fā)生改變之前必須被識別。
?
最常見的同步器就是兩級寄存器,即使用寄存器打兩拍的方式同步。(已經(jīng)可以解決大部分問題)
設(shè)計這種寄存器時應當遵循以下原則:
1、級聯(lián)的寄存器必須使用同一個采樣時鐘
2、發(fā)送端時鐘域寄存器輸出的接收端異步時鐘域級聯(lián)寄存器輸入之間不能有其他組合邏輯
3、同步器中級聯(lián)的寄存器除了最后一個寄存器外所有的寄存器只能有一個扇出,即其只能驅(qū)動下一級寄存器的輸入。

每個原則對應的錯誤案例:



2、使用三級觸發(fā)處理亞穩(wěn)態(tài)
平均故障間隔時間(Mean Time Between Failure,MTBF),這是衡量一個產(chǎn)品的可靠性指標。
?
MTBF值大表示兩次故障間隔的時間長;相反小表示兩次故障間隔的時間短。
?
有時兩級寄存器未必足夠,即兩級寄存器的MTBF太短,某些高速設(shè)計中使用三級觸發(fā)器。

由低速時鐘域傳遞到高速時鐘域時,一般問題不大,直接用兩級級聯(lián)寄存器就ok了,但是當高速時鐘傳遞到低速時鐘時,問題可能就比較大。
?
舉個極端的例子:發(fā)送端的時鐘域頻率高于接收端的時鐘域頻率,而跨時鐘域的信號脈沖正好等于發(fā)送端時鐘的一個時鐘周期。那么,當只有一個高速時鐘周期寬的跨時鐘信號傳遞到低速時鐘域時,被低速時鐘域采樣后,該信號可能為高也可能為低,也就是說可能被采集也可能不被采集。

從發(fā)送時鐘域(快速時鐘)發(fā)送的信號脈寬稍微大于接收時鐘(低速時鐘),在大部分情況下,該信號是能被低速時鐘采集并傳遞,但小概率情況下,脈沖改變發(fā)生在離接收時鐘域同步器兩個時鐘上升沿太近,第二個時鐘沿保持時間不夠,從而無法得到預期的信號脈沖。

如果丟失信號采樣值對應設(shè)計來說是不允許的,那么有兩種通用的應對方案:
1、開環(huán)解決方案,確保信號在無須確認的情況下可以被采集;
2、閉環(huán)解決方案,在跨時鐘域邊界時,信號需要接收端的反饋確認。
?
使用方案一開環(huán):使用之前介紹的同步器來采樣跨時鐘域信號,但是前提是需要先將目標信號展寬,需要將目標信號展寬到至少超過接收時鐘域的時鐘周期,最佳的時鐘周期是至少為采樣時鐘周期的1.5倍,這樣跨時鐘域信號被接收時,至少被采樣一次。

開環(huán)解決方案,多用于相關(guān)時鐘頻率固定且時鐘信號能夠被正確分析。這種方案的好處是能在無需接收時鐘域握手信號的情況下最快的將信號傳遞通過跨時鐘域邊界;缺點,容易讓其他設(shè)計者誤以為當前解決方案為通用解決方案,或者說需求改變時,容易忘記重新分析之前的“開環(huán)”解決方案。
使用方案二閉環(huán):在發(fā)送時鐘域?qū)⒖刂菩盘柈斒鼓苄盘杺鬟f,并將其同步到接收時鐘域,然后接收時鐘域收到使能控制信號后,將同步的控制信號反饋到發(fā)送時鐘域。發(fā)送時鐘域通過另一個同步器接收此反饋回來的控制信號,并以它作為信號正確接收的握手信號。
?
優(yōu)點:可以通過反饋回來的信號可以非常安全的確認第一個使能控制信號已經(jīng)被接收時鐘域,安全的接收。
缺點:這種信號傳輸有非常大的延遲,因為未完成握手之前無法傳遞信號的下一個數(shù)值。
