fpga那點事兒
上一章講述了pcie匯流排如何提高dma的效率。
本章以伺服器常用的4通道1000m乙太網卡為例講述如何實現多個虛擬dma通道。
1.多通道dma發
4通道乙太網卡的資料相互獨立,需要4個虛擬dma發信道實現4路資料獨立傳輸。4個虛擬dma發信道如下:
多通道dma發比較簡單,因為tlp包中已經包含了具體的實體地址,4個虛擬通道可以向4個不同的物理記憶體位置寫資料。所以dma發邏輯與單通道dma發邏輯沒有什麼不同,關鍵點在增加的匯流排仲裁邏輯。
4個網口都有資料要進行dma發,發起tlp寫請求,需要占用pcie匯流排;4個網口還要進行dma收,發起tld讀請求;主機的bar讀操作要占用pcie匯流排。但是pcie匯流排只有1個邏輯通道(即使pcie匯流排物理層為x4或更高寬度,但邏輯通道數是1),所以各通道必須分時復用pcie匯流排。
匯流排仲裁邏輯正是進行分時復用排程的功能。各種資料報有各自的特點:bar讀操作較少,為了提高上位機的處理效率,一般希望bar讀操盡快完成;tlp寫請求包較大,會占用較長的匯流排時間;tlp讀請求包小,但是包數量多,占用的匯流排頻寬不可忽視。
所以匯流排仲裁邏輯可以設定優先順序:仲裁邏輯以tlp包為單位,匯流排採用搶占式排程,即必須乙個tlp包傳輸完成再判斷下次給哪個通道使用匯流排;高優先順序的通道可以優先占用pcie匯流排,直到tlp包傳輸完成後才能給低優先順序的通道使用;相同優先順序的通道採用輪詢方式排程,這樣每個通道占用匯流排的機會相同。
一般會將bar讀放在最高優先順序,這樣可以讓fpga以最快的速度響應,減少上位機等待時間;在本案例中4個dma發信道和4個dma收通道需要相同的優先順序,放在第二優先順序。在一些特殊的應用中也可以將各dma通道放在不同的優先順序,實現重要資料優先傳輸,普通資料空閒時傳輸的功能。
2.多通道dma收
dma收的過程本身就比dma發複雜,需要fpga先發起讀請求,主機再返回資料才能完成dma收的過程。4個虛擬dma收通道框圖如下:
多個dma收通道可以對多個記憶體位址就行讀操作。多通道dma收邏輯發起tlp讀請求的方式與單通道dma讀相同。讀請求也要通過匯流排仲裁邏輯分時復用pcie匯流排。
這裡增加了資料判別邏輯。dma發的過程只需要fpga發起tlp寫請求,請求中已經包含了實體地址,不會引起資料錯亂;而dma收的過程中,fpga發起tlp讀請求包含了實體地址,但是主機返回的cpld包中只有低6bit實體地址,不能通過實體地址判斷是哪乙個通道的資料報。所以需要在tlp讀請求包中對每乙個虛擬通道做上特殊標記,這樣才能分辨主機返回的cpld包是哪個通道讀請求返回的資料報。
**:
事務除錯心得
真正的掌握應該是建立在行動的基礎之上的,正所謂光說不做假把式,以下便談談對事務除錯的心得。1 問題背景 uat測試環境出現單元格 1 單元格 2 單元格 3,單元格 1沒資料,單元格 2沒資料,但是單元格 3卻有資料,後台查 邏輯發現有乙個 update 開頭的service 方法呼叫了 get開頭...
Flex 除錯心得小結
原來在flex 除錯的時候 開始的時候在初始化的時候呼叫 terminalpanel.init 方法 可是總是報錯 因為它裡面用到乙個ip.xml 後來才知道是因為 loadip 內部採用了urlrequest 方法非同步載入ip.xml 檔案 所以會報空指標 所以後來改為在loadip 的 裡面的...
485硬體除錯心得
rs 485標準介面是微控制器系統常用的一種序列匯流排之一。採用半雙工通訊方式,它文成ttl電平轉換為rs 485電平的功能。以max485晶元為例,其結構和引腳都非常簡單,內部含有乙個驅動器和接收器。max485的封裝有dip so和umax三種。dip封裝如下 管腳的功能如下 r0 接收器輸出端...