做為一個數位設計的工程師,最常遇到的情形就是訊號需要跨clock domain的處理。能使用的解決方法有很多,每個需要處理的情況也不儘相同,所以我並不就實作方法著眼,只想談談處理它的概念。
為什麼要處理跨clock domain的訊號?
使用來自其它clock domain的訊號時,容易會遇到metastable的情形,而致使產生錯誤結果。為了避免錯誤的發生,此時就需要同步來自其他clock domain的訊號。但是要怎麼做,才能做好同步處理?如果可以謹記下面的觀念,相信您一定就可以做出自已的同步訊號處理。
1. 遵守two-flip-flop的方法。
處理metastable的最基本的步驟就是用本身的clock來做two-flip-flop的同步。(這是每位數位工程師都要謹記,不可忽略的步驟)
QB就是經過兩個Flip-Flop後的訊號。用QB的訊號做為控制訊號,相信就可以避免metastable產生。
2. 分類同步訊號是哪一種?
是長脈衝訊號(long pulse),還是單脈衝訊號(one-pulse) ? 如果是長脈衝訊號,利用第一點的方法,相信就可以解決。如果是單脈衝訊號,想辦法轉成長脈衝訊號後,再利用第一點的方法即可以解決。
3.是連續單脈衝訊號還是不連續單脈衝訊號?
如果是不連續單脈衝訊號,而且每個單脈衝訊號之間的同步並不會互相影響的話,相信用第二點的方法就可以解決。但是如果是連續單脈衝訊號,想辦法變成不連續單脈衝訊號,然後再用第二點的方法就可以解決。坊間有很多種的方法,網路搜尋一下就可以找到了,在此就不赘敘。
4. 上面所說的,都是單一訊號的同步處理,切記,address、data都是不可能拿來同步處理。
5. 所有同步處理,最終都是回到第一點的情形去處理。
如果你抓住這些基本觀念,相信你也一定可以設計出你自己的同步處理裝置。
以上的觀念,希望能對你有所幫助。