時序分析與CDC

非同步FIFO是將對方的指標同步化後使用,因此看到的指標值會舊2~3個週期。這個延遲對full/empty判定的影響,何者正確?

  1. A只是full或empty的解除會延遲,不會發生溢位,也不會讀取空的FIFO
  2. Bfull的判定延遲,因此可能寫入過多而使資料溢位
  3. Cempty的判定延遲,因此可能從空的FIFO讀出資料
查看答案與解析

正確答案:A. 只是full或empty的解除會延遲,不會發生溢位,也不會讀取空的FIFO

寫入端看到的讀取指標是舊值,因此讀取看起來比實際進展得少,FIFO被判斷為比實際更滿。也就是說,真的滿時full一定已經出現,只是出現空位後的解除稍微延遲。讀取端的empty也一樣,只是延後看到新寫入的資料。兩者都偏向安全側(悲觀)運作,因此資料不會損壞,但為了在這段延遲中維持效能,需讓深度留有餘裕。

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

時序分析與CDC的其他題目

  1. 在寫入端 100 MHz、讀取端 80 MHz 的非同步FIFO中,寫入端以每個週期1字組的方式寫入100字組的突發,讀取端每個週期讀出1字組。突發之間有足夠的間隔。為了不溢位,所需的最小深度是多少(忽略同步化造成的延遲)?
  2. 寫入端以 200 MHz、每個週期1字組寫入120字組的突發。讀取端以 150 MHz 的時脈,每3個週期中只有2個週期各讀出1字組。為了不溢位,所需的最小深度是多少(忽略同步化造成的延遲)?
  3. 寫入端 250 MHz、讀取端 200 MHz,兩者都每個週期傳輸1字組。接收64字組突發的FIFO,在計算上所需的最小深度是多少(忽略同步化造成的延遲,小數無條件進位)?
  4. 從低態有效的外部重設,產生「非同步確立、同步解除」之內部重設的重設同步器,其構成何者正確?
  5. 將來自同一發送端時脈域的2條控制訊號,分別以不同的2級同步器接收,並在接收端做AND後使用。此設計的問題點何者正確?