目錄
- 1、前言
- 工程概述
- 免責聲明
- 3、相關方案推薦
- 我已有的所有工程源碼總目錄----方便你快速找到自己喜歡的項目
- 我這里已有的以太網方案
- 4、工程詳細設計方案
- 工程設計原理框圖
- 測試用電腦
- PClE4C
- DMA
- 40G/50G Ethernet subsystem
- 工程源碼架構
- 驅動和測試文件
- 5、Vivado工程詳解1詳解:VU37P版本
- 6、工程移植說明
- vivado版本不一致處理
- FPGA型號不一致處理
- 其他注意事項
- 7、上板調試驗證
- 準備工作
- 下載bit
- 檢測FPGA網卡
- 驅動編譯安裝
- 配置FPGA網卡IP
- 單卡ping測試
- 綜合測試效果演示
- 8、工程代碼獲取
FPGA實現40G網卡NIC,基于PCIE4C+40G/50G Ethernet subsystem架構,提供工程源碼和技術支持
FPGA實現40G網卡NIC
1、前言
FPGA實現NIC現狀:
目前國內能用FPGA實現高速NIC的只有Xilinx系列FPGA和響應的復旦微FPGA,高速NIC需要解決3個核心問題,PCIE、DMA、高速光口,目前純國產FPGA還不能同時解決這三大難題;本設計采用Xilinx的VUP系列FPGA實現40G網卡NIC功能;
工程概述
本文詳細描述了Xilinx的VUP系列FPGA實現40G網卡NIC功能的設計方案;從以下兩個數據流向描述整個設計:
PC向FPGA網卡通信
以PC端發起ping操作舉例;PC端發起ping操作,然后PC端操作系統Socket實現發送數據的以太網幀組包,然后發送給PC端PCIE;數據包通過PCIE總線發送至FPGA網卡,FPGA調用Ultrascale+ integrated Block (PClE4C) for PCl Express IP核實現PCIE物理層、數據鏈路層和事務層功能,并將接收到的 TLP包(Transaction Layer Packet)發送給DMA引擎;DMA引擎再將數據包以太網收發邏輯模塊做緩存處理;然后數據包再發送給40G/50G Ethernet subsystem IP核實現以太網數據鏈路層和物理層功能;最后數據包通過板載的QSFP光口發送至光纖傳送到遠端網卡;
FPGA網卡向PC通信
FPGA板載QSFP光口收到以太網數據包,并送入40G/50G Ethernet subsystem IP核實現以太網物理層核數據鏈路層功能;然后數據包送以太網收發邏輯模塊做緩存處理;然后數據包發送給DMA引擎送Ultrascale+ integrated Block (PClE4C) for PCl Express IP核實現PCIE物理層、數據鏈路層和物理層功能;然后網絡數據包通過PCIE總線發送至PC端;然后PC端操作系統Socket實現以太網數據解析,并生成ICMP回復包再返回FPGA網卡;
針對市場主流需求,本博客提供1套工程源碼,具體如下:
現對上述1套工程源碼做如下解釋,方便讀者理解:
工程源碼1
開發板FPGA型號為xcvu37p-fsvh2892-2L-e;PC端發起ping操作,然后PC端操作系統Socket實現發送數據的以太網幀組包,然后發送給PC端PCIE;數據包通過PCIE總線發送至FPGA網卡,FPGA調用Ultrascale+ integrated Block (PClE4C) for PCl Express IP核實現PCIE物理層、數據鏈路層和事務層功能,并將接收到的 TLP包(Transaction Layer Packet)發送給DMA引擎;DMA引擎再將數據包以太網收發邏輯模塊做緩存處理;然后數據包再發送給40G/50G Ethernet subsystem IP核實現以太網數據鏈路層和物理層功能;最后數據包通過板載的QSFP光口發送至光纖傳送到遠端網卡;
FPGA板載QSFP光口收到以太網數據包,并送入40G/50G Ethernet subsystem IP核實現以太網物理層核數據鏈路層功能;然后數據包送以太網收發邏輯模塊做緩存處理;然后數據包發送給DMA引擎送Ultrascale+ integrated Block (PClE4C) for PCl Express IP核實現PCIE物理層、數據鏈路層和物理層功能;然后網絡數據包通過PCIE總線發送至PC端;然后PC端操作系統Socket實現以太網數據解析,并生成ICMP回復包再返回FPGA網卡;該工程適用于PGA實現高速網卡NIC應用;
本文詳細描述了FPGA實現40G網卡NIC的設計方案,工程代碼可綜合編譯上板調試,可直接項目移植,適用于在校學生、研究生項目開發,也適用于在職工程師做項目開發,可應用于醫療、軍工等行業的高速接口領域;
提供完整的、跑通的工程源碼和技術支持;
工程源碼和技術支持的獲取方式放在了文章末尾,請耐心看到最后;
免責聲明
本工程及其源碼即有自己寫的一部分,也有網絡公開渠道獲取的一部分(包括CSDN、Xilinx官網、Altera官網等等),若大佬們覺得有所冒犯,請私信批評教育;基于此,本工程及其源碼僅限于讀者或粉絲個人學習和研究,禁止用于商業用途,若由于讀者或粉絲自身原因用于商業用途所導致的法律問題,與本博客及博主無關,請謹慎使用。。。
3、相關方案推薦
我已有的所有工程源碼總目錄----方便你快速找到自己喜歡的項目
其實一直有朋友反饋,說我的博客文章太多了,亂花漸欲迷人,自己看得一頭霧水,不方便快速定位找到自己想要的項目,所以本博文置頂,列出我目前已有的所有項目,并給出總目錄,每個項目的文章鏈接,當然,本博文實時更新。。。以下是博客地址:
點擊直接前往
我這里已有的以太網方案
目前我這里有大量UDP協議的工程源碼,包括UDP數據回環,視頻傳輸,AD采集傳輸等,也有TCP協議的工程,對網絡通信有需求的兄弟可以去看看:直接點擊前往
4、工程詳細設計方案
工程設計原理框圖
工程設計原理框圖如下:
測試用電腦
測試用電腦需要滿足一下必要條件:
帶有PCIE卡槽,且支持PCIE3.0,至少支持4 Lane;
裝有Linux操作系統,比如ubuntu20;Linux系統不能是虛擬機;
Linux操作系統必須安裝ethtool測試工具;
我這里的測試用電腦和FPGA網卡連接如下:
PClE4C
數據包通過PCIE總線發送至FPGA網卡,FPGA調用Ultrascale+ integrated Block (PClE4C) for PCl Express IP核實現PCIE物理層、數據鏈路層和事務層功能,并將接收到的 TLP包(Transaction Layer Packet)發送給DMA引擎;PClE4C配置為PCIE3.0 4Lane模式;使用MSI中斷;使用GTY高速接口資源;具體配置如下:
PClE4C在工程中如下:
DMA
DMA負責完成PCIE4C到內存的數據搬運,但工程中沒有使用板載的DDR資源作為內存,而是在FPGA內部用雙口RAM搭建了建議內存,用于存放緩存數據,由于和DMA交互的模塊眾多,所以DMA并非一個單獨的模塊,而是在各個模塊間相互存在的功能模塊的總稱,代碼架構如下:
40G/50G Ethernet subsystem
40G/50G Ethernet subsystem IP核實現以太網數據鏈路層和物理層功能;配置為40G BASE-R模式;使用GTY資源,GT參考時鐘為差分156.25M;40G/50G Ethernet subsystem配置如下:
PClE4C在工程中如下:
工程源碼架構
工程源碼架構如下:
本博主發布的工程均已編譯完成,且時序收斂,無時序違約,如下:
驅動和測試文件
我們提供基于Linux的驅動和測試文件,以放在資料包中,如下:
5、Vivado工程詳解1詳解:VU37P版本
開發板FPGA型號:Xilinx–xcvu37p-fsvh2892-2L-e;
FPGA開發環境:Vivado2022.2;
PC端接口:PCIE3.0 8G線速率,4 Lane;
網卡端接口:QSFP28;
PCIE解決方案:Ultrascale+ integrated Block (PClE4C) for PCl Express IP核;
以太網MAC解決方案:40G/50G Ethernet subsystem IP核;
數據緩存方案:簡易雙口RAM方案;
實現功能:FPGA實現40G網卡NIC;
工程作用:此工程目的是讓讀者掌握FPGA實現40G網卡NIC的設計能力,以便能夠移植和設計自己的項目;
工程Block Design和工程代碼架構請參考第4章節的《工程源碼架構》小節內容;
工程的資源消耗和功耗如下:
6、工程移植說明
vivado版本不一致處理
1:如果你的vivado版本與本工程vivado版本一致,則直接打開工程;
2:如果你的vivado版本低于本工程vivado版本,則需要打開工程后,點擊文件–>另存為;但此方法并不保險,最保險的方法是將你的vivado版本升級到本工程vivado的版本或者更高版本;
3:如果你的vivado版本高于本工程vivado版本,解決如下:
打開工程后會發現IP都被鎖住了,如下:
此時需要升級IP,操作如下:
FPGA型號不一致處理
如果你的FPGA型號與我的不一致,則需要更改FPGA型號,操作如下:
更改FPGA型號后還需要升級IP,升級IP的方法前面已經講述了;
其他注意事項
1:由于每個板子的DDR不一定完全一樣,所以MIG IP需要根據你自己的原理圖進行配置,甚至可以直接刪掉我這里原工程的MIG并重新添加IP,重新配置;
2:根據你自己的原理圖修改引腳約束,在xdc文件中修改即可;
3:純FPGA移植到Zynq需要在工程中添加zynq軟核;
7、上板調試驗證
準備工作
需要準備的器材如下:
FPGA開發板;
測試用PC電腦;
QSFP28光模塊和光纖;
我的板子連接如下:
下載bit
步驟如下:(順序一定要對)
1、先給測試電腦上電
2、電腦啟動完成后,在給FPGA開發板上電
3、下載bit
4、重啟電腦(FPGA開發板保持上電)
檢測FPGA網卡
測試電腦重啟完成后
1、打開終端并進入root模式
2、輸入PCEI查詢指令
lspci
然后可以看到有Xilinx corporation Device的設備,如下:
也可以進入設置界面的網絡中查看,應該有Xilinx的網卡驅動,如下:
2、輸入PCIE詳情查詢指令,可以看到FPGA網卡的更詳細信息
lspci -vvv
查詢結果如下:
驅動編譯安裝
測試電腦重啟完成后
1、將我們提供的驅動文件包復制到你的linux系統中;
2、進入驅動文件夾
3、打開終端并進入root模式
4、刪除全部編譯文件,指令如下:
make clean
5、編譯驅動,指令如下:
make
如下:
5、安裝驅動,指令如下:
insmod test_nic.ko
如下:
配置FPGA網卡IP
1、查詢電腦所有網卡狀態,指令如下:
ifconfig
如下:
2、配置FPGA網卡IP地址,指令如下:
ifconfig etho 192.168.0.10
如下:
IP地址可以自由配置,192.168.0.10只是我隨意配的一個
然后可再次輸入 ifconfig
確認一下eth0的IP地址是否已被修改,如下:
如果沒有修改成功,則可直接進去設置–>以太網,找到Xilinx Ethernet手動修改,如下:
單卡ping測試
1、輸入指令測試FPGA網卡,指令如下:
ping 192.168.0.10
如下:
綜合測試效果演示
綜合測試效果演示如下:
FPGA實現40G網卡NIC,工程源碼分享
8、工程代碼獲取
工程代碼如下: