對于多位寬數據,我們可以采用握手方式實現跨時鐘域操作。該方式可直接使用xpm_cdc_handshake實現,如下圖所示。xpm_cdc_handshake提供了6個參數。
其中DEST_EXT_HSK用于決定握手信號是內部生成還是來自于該模塊的外部;DEST_SYNC_FF決定了目的端控制信號對應的級聯觸發器個數;INIT_SYNC_FF決定了仿真時是否使用觸發器的初始值;SIM_ASSERT_CHK用于判定是否檢查仿真過程中可能的潛在問題;SRC_SYNC_FF決定了源端控制信號對應的級聯觸發器個數;WIDTH決定了傳輸數據的位寬。
假定DEST_EXT_HSK為0(握手信號由內部生成),DEST_SYNC_FF和SRC_SYNC_FF均為2,WIDTH為4,綜合后的電路結果如下圖所示。可以看到設計使用了xpm_cdc_single,用于實現控制信號src_send的跨時鐘域操作,這也就意味著src_send為高有效時要確保可以被接收端時鐘穩定地采樣到至少兩次。
同時也不難理解SRC_SYNC_FF決定了src_send從發送時鐘域到接收時鐘域所需的級聯觸發器個數。下面第二張圖片就顯示了SRC_SYNC_FF為4時的電路。下面第三章圖顯示了DEST_SYNC_FF為4時的電路。
我們單獨把控制信號src_send提取出來,看看src_send是如何從發送時鐘域到接收時鐘域然后又回到發送時鐘域生成src_rcv信號,如下圖所示。圖中淡紫色為接收時鐘,淺藍色為發送時鐘,src_send從輸入到最終產生src_rcv信號共經歷了6個觸發器,兩次跨時鐘域操作。src_send為高時,表明發送端有待發送數據,src_rcv為高時表明接收端已接收到數據,意味著跨時鐘域操作完成。
從約束層面看,該模塊使用了set_false_path,set_max_delay和set_bus_skew三種約束,如下圖所示。但其實set_max_delay和set_bus_skew的延遲值都很大,所以可以認為與set_max_delay等效。
從仿真角度看,我們先看從慢時鐘域到快時鐘域,如下圖所示。這里需要注意的是dest_req輸出脈寬為一個接收時鐘域脈寬,故該信號可用于最終數據(跨時鐘域之后)的有效標記信號。
同樣,該模塊也支持從快時鐘域到慢時鐘域的跨時鐘域的操作,如下圖所示。
既然是握手方式,那么就意味著每發送一個數據,就要發送一個與之同步的有效標記信號(src_send),當接收端接收到該信號時,開始處理,接收完畢發送src_rcv給發送端,表明數據被接收到。這樣看來,握手方式因為“握手”的存在而不能連續發送數據,如下圖所示,可以看到連續發送造成數據丟失。
從綜合后的仿真來看,進一步理解“握手”,如下圖所示,我們將數據路徑上發送端和接收端觸發器的使能信號添加到波形窗口里。其中p_0_in為發送端使能信號,對應的輸出數據為src_hsdata_ff,dest_hsdata_en為接收端使能信號。
如果參數DEST_EXT_HSK為1,表明外部提供接收應答信號,綜合結果如下圖所示。圖中藍色高亮為信號dest_ack,該信號經跨時鐘域處理輸出src_rcv給接收端,這正是與內部產生握手信號電路的區別。
綜上所述,可以看到“握手”方式需要發送端和接收端通過握手信號src_send和src_rcv或dest_ack來表明發送端有數據等待發送或接收端已接收到數據,“握手”一來一回就意味著發送端不能每個時鐘周期都發送數據,發送數據率必然低于時鐘頻率。同時,握手方式也無法對待發送數據進行緩存。好處是這種方式僅僅消耗觸發器和查找表資源,資源用量比較少,電路比較簡單。
審核編輯:劉清
-
FPGA
+關注
關注
1629文章
21742瀏覽量
603537 -
時鐘
+關注
關注
11文章
1734瀏覽量
131496 -
觸發器
+關注
關注
14文章
2000瀏覽量
61161 -
SRC
+關注
關注
0文章
60瀏覽量
17995 -
時鐘域
+關注
關注
0文章
52瀏覽量
9536
原文標題:跨時鐘域電路設計(6):多位寬數據通過握手方式跨時鐘域
文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術驛站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論