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級)數個正反器與XORreq/ack的同步器與兩側的狀態機記憶體、指標與格雷碼轉換、同步器、full與empty的判斷電路
主要用途致能等控制訊號、非同步的外部輸入快速時脈域中只出現1個週期的完成或中斷通知控制暫存器設定值的傳遞以不同時脈運作的匯流排或介面之間的資料傳輸

數值為具代表性的大致參考值,會因世代或產品而異。

適用於什麼情況

2級同步器
1位元的位準訊號,且保持時間比接收端週期長得多時。它是所有方法的基礎,時脈快或想進一步延長MTBF時改用3級。
翻轉同步
想把快速時脈域的短脈衝,不漏失地傳到較慢的時脈域時。僅限於到下一個脈衝之前,有接收端數個週期以上間隔的情況。
交握
想偶爾確實傳遞設定值這類多位元資料時。不論頻率比都很安全,但1次傳輸要花好幾個週期。
非同步FIFO
想連續或高頻率傳遞資料時。能吸收速度差與突發傳輸,但電路規模最大。

常見問題

為什麼不能在多位元資料的每個位元各接一個2級同步器?

因為每個位元是在這次還是下次的邊緣擷取到變化並不確定。例如從0111變為1000時,可能有1個週期收到只有部分位元變成新值的1111或0000。應該讓資料本身不做同步化而保持不變,只同步化1位元的控制訊號(交握),或使用非同步FIFO。若是計數器的值,也可以轉成格雷碼,使每次只改變1個位元。

同步器從2級改為3級,會有什麼改變?

亞穩態可用來穩定的時間約延長1個週期,故障的平均間隔(MTBF)會呈指數增長。MTBF約可表示為e^(t_r/τ) ÷ (T_0 × f_clk × f_data),例如τ = 20 ps時t_r延長1 ns,MTBF會變為e^50倍(10的21次方倍以上)。代價是到達接收端的延遲多1個週期。

為什麼非同步FIFO的指標要轉成格雷碼?

因為二進位的指標會像0111變為1000那樣同時改變多個位元,各位元分別同步化時,可能收到毫不相干的值。格雷碼每前進1步只改變1個位元,即使該位元發生亞穩態,不論穩定成新值或舊值,結果都是前進前或前進後的值。只是看到稍舊的值,因此full與empty的判斷會偏向安全的一側。

非同步FIFO的深度如何決定?

依寫入突發期間,讀取跟不上而累積的最大量決定。寫入端100 MHz、讀取端80 MHz,每週期寫入1個字組共100個字組的突發,並每週期讀出1個字組時,深度為100 × (1 − 80/100) = 20個字組。實際設計會再加上指標同步化延遲的餘裕。

理解度檢測

將2級正反器的同步器增加為3級時,因亞穩態造成之故障的平均間隔(MTBF)如何變化,下列何者正確?

  1. A亞穩態穩定下來可用的時間約增加1個週期,MTBF呈指數性延長
  2. B與級數成正比,MTBF變為1.5倍
  3. C亞穩態發生的難易度由輸入端決定,因此MTBF不變
查看答案與解析

正確答案:A. 亞穩態穩定下來可用的時間約增加1個週期,MTBF呈指數性延長

同步器的MTBF大致可表示為 MTBF = e^(t_r/τ) ÷ (T_0 × f_clk × f_data)。t_r 是亞穩態穩定下來可用的時間,τ 與 T_0 是由正反器特性決定的常數。每增加1級,t_r 約延長1個週期(精確來說是1個週期減去正反器的輸出延遲與建立時間)。例如 τ = 20 ps 時,若 t_r 增加 1 ns,MTBF會延長為 e^50 倍,也就是10的21次方倍以上。第1級成為亞穩態的機率不變,但在傳到下一級之前穩定下來的機率會大幅提高。

對4位元資料的各位元分別加上2級同步器,傳到另一個時脈域。當資料從 0111 變為 1000 時,可能發生的問題何者正確?

  1. A各位元被取入的週期錯開,可能收到 1111 或 0000 這類中間值
  2. B經過同步器後,所有位元會在同一週期對齊,因此不會發生問題
  3. C4個位元全部成為亞穩態,就此無法回到0或1
查看答案與解析

正確答案:A. 各位元被取入的週期錯開,可能收到 1111 或 0000 這類中間值

2級同步器對每個位元而言,變化是在這次邊緣還是下一次邊緣被取入並不確定。從 0111 變為 1000 時4個位元全部改變,因此可能在1個週期內收到只有部分位元變成新值的 1111、0000、0100 等。接收端若使用該值就會誤動作。亞穩態隨著時間經過會穩定為0或1。若是計數器的值,可轉換為格雷碼使每次只有1個位元改變;若是任意資料,則使用交握或非同步FIFO。

在翻轉同步(每當脈衝到來時,在發送端產生反相的位準訊號並傳遞的方式)中,在接收端取回原本脈衝的方法何者正確?

  1. A將同步化後的翻轉訊號直接當作脈衝使用
  2. B將同步化後的翻轉訊號與接收端的時脈做AND,形成1個週期寬的脈衝
  3. C將同步化後的翻轉訊號,與再延遲1級後的訊號做XOR
查看答案與解析

正確答案:C. 將同步化後的翻轉訊號,與再延遲1級後的訊號做XOR

在翻轉同步中,每當脈衝到來,發送端就將正反器的值反相,以從0到1、從1到0的變化來表示事件。由於是位準訊號,即使是比接收端週期短的脈衝也不會消失。在接收端以2級同步化後,與再延遲1級的值做XOR,即可得到只在發生變化的週期為1的1個週期寬脈衝。若直接使用翻轉訊號,第2次事件回到0時就會漏看。與時脈做邏輯運算則會造成突波。

  1. 以交握進行時脈域間資料傳輸的缺點,何者正確?
  2. 在非同步FIFO中,將寫入指標與讀取指標轉換為格雷碼後,再同步化到對方時脈域的理由何者正確?
  3. 在寫入端 100 MHz、讀取端 80 MHz 的非同步FIFO中,寫入端以每個週期1字組的方式寫入100字組的突發,讀取端每個週期讀出1字組。突發之間有足夠的間隔。為了不溢位,所需的最小深度是多少(忽略同步化造成的延遲)?

前往時序分析與CDC的練習題

相關名詞的解說

同步器(Synchronizer)
將非同步訊號對齊到接收端時脈的電路。基本構成是將 2 級正反器串聯,提高第 1 級即使進入亞穩態,也能在下一個邊緣之前穩定下來的機率。
翻轉同步器(Toggle synchronizer)
在發送端每來一個脈衝就產生反轉的位準訊號並同步到接收端,接收端再將其與前 1 週期的值取 XOR 還原成脈衝的方式。比接收端週期短的脈衝也不會遺漏,但脈衝間隔須在接收端的數個週期以上。
交握(Handshake)
透過交換發送端的請求(req)與接收端的回應(ack),確實傳遞資料的方式。在時脈域之間只同步 req 與 ack,期間資料保持不變,因此安全,但每次傳輸需要數個週期以上。
非同步 FIFO
寫入與讀取使用不同時脈的 FIFO,用於在時脈域之間傳遞多位元資料。將指標轉換為格雷碼後同步到對方的時脈域,以判定滿(full)與空(empty)。指標比位址多 1 位元,用以區分繞回。
時脈域
以相同時脈,或頻率與相位關係固定的時脈驅動的正反器集合。在彼此非同步的時脈域之間傳遞訊號時,需要同步器。
亞穩態
正反器未遵守設定時間或保持時間時,輸出在一段時間內既不是 0 也不是 1 而無法確定的狀態。對於非同步訊號,以兩級正反器同步化來因應。
格雷碼
相鄰的值之間只有 1 個位元改變的編碼。用於旋轉編碼器,以及在不同時脈之間傳遞計數值時防止讀取錯誤。
MTBF(平均故障間隔)
故障發生的平均間隔。在同步器中,指亞穩態未能穩定而傳到後級的平均間隔,以 MTBF = e^(t_r/τ) ÷ (T_0 × f_clk × f_data) 表示。增加級數以延長穩定所需的時間 t_r,會使其呈指數增長。

相關的比較