時序分析與CDC

在非同步FIFO中,將寫入指標與讀取指標轉換為格雷碼後,再同步化到對方時脈域的理由何者正確?

  1. A轉換為格雷碼後位元數減半,所需的同步器較少
  2. B每前進1步只有1個位元改變,因此即使在變化途中取入,也會是前進前或前進後的正確值
  3. C格雷碼的訊號不會成為亞穩態,因此不需要同步化
查看答案與解析

正確答案:B. 每前進1步只有1個位元改變,因此即使在變化途中取入,也會是前進前或前進後的正確值

二進位的指標會像從 0111 變為 1000 這樣同時改變多個位元,若對各位元分別同步化,可能收到完全無關的值。若使用格雷碼,1次遞增只會改變1個位元,因此即使該位元成為亞穩態,無論穩定為新值或舊值,結果都會是前進前或前進後的值。只是看到稍舊的值,FIFO並不會因此損壞。位元數不變,亞穩態本身也可能發生,因此仍需要同步器。

非同步FIFO的架構 寫入端(wclk) 讀取端(rclk) 雙埠RAM 以兩個時脈讀寫 寫入資料 寫入指標 轉為格雷碼 讀取資料 讀取指標 轉為格雷碼 二級同步 判斷empty 二級同步 判斷full 格雷碼指標 格雷碼每次加1只會改變1個位元
非同步FIFO的架構 · 在圖解集中查看
練習這個領域 前往領域頁面

時序分析與CDC的其他題目

  1. 將4位元二進位 0110(十進位的6)轉換為格雷碼的結果是哪一個?
  2. 在深度16字組的非同步FIFO中,讓寫入指標與讀取指標比位址多1位元、成為5位元的理由,何者正確?
  3. 在使用5位元格雷碼指標、深度16字組的非同步FIFO中,寫入端判定滿(full)的條件何者正確?
  4. 非同步FIFO是將對方的指標同步化後使用,因此看到的指標值會舊2~3個週期。這個延遲對full/empty判定的影響,何者正確?
  5. 在寫入端 100 MHz、讀取端 80 MHz 的非同步FIFO中,寫入端以每個週期1字組的方式寫入100字組的突發,讀取端每個週期讀出1字組。突發之間有足夠的間隔。為了不溢位,所需的最小深度是多少(忽略同步化造成的延遲)?