1. 程式人生 > 其它 >FPGA之跨時鐘域的處理方法

FPGA之跨時鐘域的處理方法

目錄


跨時鐘域處理

  傳輸訊號分為控制訊號資料訊號

1.單bit跨時鐘(控制訊號)

  慢到快:由於快時鐘域的可以採集到慢時鐘域的訊號,所以兩級同步器直接 同步即可,即電平訊號同步

  快到慢:此時,快時鐘域的訊號相對於慢時鐘域而言為一個脈衝訊號,所以採用脈衝訊號同步。首先通過握手機制將脈衝訊號展寬,然後在進行打兩拍。如果要在快時鐘域輸出一個脈衝訊號,即輸出訊號持續一個時鐘週期,就可以在後面再加一個邊沿檢測同步器。


握手機制:
(1)快時鐘域對脈衝訊號進行取樣,取樣為高電平時輸出高電平訊號pulse_fast_r,此時不要急於將訊號拉低,先保持輸出訊號為高電平狀態。
(2)慢時鐘域對快時鐘域的pulse_fast_r進行延遲打拍取樣,因為pulse_fast_r被快時鐘域保持拉高狀態,所以肯定會採集到該訊號。
(3)慢時鐘域確認取樣得到高電平訊號pulse_fast2s_r後,再反饋給快時鐘域。
(4)快時鐘域對反饋訊號pulse_fast2s_r進行延遲打拍取樣,此時拉低快時鐘域的pulse_fast_r訊號。

邊沿檢測器


2.多bit跨時鐘(資料訊號)

  可以通過非同步FIFO和握手來實現多bit資料跨時鐘傳輸。
當資料量少的時候用握手來實現,用FIFO的話有點浪費資源。
資料量大的時候建議用非同步FIFO。


非同步FIFO涉及知識點彙總:
(1)空滿同步及標誌的產生
(2)虛空和虛滿
  對於空標誌位來說,將寫指標同步到讀時鐘域至少需要花費2個時鐘,而在同步這段時間內有可能還會寫入新的資料,因此同步後的寫指標一定小於或等於(當且僅有同步時間內沒有新資料寫入的情況下才會等於)當前的寫指標,所以此時判斷不一定是真空;
  同理,對於滿標誌位來說,將讀指標同步到讀時鐘域至少需要花費2個時鐘,而在同步這段時間內有可能還會讀出新的資料,因此同步後的讀指標一定小於或等於當前讀指標,所以此時判斷並不一定是真滿。
(3)非同步FIFO的深度只能為2^n?
(4)深度不為2^n時,如何挑選格雷碼保證地址相鄰數只有1bit不同,包括繞回 https://blog.csdn.net/weixin_44101336/article/details/124263370
(5)FIFO深度計算
  要確定FIFO的深度,關鍵在於計算出在突發讀寫這段時間內有多少個數據沒有被讀走。也就是說FIFO的最小深度就等於沒有被讀走的資料個數。
  

FIFO深度計算
  非同步FIFO_小小verifier的部落格
  備戰秋招[六]-FIFO深度計算
(6)非同步FIFO的埠訊號,模組框架圖及程式碼
(7)二進位制和格雷碼相互轉換方法及程式碼
  二進位制和格雷碼相互轉換
https://blog.csdn.net/sinat_25326461/article/details/52384968
(8)非同步FIFO測試點
(9)畫出同步FIFO和非同步FIFO地電路結構框圖
(10)非同步FIFO的Verilog程式碼


參考文章

  1. 跨時鐘域傳輸:快到慢
  2. 邊沿檢測器