在 AMD Versal 自適應 SoC 器件中,SelectIO 是實現高速接口的重要組成部分。它為器件提供了靈活且高性能的通用 I/O 資源,支持多種工作模式,能夠滿足源同步接口、異步接口以及各類自定義接口的需求。高速接口設計中,源同步接口(Source-Synchronous Interface) 是一種常見方式,其特點是發送端不僅傳輸數據信號,還會同時發送一條或多條時鐘或選通信號(Strobe),以幫助接收端在高速條件下實現精確的數據采樣。
在 Versal 器件中,XPIO 提供了靈活的時鐘與數據路徑資源。本文將以源同步接口為例,說明如何利用 XPIO 構建并實現帶有 Strobe 的高速接口設計。
XPIO 的內部架構
這里以 VP1802 的 Bank706 為例,如下圖所示,一個 Bank 有9個 XPHY Nibble 和2個 XPLL 組成,每個 Nibble 有6個 NIBBLESLICE,對應6個引腳或3組差分對,每個 XPHY NIBBLESLICE 由串行器(Serializer)、解串器(Deserializer)、I/O 延遲單元和接收 FIFO 組成。

GC 和 XCC 管腳
GC 是全局時鐘輸入管腳,通常作為 XPLL 的時鐘源,可以驅動同一 XPIO bank 內的所有 XPLL,以及相鄰 Bank 內的 XPLL。
XCC 是 Strobe 的輸入管腳,Strobe 通常是由對端的 TX 接口發送的。
在一個 Bank 中,只有 NIBBLESLICE [0] 和 NIBBLESLICE [1] 可以用作 GC 或 XCC 的輸入。無論是單端還是差分,都必須從與 NIBBLESLICE [0] 關聯的 I/O 引腳輸入。如果時鐘是差分信號,那么時鐘的反相信號(輸入到與 NIBBLESLICE [1] 關聯的 I/O 引腳)應與輸入到 NIBBLESLICE [0] 的 I/O 引腳的信號連接到同一個差分緩沖器。
時鐘布線資源
如果源同步接口有一路 Strobe 輸入和多路 Data 輸入,則可以利用 XPIO 內部的兩種時鐘資源( Inter-nibble clocking和 Inter-byte clocking)來轉發 Strobe。當SERIAL_MODE 屬性為 FALSE 時, Inter-nibble clocking 和 Inter-byte clocking 會被使能,適用于同步模式; SERIAL_MODE 屬性為 TURE 時,每個 Nibble 的采樣時鐘都來自于 PLL_CLK 輸入,適用于異步模式。
1.Inter-nibble clocking
Inter-nibble clocking 用于兩個相鄰 XHPY Nibble 對之間傳遞時鐘。比如 Nibble0 和 Nibble1 在同一個 Nibble 對里面,它們可以相互使用對方的時鐘。同樣的還有 Nibble2 和 Nibble3、Nibble4 和 Nibble5 以及 Nibble6 和 Nibble7。但是 Nibble8 因為沒有與之配對的 Nibble,因此也就不能通過 Inter-nibble clocking 資源與其他 Nibble 傳遞時鐘,只能通過 Inter-byte clocking 來傳遞時鐘。

2.Inter-byte clocking
Inter-byte clocking 支持在一個 Bank 中的兩個特定非相鄰的 Nibble 之間傳遞時鐘,注意這里是特定的 Nibble,而不是所有的 Nibble 之間都可以傳遞。下面通過三個案例來做詳細說明。
以 Nibble3 為例,它的 Inter-byte clocking MUX 的輸出分別連到了 Nibble1 和 Nibble5 的 Inter-byte clocking MUX 輸入端(下圖紅色線路),紅框內的實心點表示水平與垂直線存在相交。因此對應到Table-7第五行第三列,Nibble3 的時鐘可以通過Inter-byte clocking傳遞到Nibble1和Nibble5,在到達 Nibble5 之后還可以再通過 Nibble5 的 Inter-byte clocking 把時鐘傳遞到 Nibble7,也就是上文所提到的特定 Nibble,而不是所有的 Nibble。
以 Nibble0 為例,它的 Inter-byte clocking MUX 的輸出(下圖黃色線路)只連到了 Inter-nibble Clocking MUX 的輸入,沒有與任何別的端口連接,因此 Nibble0 不能通過 Inter-byte Clocking 將自己的時鐘傳遞到別的 Nibble,也對應了 Table-7第二行第三列的 “-” ,Nibble1 的原因相同。
以 Nibble8 為例,它的內部沒有 Inter-nibble clocking MUX,Inter-byte clocking MUX 的輸出直接連到了 XPHY 的外部,Nibble8 只能接收來自 Nibble2、Nibble4 和 Nibble6 傳遞過來的時鐘,而無法將自己的時鐘傳遞給別的 Nibble,正如在 Table-7 的最后一行的所示。

3.組合使用
組合使用兩種時鐘路徑可以更加靈活地將時鐘傳遞到其他 Nibble 中,比如要將 Nibble2 的時鐘傳遞給 Nibble7,可以先通過 Nibble2的 Inter-byte clocking 把時鐘輸出到 Nibble4(上圖綠色路徑),再通過 Nibble4 的 Inter-byte clocking 把時鐘輸出到 Nibble6(上圖橙色路徑),最后通過 Nibble6 的 Inter-nibble clocking把時鐘輸出到 Nibble7。
注意組合使用存在一定的限制,Inter-byte clocking 的時鐘輸出可以連到 Inter-nibble clocking 再次傳遞,但是不能反過來操作,這與 XPHY 的結構有關。從上圖 XPHY 的結構圖中可以看到,Inter-byte clocking MUX 的輸入是 XCC 或 GC,輸出與 Inter-Nibble clocking MUX 相連,所以時鐘傳遞的順序就必須是先到 Inter-byte clocking,再到 Inter-Nibble clocking,反過來沒有對應的時鐘路徑。
以 Nibble7 為例,當1個 XCC 時鐘被連到 Nibble7 以后,它可以通過 Inter-Nibble clocking 被傳遞到 Nibble6,但是在這個時鐘到達 Nibble6 以后就不能再被傳遞到其他 Nibble 中。因為 Nibble7 通過 Inter-Nibble clocking 輸出的時鐘沒有任何路徑可以再回到 Inter-byte clocking MUX的輸入端。因此,如果希望時鐘被靈活的傳遞到同一個 Bank 的多個 Nibble 中,選擇 Nibble2、Nibble4 的 XCC 或 GC 輸入是比較好的選擇。
應用分析
1.使用 Advanced IO wizard 生成 IP,這里需要注意以下幾點:
Basic 頁面,Application 有兩個選項,分別是源同步和異步,這里選擇源同步(SOURCE SYNCRONOUS)。Bus Direction 選擇 RX ONLY,其余保持默認。

Pin Configuration 頁面,這里需要設置 Data 通道的數量。因為 XPIO 的1個 Bank 有9個 Nibble,每個 Nibble 有3組差分對,這樣1個 Bank 總共有27組差分對可以使用。其中1對用于 Strobe 輸入,那么在使用差分電平輸入的情況下,Number of Data Channels 最大只能設置為26。而使用單端輸入時,可以最大設置為53。也就是說,1個 XPIO Bank 最多可以接收1路Strobe+26路 data(差分模式)或1路 Strobe+53 路 data(單端模式)。這里把 Number of Data Channels 設置為10。

2.點擊 OK 產生 IP,右擊 IP 選擇 Open example design。
3.Example design 生成完畢后,可以看到內部包含了兩個 Advanced IO 的 IP,名字分別為 core_inst 和 exdes_inst,分別對應 RX 和 TX 兩組接口。

4.管腳約束:
這里還是把1路 Strobe 和10路 Data 都約束在 VP1802 的 Bank706,Strobe 從 Nibble4 的 XCC 管腳輸入,10路 Data 被約束到 Nibble5-8,參考下圖:

此外,TX 相關的端口也需要作相應的約束,TX 的管腳約束取決于外部信號的連接。所有輸入到 MMCM 的時鐘需要被約束到 GC 管腳,其余的輸入輸出管腳沒有特別的要求,可根據實際情況連接。
5.約束完成后,點擊 Generate Device Image,完成后 Open implemented Design,下面我們驗證一下 XPHY 的時鐘資源。
Strobe 管腳被約束到了 BN24,這個管腳屬于 Bank706 的 Nibble4。

10路 Data 信號分別被約束到了 Nibble5-Nibble8,根據 XPHY 內部的時鐘結構,Nibbe4 會通過 CLK_TO_UPPER 管腳經過Inter-byte clocking(下圖藍色線)輸出時鐘給 Nibble6 的 CLK_FROM_OTHER_XPHY 管腳和 Nibble8 的 CLK_FROM_OTHER_XPHY 管腳,如下圖所示:

Nibble4 和 Nibble6 再通過 P/NCLK_NIBBLE_OUT 管腳經過 Inter-nibble clocking 分別輸出時鐘給 Nibble5 的 P/NCLK_NIBBLE_IN 和 Nibble7 的 P/NCLK_NIBBLE_IN,下圖藍色的走線都是 Inter-nibble clocking。

-
amd
+關注
關注
25文章
5642瀏覽量
138907 -
soc
+關注
關注
38文章
4505瀏覽量
227360 -
高速接口
+關注
關注
1文章
65瀏覽量
15195 -
Versal
+關注
關注
1文章
172瀏覽量
8370
原文標題:開發者分享|AMD Versal? SelectIO 基于 XPHY 構建源同步接口
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
如何利用FPGA實現高速連續數據采集系統設計?
基于FPGA的高速數據接口的實現
利用Allegro實現嵌入式系統高速電路設計
利用FPGA 實現與TS201 的LinkPort 高速數據
基于FPGA的高速串行傳輸接口研究與實現
IR-UWB通信系統高速USB接口的設計與實現
視頻采集接口的設計與實現
基于USB協議的DSP高速上位機接口實現
$monitor和$strobe有何差異?
哪些探頭與帶有 TekVPI 探頭接口的示波器兼容?

如何利用XPIO構建并實現帶有Strobe的高速接口設計
評論