2級同步器、翻轉同步、交握與非同步FIFO的差異:可傳遞的內容、傳輸速度、限制比較
在非同步的時脈域之間,接收端的正反器一定會有無法滿足建立時間或保持時間的瞬間,因此要以假設會發生亞穩態的電路來傳遞訊號。基本是以2級正反器接收1位元位準訊號的同步器。傳遞短脈衝用翻轉同步,偶爾傳遞多位元資料用交握,連續大量傳遞資料則用非同步FIFO。各方法的共同想法是:只同步化1位元的訊號,或每前進一步只改變1個位元的格雷碼。
| 項目 | 2級同步器 | 翻轉同步 | 交握 | 非同步FIFO |
|---|---|---|---|---|
| 可傳遞的內容 | 1位元的位準訊號(變化緩慢的控制訊號) | 1位元的脈衝(事件的發生) | 多位元資料(偶爾一次1個字組) | 多位元資料流(連續、大量) |
| 運作方式 | 以接收端的時脈通過2級正反器,等待第1級的亞穩態在第2級擷取前穩定下來 | 在發送端產生每遇到脈衝就反相的位準訊號並同步化,接收端與延遲1級的值取XOR還原為脈衝 | 保持資料不變,將req同步化後傳過去,接收端擷取資料後將ack同步化送回 | 寫入雙埠記憶體,將轉為格雷碼的指標同步化到對方的時脈域,判斷full與empty |
| 同步化的訊號 | 該訊號本身 | 翻轉訊號(1位元) | req與ack(各1位元)。資料不做同步化 | 格雷碼的指標(每前進1步只改變1個位元) |
| 傳輸速度 | 訊號的變化必須比接收端的週期慢得多 | 脈衝的間隔必須大於接收端偵測完變化所需的數個週期 | 慢。4相時1次傳輸在兩個時脈域合計需要8個週期以上 | 快。每個週期可寫入、讀出1個字組 |
| 到達接收端的延遲估計 | 接收端時脈約2個週期 | 接收端時脈約2至3個週期 | req到達約2個週期。等ack返回才能送下一筆,還要再加上往返的時間 | 寫入的字組約2至3個週期後才能在讀取端看到 |
| 主要注意事項 | 用於多位元時,各位元擷取的週期會錯開,看到中間值。來自快速時脈域的短脈衝可能消失 | 脈衝間隔太短時,翻轉訊號會回到原值,漏掉2次事件 | 在ack返回之前不可改變資料 | 深度依突發長度與讀寫速度的差決定,再加上同步化延遲的餘裕 |
| 電路規模 | 2個正反器(時脈快時有時用3級) | 數個正反器與XOR | req/ack的同步器與兩側的狀態機 | 記憶體、指標與格雷碼轉換、同步器、full與empty的判斷電路 |
| 主要用途 | 致能等控制訊號、非同步的外部輸入 | 快速時脈域中只出現1個週期的完成或中斷通知 | 控制暫存器設定值的傳遞 | 以不同時脈運作的匯流排或介面之間的資料傳輸 |
數值為具代表性的大致參考值,會因世代或產品而異。