1. 程式人生 > >FPGA研發之道(22)-交換矩陣

FPGA研發之道(22)-交換矩陣

如果在FPGA設計中,需要多埠,大資料量的交換,那麼交換矩陣則是一個不錯的實現方案。交換矩陣使用的目的主要有幾個,一,靈活的埠轉發。通過交換矩陣靈活實現資料流的靈活交換,減少外部負責控制。 二,高效的轉發效率,交換矩陣能夠實現通常單一匯流排不能達到的轉發效率,滿足高吞吐量的系統的需要。三,系統設計以交換矩陣為中心,便於IP整合和模組複用。

交換矩陣的實現方案較為複雜,最早的交換沿襲了共享匯流排式的架構,因此對於某個埠需要傳輸,則其他埠只能阻塞,等待匯流排空閒後再進行傳輸。而交換矩陣則是一個全互聯的結構。如下圖所示,如有4個輸入,4個輸出的交換矩陣,可認為是一個4埠的交換單元,每個埠包含一個傳送介面和一個接收模組,如埠0就包含傳送模組m0和接收模組s0。


假設每路傳輸的速率為N,則整個交換矩陣的傳輸速率為4N。如何實現一個簡單的交換矩陣。首先可以將整速率個設計分割。將整個設計分割為接受和傳送兩個模組。整個交換單元可以劃分為四個部分,分別是,傳送模組,仲裁模組,交換模組,接收模組。

(1)               傳送模組,首先根據某埠接收資料後,根據該資料幀要轉發的埠,發起請求訊號。

(2)               仲裁模組:根據請求訊號,接收模組的忙閒狀態,及各發送模組的優先順序,確定當前的響應訊號,如果當前的接收模組忙(上次傳輸未完成),則需要阻塞,等待上次傳輸完成(複雜的設計,可以保證高優先順序能夠打斷當前傳輸,直接傳輸高優先順序資料流,高優先順序完成後,再恢復原有傳輸,但這種方式設計較為複雜,模擬驗證的難度也較大,不建議使用)。

(3)               交換模組:根據仲裁訊號確定傳送模組轉發的埠,交換模組本質上是多選一的MUX,而MUX的選擇訊號,則是由仲裁模組來進行選擇。

(4)               接收模組:接收交換模組交換後的資料流,向仲裁模組返回當前模組的忙閒狀態(正在接收傳輸訊號,為忙狀態,而當前無傳輸狀態,則為閒狀態)。

仲裁模組的仲裁機制,一般可以使用簡單的round-robin的設計,即輪流最高優先順序。也可以通過設計帶加權的優先順序,保證更高優先順序的埠優先進行傳輸。

仲裁模組的仲裁設計可以分為多種,一種是整個交換矩陣使用同一個仲裁單元,每個傳送模組只使用一個請求訊號及請求埠號連線到仲裁模組。這種設計對整個仲裁模組設計難度較大。另一種設計,如下圖所示,即每個接收單元,配置一個仲裁模組,和一個交換模組。而每個傳送模組根據要傳送的埠,使用多個傳送的請求訊號。此種設計便於系統擴充套件,也可簡化設計。


    不僅是用於高速多埠轉發的資料流傳輸採用交換矩陣。現在,大多高速匯流排機制(如N主裝置,M從裝置之間進行資料的交換)也採用類似交換矩陣式的結構,每個從裝置的連線都是多個主裝置通過MUX來進行連線,這樣保證多個主裝置訪問不同從裝置時,可以實現並行的資料交換(如主裝置M0訪問從裝置S1,主裝置M1訪問從裝置S2,可以同時進行匯流排操作)。這是單一競爭式匯流排所不能達到的優勢,但是,設計佔用的邏輯量也會增加。效能的增加帶來的負面影響通常就是邏輯的增加。

交換矩陣通常在基於資料包轉發的FPGA設計應用中,交換矩陣的交換靈活性增加,也會增加設計複雜度,如果對於傳輸效率不需太多的需求,可以採用系統複用的方式(前文介紹),通過一個複用模組輪流接收各個傳送埠的資料流,,再根據埠轉發到各個從裝置中,此種方式設計簡單,但是此複用模組則會成為系統的瓶頸。根據系統的設計需求,選擇適合的設計,達到效能和邏輯方面的平衡,是體現FPGA設計藝術之一。