白皮書
BittWare環回應用說明和示例介紹
概述
BittWare的Loopback示例演示了幾件事:
- 如何在設計中充分利用賽靈思 CMAC。這包括根據DAC電纜長度設置Serdes傳輸預加重值。它還包括配置可選的 AN/LT 功能和處理從有源 QSFP 收發器接收的中斷。
- 如何使用 Xilinx HLS/C++ 配置數據包處理流水線。BittWare建議使用HLS/C++,而不是使用RTL或P4進行數據包處理。
- 如何將Python與BittWare工具包結合使用來操作PCIe板的控制平面。此外,如何在遠端主機上使用 Python Scapy 來測試面向數據包的比特流 (https://scapy.net/)。
- 如何實現全域統計寄存器快照以幫助調試工作。
功能性
環迴的功能不是此示例的主要重點。我們的重點是演示上面列出的所有項目符號項。但是,環回具有價值。BittWare使用它來驗證連接到第三方設備(如NIC卡和交換機)時的DAC電纜設置。
環回包含一個 L2 濾波器,用於選擇要處理的幀。如果這些幀包含IPv4數據包,則環回會在MAC和IP層交換源位址和目標位址。環回可以回應 ARP 數據包。添加此功能是為了消除對第三方設備進行專門配置的任何要求。
環回在單個 QSFP 籠上運行,將數據包從輸入循環到輸出。不使用任何額外的 QSFP 保持架。
硬體
這款 Looback 是在包含賽靈思 VU9P 晶片(速度等級為 2)的 BittWare XUP-P3R 板上設計和測試的。Loopback 不使用任何外部記憶體,應移植到任何包含 CMAC 的 BittWare Xilinx UltraScale+ 晶片中。
FPGA 比特流概述
環迴的 FPGA 比特流包含多個元件。每個元件在輸入和輸出上都有一個 AXI4-Stream 介面,統稱為數據平面。比特流的控制平面使用連接到物理PCIe介面的AXI4-Lite介面。
設計流程
環迴作為 Xilinx IP 集成商專案提供。其中幾個元件是用Verilog編寫的。其中三個是使用發出Verilog的Xilinx HLS流編寫的。
當前的實現從IP集成商的角度將使用 HLS 編寫的三個元件分組為一個元件。但是,此處分別記錄了這三個元件。事實上,它們被記錄為四個不同的元件。這是因為HLS元件共用一個通用的“解析器庫”,我們將其單獨記錄以避免重複。
空標題
重置和統計
從哲學上講,在重置時,所有元件初始化啟用,但處於“危害最小”的模式。然後,軟體必須在環迴開始成功運行之前配置元件。
每個元件還公開統計寄存器,以幫助用戶調試硬體或軟體。我們包含一個快照信號,以便所有統計寄存器值及時同步。
AXI 介面
選擇比特流的介面寬度和時鐘速度來託管 100 GB 乙太網流量。數據平面的AXI4流介面寬度為512位。除了接觸CMAC的地方,介面的時鐘頻率為300 MHz。 幀元數據在單獨的總線(AXI TUSER 位)上傳輸,當AXI TLAST 為高電平時,具有有效數據。
元數據在比特流中不一致。因此,與每個元件關聯的文件描述了元件在輸入時期望的元數據以及它在輸出時轉發的元數據。
比特流控制介面是 AXI4-Lite 從機,寬 32 位。所有讀取和寫入都是32位。在位元組順序很重要的情況下,環回希望我們的控制寄存器以網路或大端位元組順序保存數據。
我們將元件控制平面寄存器與元件本身的描述分開記錄在一個地方。交叉引用可幫助使用者在兩個位置之間導航。用於環回控制寄存器的記憶體映射在很大程度上受到 Xilinx HLS 工具鏈中 AXI4-Lite 介面實現要求的影響。
所用 AXI 的正式定義來自 Xilinx“AXI 參考指南 https://www.xilinx.com/support/documentation/ip_documentation/ug761_axi_reference_guide.pdf”
控制平面軟體概述
BittWare 環回示例在插入主機的PCIe卡上運行。BittWare為該主機提供軟體來控制示例的功能。控制軟體使用主機上運行的 Python 3。
該示例的軟體建立在BittWare的BittWorks II Toolkit之上。更具體地說,它將Python綁定添加到BwHIL和BmcLib庫中。然後,它利用 Python 元件集合中的這些綁定,這些元件創建用於操作範例的比特流在 PCIe 位址空間中公開的寄存器。
此外,環回示例比特流將某些硬體事件轉換為PCIe中斷。為了支援這一點,Loopback 的軟體將這些中斷轉換為 Python 調用。
通過與環回示例比特流的非常基本的交互來說明:
$ # 首先使用工具包的命令行或使用 GUI 映射 PCIe 卡
$ bwconfig --add=USB # 首先 通過 USB 映射為設備 0
$ bwconfig --add=pci # 與設備 1 在 PCIe 上映射的卡相同
$ python3 # 調用 python3
>>> 從元件.hildev 導入 *
>>> 卡 = 卡(1)
>>> card.show_stats() # 顯示所有元件的所有統計資訊
>>> # 僅顯示第一個 CMAC 元件的統計資訊,並提供一些選項
>>> card.cmac[0].show_stats(showall=False, doTick=False)
>>>説明()
>>>退出()
所有 Python 元件都支援低級方法的通用集合。請注意,我們的 Python 實現沒有硬編碼 PCIe 記憶體映射。相反,Python 讀取一個 JSON 資料庫,該資料庫定義了可用的 FPGA 比特流元件、它們的寄存器以及寄存器在 PCIe 位址空間中的位置。該 JSON 資料庫是從環回示例的文件自動生成的。
完整的Python API文檔可在BittWare的開發人員網站上找到。
低級方法包括:
- list_regs()
- find_reg(圖案)
- list_fields()
- find_field(圖案)
- 讀取32(), 寫入32()
- 讀取64(), 寫入64()
- reg_get(), reg_set()
- 馬頓64(馬卡德爾), N64托馬(瓦爾64)
可用的更高級別方法取決於特定元件。但是,有幾種方法相對常見:
- 開啟()
- 顯示()
- show_stats()
對環迴的詳細資訊感興趣?
我們提供了有關環迴的更多詳細資訊,可免費下載應用說明;今天通過下面的表格獲取!
獲取應用說明
即時PDF下載
您在此頁面上看到的是環回示例的介紹。完整的應用筆記中有更多細節,最重要的是可以免費下載!填寫表格以請求訪問完整應用筆記的PDF版本。
“*”表示必填欄位