国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持

這篇具有很好參考價(jià)值的文章主要介紹了FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


FPGA實(shí)現(xiàn) NIC 100G 網(wǎng)卡,GTY+100G Ethernet Subsystem架構(gòu),純verilog代碼實(shí)現(xiàn),提供2套工程源碼和技術(shù)支持

1、前言

網(wǎng)絡(luò)接口控制器(NIC)是計(jì)算機(jī)與網(wǎng)絡(luò)進(jìn)行交互的網(wǎng)關(guān)。NIC構(gòu)成了軟件協(xié)議棧和網(wǎng)絡(luò)之間的橋梁,該橋梁的功能定義了網(wǎng)絡(luò)接口。網(wǎng)絡(luò)接口的功能以及這些功能的實(shí)現(xiàn)都在迅速發(fā)展。這些變化是由提高線速和支持高性能分布式計(jì)算和虛擬化的NIC功能的雙重要求所驅(qū)動(dòng)的。不斷提高的線速導(dǎo)致許多NIC功能必須在硬件而非軟件中實(shí)現(xiàn)。同時(shí),需要新的網(wǎng)絡(luò)功能,例如對多個(gè)隊(duì)列的精確傳輸控制,以實(shí)現(xiàn)高級協(xié)議和網(wǎng)絡(luò)體系結(jié)構(gòu)。

為了以實(shí)際的線速滿足對新的網(wǎng)絡(luò)協(xié)議和體系結(jié)構(gòu)的開放式開發(fā)平臺的需求,我們正在開發(fā)一種基于FPGA的開源高性能NIC原型平臺。本100G網(wǎng)卡平臺能夠以100Gbps的速度運(yùn)行,連同其驅(qū)動(dòng)程序一起,可以在整個(gè)網(wǎng)絡(luò)協(xié)議棧中使用。該設(shè)計(jì)既便攜式又緊湊,支持許多不同的設(shè)備,同時(shí)即使在較小的設(shè)備上也留有足夠的資源用于進(jìn)一步的自定義。本100G網(wǎng)卡的模塊化設(shè)計(jì)和可擴(kuò)展性允許共同優(yōu)化的硬件/軟件解決方案在現(xiàn)實(shí)的環(huán)境中開發(fā)和測試高級網(wǎng)絡(luò)應(yīng)用程序。

基于FPGA的NIC結(jié)合了基于ASIC的NIC和軟件NIC的功能:它們能夠以線速運(yùn)行并提供低延遲和精確定時(shí),同時(shí)新功能的開發(fā)周期相對較短。市面上也有開發(fā)了高性能、基于FPGA的專有NIC;例如,阿里巴巴開發(fā)了一個(gè)完全定制的基于FPGA的RDMA-onlyNIC,他們用它來運(yùn)行精密擁塞控制協(xié)議(HPCC)的硬件實(shí)現(xiàn)。商業(yè)產(chǎn)品也存在,包括Exablaze和Netcope提供的產(chǎn)品。不幸的是,類似于基于ASIC的NIC,可商用的基于FPGA的NIC往往具有無法修改的基本“黑匣子”功能?;綨IC功能的封閉性嚴(yán)重限制了它們在開發(fā)新的網(wǎng)絡(luò)應(yīng)用程序時(shí)的效用和靈活性。

商業(yè)上可用的高性能DMA組件,例如Xilinx XDMA內(nèi)核和QDMA內(nèi)核,以及Atomic Rules ArkvilleDPDK加速內(nèi)核都沒有提供完全可配置的硬件來控制傳輸數(shù)據(jù)流。Xilinx XDMA內(nèi)核是為計(jì)算卸載應(yīng)用程序而設(shè)計(jì)的,因此提供了非常有限的排隊(duì)功能,并且沒有簡單的方法來控制傳輸調(diào)度。Xilinx QDMA內(nèi)核和Atomic Rules ArkvilleDPDK加速內(nèi)核通過支持少量隊(duì)列并提供DPDK驅(qū)動(dòng)程序而面向網(wǎng)絡(luò)應(yīng)用程序;但是支持的隊(duì)列數(shù)量很少(XDMA內(nèi)核為2K隊(duì)列,而Arkville內(nèi)核為128個(gè)隊(duì)列)而且兩個(gè)內(nèi)核都不提供用于精確控制數(shù)據(jù)包傳輸?shù)暮唵畏椒?。基于FPGA的分組處理解決方案包括實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用程序卸載的Catapult和實(shí)現(xiàn)FPGA上可重構(gòu)匹配引擎的FlowBlaze。但是,這些平臺將標(biāo)準(zhǔn)的NIC功能留給了單獨(dú)的基于ASIC的NIC,并且完全作為“線下突擊”進(jìn)行操作,沒有提供對NIC調(diào)度程序或隊(duì)列的明確控制。其他項(xiàng)目使用軟件實(shí)現(xiàn)或部分硬件實(shí)現(xiàn)。Shoal描述了一種網(wǎng)絡(luò)架構(gòu),該網(wǎng)絡(luò)架構(gòu)使用自定義NIC和快速的第1層電交叉點(diǎn)交換機(jī)執(zhí)行小規(guī)模路由。Shoal是用硬件構(gòu)建的,但僅在沒有主機(jī)連接的情況下通過綜合流量進(jìn)行評估。SENIC描述了基于NIC的可擴(kuò)展速率限制。單獨(dú)評估了調(diào)度程序的硬件實(shí)現(xiàn),但是系統(tǒng)級評估是在具有自定義排隊(duì)規(guī)則(qdisc)模塊的軟件中進(jìn)行的。PIEO描述了一種靈活的NIC調(diào)度程序,它是在硬件中單獨(dú)進(jìn)行評估的。NDP是用于數(shù)據(jù)中心應(yīng)用程序的拉模式傳輸協(xié)議。NDP已通過DPDK軟件NIC和基于FPGA的交換機(jī)進(jìn)行了評估。Loom描述了一種有效的NIC設(shè)計(jì),可以使用BESS在軟件中對其進(jìn)行評估。

本100G網(wǎng)卡的開發(fā)與所有這些項(xiàng)目都不同,因?yàn)樗峭耆梢钥吹絭erilog源碼的vivado工程,可以作為實(shí)際NIC網(wǎng)卡,也可以作為開發(fā)NIC網(wǎng)卡芯片的驗(yàn)證。它提供了多個(gè)傳輸隊(duì)列,并帶有可擴(kuò)展的傳輸調(diào)度程序,以實(shí)現(xiàn)對流的細(xì)粒度控制。最后我們建立了一個(gè)強(qiáng)大而靈活的開源平臺,用于開發(fā)結(jié)合了硬件和軟件功能的網(wǎng)絡(luò)應(yīng)用程序。

本設(shè)計(jì)是一個(gè)100G速率的NIC網(wǎng)卡,其架構(gòu)如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
基于目前市面上主流的FPGA平臺,本博目前移植了2套2022.2版本的vivado工程源碼,具體如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
本設(shè)計(jì)經(jīng)過反復(fù)大量測試穩(wěn)定可靠,可在項(xiàng)目中直接移植使用,工程代碼可綜合編譯上板調(diào)試,可直接項(xiàng)目移植,適用于在校學(xué)生、研究生項(xiàng)目開發(fā),也適用于在職工程師做項(xiàng)目開發(fā),可應(yīng)用于醫(yī)療、軍工等行業(yè)的數(shù)字通信領(lǐng)域;
提供完整的、跑通的工程源碼和技術(shù)支持;
工程源碼和技術(shù)支持的獲取方式放在了文章末尾,請耐心看到最后;

更新說明

這是第二版,相比之前的版本做了如下優(yōu)化;
1:時(shí)序優(yōu)化,做了細(xì)致的時(shí)序約束,所有工程編譯后都沒有時(shí)序違約,如果存在時(shí)序違約,很影響性能;
2:代碼優(yōu)化,補(bǔ)齊了代碼中基于generate生成的某些沒有被當(dāng)前工程使用的模塊,可讀性更強(qiáng);
3:增加Linux驅(qū)動(dòng),新增了Linux驅(qū)動(dòng)源碼和測試源碼,實(shí)用性更強(qiáng);
4:工程優(yōu)化,新增移植了兩套2022.2版本的工程源碼,使得工程達(dá)到了2套,選擇性更多;

免責(zé)聲明

本工程及其源碼即有自己寫的一部分,也有網(wǎng)絡(luò)公開渠道獲取的一部分(包括CSDN、Xilinx官網(wǎng)、Altera官網(wǎng)等等),若大佬們覺得有所冒犯,請私信批評教育;基于此,本工程及其源碼僅限于讀者或粉絲個(gè)人學(xué)習(xí)和研究,禁止用于商業(yè)用途,若由于讀者或粉絲自身原因用于商業(yè)用途所導(dǎo)致的法律問題,與本博客及博主無關(guān),請謹(jǐn)慎使用。。。

2、相關(guān)方案推薦

我這里已有的以太網(wǎng)方案

目前我這里有大量UDP協(xié)議的工程源碼,包括UDP數(shù)據(jù)回環(huán),視頻傳輸,AD采集傳輸?shù)?,也有TCP協(xié)議的工程,對網(wǎng)絡(luò)通信有需求的兄弟可以去看看:直接點(diǎn)擊前往

本方案的 10G-NIC網(wǎng)卡項(xiàng)目

本方案適用于10G-NIC、25G-NIC、100G-NIC項(xiàng)目,本博文是講述100G-NIC的應(yīng)用,想要了解10G-NIC的應(yīng)用,請移步我之前寫的博文,參考連接如下:點(diǎn)擊直接前往

本方案的 25G-NIC網(wǎng)卡項(xiàng)目

本方案適用于10G-NIC、25G-NIC、100G-NIC項(xiàng)目,本博文是講述100G-NIC的應(yīng)用,想要了解25G-NIC的應(yīng)用,請移步我之前寫的博文,參考連接如下:點(diǎn)擊直接前往

3、100G-NIC 網(wǎng)卡基本性能簡介

本100G網(wǎng)卡是一個(gè)基于Xilinx高端系列FPGA為平臺的,用于高達(dá)100Gbps及更高的網(wǎng)絡(luò)接口的開發(fā)平臺;平臺包括一些用于實(shí)現(xiàn)實(shí)時(shí),高線速操作的核心功能,包括:高性能數(shù)據(jù)路徑,10G/ 25G / 100G以太網(wǎng)MAC,Xilinx 系列FPGA集成的第3代PCIE Express,自定義PCIe DMA引擎以及本機(jī)高精確的 IEEE 1588 PTP時(shí)間戳;本設(shè)計(jì)的一個(gè)關(guān)鍵功能是可擴(kuò)展隊(duì)列管理,它可以支持超過10,000個(gè)隊(duì)列以及可擴(kuò)展的傳輸調(diào)度程序,從而可以對包傳輸進(jìn)行細(xì)粒度的硬件控制;結(jié)合多個(gè)網(wǎng)絡(luò)接口,每個(gè)接口多個(gè)端口以及每個(gè)端口事件驅(qū)動(dòng)的傳輸調(diào)度,這些功能可實(shí)現(xiàn)高級網(wǎng)絡(luò)接口體系結(jié)構(gòu)和協(xié)議的開發(fā);這些硬件功能的軟件接口是Linux網(wǎng)絡(luò)協(xié)議棧的高性能驅(qū)動(dòng)程序。本平臺還支持分散/聚集DMA,校驗(yàn)和卸載,接收流散列和接收端縮放。通過實(shí)現(xiàn)微秒級時(shí)分多址(TDMA)硬件調(diào)度程序,以25Gbps的線速執(zhí)行TDMA調(diào)度,而沒有CPU開銷,證明了該平臺的強(qiáng)大功能和靈活性。

本100G網(wǎng)卡具有幾種獨(dú)特的體系結(jié)構(gòu)特點(diǎn)。首先,將硬件隊(duì)列狀態(tài)有效地存儲在FPGA的BRAM或者Ultra RAM中,從而支持?jǐn)?shù)千個(gè)可單獨(dú)控制的隊(duì)列;這些隊(duì)列與接口相關(guān)聯(lián),每個(gè)接口可以具有多個(gè)端口,每個(gè)端口都有自己的獨(dú)立傳輸調(diào)度程序;這樣就可以對數(shù)據(jù)包傳輸進(jìn)行極其精細(xì)的控制;調(diào)度器模塊的設(shè)計(jì)是為了修改或交換,完全可以實(shí)現(xiàn)不同的傳輸調(diào)度方案,包括實(shí)驗(yàn)調(diào)度器,再加上PTP時(shí)間同步,這樣可以實(shí)現(xiàn)基于時(shí)間的調(diào)度,包括高精度的TDMA;

本100G網(wǎng)卡的設(shè)計(jì)是模塊化且高度參數(shù)化的,可以在綜合時(shí)通過Verilog參數(shù)設(shè)置許多配置和結(jié)構(gòu)選項(xiàng),包括接口和端口計(jì)數(shù),隊(duì)列計(jì)數(shù),內(nèi)存大小,調(diào)度程序類型等;這些設(shè)計(jì)參數(shù)公開在驅(qū)動(dòng)程序讀取以確定NIC配置的配置寄存器中,使同一驅(qū)動(dòng)程序無需修改即可支持許多不同的板卡和配置。

4、詳細(xì)設(shè)計(jì)方案

設(shè)計(jì)框圖

FPGA 100G-NIC 系統(tǒng)設(shè)計(jì)框圖如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
其中具體到NIC部分詳細(xì)設(shè)計(jì)框圖如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA

架構(gòu)說明

從較高的層次來看,NIC由3個(gè)主要的嵌套模塊組成。頂層模塊主要包含支持和接口組件。這些組件包括PCI Express硬IP內(nèi)核和DMA接口,PTP硬件時(shí)鐘以及包括MAC,PHY和相關(guān)串行器的以太網(wǎng)接口組件。頂層模塊還包括一個(gè)或多個(gè)接口模塊實(shí)例。每個(gè)接口模塊都對應(yīng)于操作系統(tǒng)級別的網(wǎng)絡(luò)接口(例如eth0)。每個(gè)接口模塊都包含隊(duì)列管理邏輯以及描述符和完成處理邏輯。隊(duì)列管理邏輯維護(hù)所有NIC隊(duì)列的隊(duì)列狀態(tài):包括傳輸、傳輸完成、接收、接收完成和事件隊(duì)列。每個(gè)接口模塊還包含一個(gè)或多個(gè)端口模塊實(shí)例。每個(gè)端口模塊都提供一個(gè)到MAC的AXI流接口,并包含一個(gè)傳輸調(diào)度程序、傳輸和接收引擎、傳輸和接收數(shù)據(jù)路徑以及一個(gè)暫存RAM,用于在DMA操作期間臨時(shí)存儲傳入和傳出的數(shù)據(jù)包。對于每個(gè)端口,端口模塊中的傳輸調(diào)度程序決定將哪些隊(duì)列指定用于傳輸;傳輸調(diào)度程序?yàn)榘l(fā)送引擎生成命令,這些命令協(xié)調(diào)傳輸數(shù)據(jù)路徑上的操作。調(diào)度程序模塊是一個(gè)靈活的功能塊,可以對其進(jìn)行修改或替換,以支持任意調(diào)度,這些調(diào)度可以是事件驅(qū)動(dòng)的,調(diào)度程序的默認(rèn)實(shí)現(xiàn)是簡單循環(huán),與同一接口模塊關(guān)聯(lián)的所有端口共享同一組傳輸隊(duì)列,并顯示為操作系統(tǒng)的單個(gè)統(tǒng)一接口。通過僅更改傳輸調(diào)度程序設(shè)置,而不會(huì)影響網(wǎng)絡(luò)協(xié)議棧的其余部分,這可以使流在端口之間遷移或在多個(gè)端口之間實(shí)現(xiàn)負(fù)載平衡;這種動(dòng)態(tài)的、調(diào)度程序定義的隊(duì)列到端口的映射是本25G/100G網(wǎng)卡的獨(dú)特功能,可以使人們能夠研究新的協(xié)議和網(wǎng)絡(luò)體系結(jié)構(gòu),包括并行網(wǎng)絡(luò)(例如P-FatTree和光交換網(wǎng)絡(luò)、RotorNet)和Opera。

接口概述

現(xiàn)在對框圖中的模塊解釋如下:
PCIe HIP:
調(diào)用的Xilinx集成在FPGA內(nèi)部的PCIE資源,該資源已經(jīng)固化在FPGA芯片內(nèi)部,非XDMA這種由LUT和BRAM等資源搭建,這種資源具有速度更高、性能更強(qiáng)、不占用現(xiàn)有邏輯資源等諸多優(yōu)點(diǎn),但也有缺點(diǎn),那就是不帶DMA,需要自己寫DMA與之對接,根據(jù)FPGA型號不同,在UltraScale系列FPGA中是UltraScale FPGA Gen3 Integrated Block for PCI Express;在UltraScale+系列FPGA中是UltraScale+ Integrated Block (PCIE4) Express;在Virtix-7系列FPGA中是Virtix-7 FPGA Gen3 Integrated Block for PCI Express;可根據(jù)自己的FPGA型號確定;

AXIL M:
AXI lite Master接口;主要對接PCIE內(nèi)核、軟件或者SDK的AXI lite Slaver接口,用作三者對網(wǎng)卡的管理、配置、狀態(tài)讀取等;

DMA IF:
DMA接口;由于PCIE內(nèi)核是集成的,不帶DMA,也沒有官方推薦的DMA方案,所以這個(gè)接口就是自寫的DMA與PCIE內(nèi)核的接口;

PTP HC:
純verilog實(shí)現(xiàn)的PTP硬件時(shí)鐘;

TXQ:傳輸隊(duì)列管理器;

TXCQ:傳輸完成隊(duì)列管理器;

RXQ:接收隊(duì)列管理器;

RXCQ:接收完成隊(duì)列管理器;

EQ:事件隊(duì)列管理器;

MAC + PHY:
以太網(wǎng)媒體訪問控制器(MAC)和物理接口層(PHY),即調(diào)用Xilinx GT高速接口資源+手寫的 MAC接口;

以上接口概述只是簡略說明,具體數(shù)據(jù)流向會(huì)在后面的“數(shù)據(jù)路徑以及發(fā)送和接收引擎”章節(jié)中介紹;

傳輸說明

在接收方向,傳入的數(shù)據(jù)包通過流哈希模塊確定目標(biāo)接收隊(duì)列,并為接收引擎生成命令,這些命令協(xié)調(diào)對接收數(shù)據(jù)路徑的操作。由于同一接口模塊中的所有端口共享同一組接收隊(duì)列,因此不同端口上的傳入流將合并到同一組隊(duì)列中。還可以向NIC添加自定義模塊,以在傳入數(shù)據(jù)包通過PCIe總線之前對其進(jìn)行預(yù)處理和過濾。NIC上的組件與多個(gè)不同的接口互連,包括AXI lite,AXI流和用于DMA操作的自定義分段存儲器接口,這將在后面討論。AXI lite用于從驅(qū)動(dòng)程序到NIC的控制路徑。它用于初始化和配置NIC組件,并在發(fā)送和接收操作期間控制隊(duì)列指針。AXI stream接口用于在NIC內(nèi)傳輸打包數(shù)據(jù),包括PCIe傳輸層數(shù)據(jù)包(TLP)和以太網(wǎng)幀。分段存儲器接口用于將PCIe DMA接口連接到NIC數(shù)據(jù)路徑以及描述符和完成處理邏輯。大部分NIC邏輯都運(yùn)行在PCIe用戶時(shí)鐘域中,對于所有當(dāng)前的設(shè)計(jì)變體,名義上為250 MHz。異步FIFO用于與MAC接口,這些MAC在串行器中運(yùn)行,以適當(dāng)?shù)匕l(fā)送和接收時(shí)鐘域-10G為156.25 MHz,25G為390.625 MHz,100G為322.266 MHz。以下各節(jié)描述了NIC中的幾個(gè)關(guān)鍵功能塊。

PCIe 內(nèi)核

NIC網(wǎng)卡與主機(jī)交互的部分為PCIe,調(diào)用的Xilinx集成在FPGA內(nèi)部的PCIE資源,該資源已經(jīng)固化在FPGA芯片內(nèi)部,非XDMA這種由LUT和BRAM等資源搭建,這種資源具有速度更高、性能更強(qiáng)、不占用現(xiàn)有邏輯資源等諸多優(yōu)點(diǎn),但也有缺點(diǎn),那就是不帶DMA,需要自己寫DMA與之對接,根據(jù)FPGA型號不同,在UltraScale系列FPGA中是UltraScale FPGA Gen3 Integrated Block for PCI Express;在UltraScale+系列FPGA中是UltraScale+ Integrated Block (PCIE4) Express;在Virtix-7系列FPGA中是Virtix-7 FPGA Gen3 Integrated Block for PCI Express;可根據(jù)自己的FPGA型號確定;以工程1為例,IP在代碼中的位置和配置如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
我的FPGA板卡性能很高,所以直接使用PCIE3.0 X8模式,速率直接干到單Line 8G;

高性能 DMA

由于PCIE內(nèi)核是集成的,不帶DMA,也沒有官方推薦的DMA方案,所以這個(gè)接口就是自寫的DMA與PCIE內(nèi)核的接口;純verilog編寫的DMA控制器實(shí)現(xiàn)PCIE數(shù)據(jù)的搬運(yùn)工作;以工程1為例,該模塊在代碼中的位置如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA

AXI總線接口

AXIL M:AXI lite master;即AXI-Lite總線主機(jī),因?yàn)镻CIE IP有AXI-Lite配置接口,這里屬于掛載總線的需求,主要對接PCIE內(nèi)核、軟件或者SDK的AXI lite Slaver接口,用作三者對網(wǎng)卡的管理、配置、狀態(tài)讀取等;;
AXI M:AXI master;即AXI-FULL總線主機(jī),因?yàn)镻CIE IP有AXI用戶接口,這里屬于掛載總線的需求;
以工程1為例,該模塊在代碼中的位置如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA

PTP硬件時(shí)鐘

純verilog實(shí)現(xiàn)的PTP硬件時(shí)鐘;PTP(Precision Time Protocol) 是一個(gè)通過網(wǎng)絡(luò)同步時(shí)鐘的一個(gè)協(xié)議。當(dāng)硬件支持時(shí),PTP 精度能達(dá)到亞微秒,比 NTP(Network Time Protocol)精度更高;本設(shè)計(jì)顯然是支持的;以工程1為例,代碼位置如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA

流水線隊(duì)列管理

本100G網(wǎng)卡NIC和驅(qū)動(dòng)程序之間的數(shù)據(jù)包數(shù)據(jù)通信通過描述符和完成隊(duì)列進(jìn)行調(diào)解。描述符隊(duì)列形成主機(jī)到NIC的通信通道,承載有關(guān)各個(gè)數(shù)據(jù)包在系統(tǒng)內(nèi)存中存儲位置的信息。完成隊(duì)列構(gòu)成了NIC到主機(jī)的通信通道,其中包含有關(guān)已完成的操作和關(guān)聯(lián)的元數(shù)據(jù)的信息。描述符和完成隊(duì)列被實(shí)現(xiàn)為駐留在DMA可訪問的系統(tǒng)內(nèi)存中的環(huán)形緩沖區(qū),而NIC硬件則維護(hù)必要的隊(duì)列狀態(tài)信息。此狀態(tài)信息包括指向環(huán)形緩沖區(qū)DMA地址的指針,環(huán)形緩沖區(qū)的大小,生產(chǎn)者和使用者指針以及對關(guān)聯(lián)的完成隊(duì)列的引用。每個(gè)隊(duì)列所需的描述符狀態(tài)適合128位。

本100G網(wǎng)卡NIC的隊(duì)列管理邏輯必須能夠有效地存儲和管理數(shù)千個(gè)隊(duì)列的狀態(tài)。這意味著隊(duì)列狀態(tài)必須完全存儲在FPGA的Block RAM(BRAM)或Ultra RAM(URAM)中。由于需要128位RAM,并且URAM塊為72x4096,因此存儲4096個(gè)隊(duì)列的狀態(tài)僅需要2個(gè)URAM實(shí)例。利用 URAM 實(shí)例可以將隊(duì)列管理邏輯擴(kuò)展到每個(gè)接口至少處理 32768 個(gè)隊(duì)列。

為了支持高吞吐量,本100G網(wǎng)卡NIC必須能夠并行處理多個(gè)描述符。因此,隊(duì)列管理邏輯必須跟蹤多個(gè)正在進(jìn)行的操作,并在操作完成時(shí)向驅(qū)動(dòng)程序報(bào)告更新的隊(duì)列指針。跟蹤進(jìn)程中操作所需的狀態(tài)比描述符狀態(tài)小得多,因此可以將其存儲在觸發(fā)器和分布式RAM中。

本100G網(wǎng)卡NIC設(shè)計(jì)使用兩個(gè)隊(duì)列管理器模塊:queue_manager用于管理主機(jī)到NIC的描述符隊(duì)列,而cpl_queue_manager用于管理NIC到主機(jī)的完成隊(duì)列。除了指針處理,填充處理和門鈴/事件生成方面的一些細(xì)微差別外,這些模塊相似。由于相似之處,本節(jié)將僅討論queue_manager模塊的操作。

用于存儲隊(duì)列狀態(tài)信息的BRAM或URAM陣列對于每個(gè)讀取操作都需要幾個(gè)延遲周期,因此queue_manager是使用流水線結(jié)構(gòu)構(gòu)建的,以促進(jìn)多個(gè)并發(fā)操作。流水線支持四種不同的操作:寄存器讀取,寄存器寫入,出隊(duì)/入隊(duì)請求和出隊(duì)/入隊(duì)提交。通過AXI lite接口進(jìn)行的寄存器訪問操作使驅(qū)動(dòng)程序可以初始化隊(duì)列狀態(tài),并提供指向已分配的主機(jī)內(nèi)存的指針,以及在正常操作期間訪問生產(chǎn)者和使用者指針。以工程1為例,queue_manager模塊和cpl_queue_manager模塊在代碼中的位置如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
實(shí)際上,NIC中為了提高數(shù)據(jù)帶寬利用率,幾乎所有的模塊都采用了流水線處理方式來促進(jìn)高并發(fā)。本節(jié)以隊(duì)列管理模塊來介紹基于操作表和操作指針的流水線設(shè)計(jì)思路。

本100G網(wǎng)卡NIC的隊(duì)列管理邏輯必須能夠有效地存儲和管理數(shù)千個(gè)隊(duì)列的狀態(tài)。為了支持高吞吐量,NIC必須能夠并行處理多個(gè)描述符。因此,隊(duì)列管理邏輯必須跟蹤多個(gè)正在進(jìn)行的操作,并在操作完成時(shí)向驅(qū)動(dòng)程序報(bào)告更新的隊(duì)列指針。NIC的操作表項(xiàng)包含激活和提交標(biāo)志、所屬隊(duì)列號、和影子指針,操作指針包括操作表開始指針和操作表提交指針,通過不同的指針對操作表不同字段的索引就可以跟蹤當(dāng)前進(jìn)行中的不同操作項(xiàng)目進(jìn)展到哪一個(gè)步驟,從而可以觸發(fā)流水操作。更詳細(xì)的來說,當(dāng)隊(duì)列管理接收到出隊(duì)請求時(shí)將命令放置到Pipeline同時(shí)觸發(fā)隊(duì)列消息,當(dāng)命令到達(dá)處理周期時(shí),對應(yīng)隊(duì)列的信息已經(jīng)被索引到,此時(shí)可以進(jìn)行處理,如果出隊(duì)被允許,必要的信息會(huì)被記錄到操作表,處理邏輯只需要不斷寫入操作表并更新操作指針,可以認(rèn)為出隊(duì)邏輯在處理操作表的表頭,操作被提交時(shí)會(huì)觸發(fā)提交邏輯,提交邏輯處理操作表末并合理的釋放操作表。需要注意的是,操作表只跟蹤正在進(jìn)行中的處理進(jìn)程,因此不需要設(shè)置太大。它和隊(duì)列管理的信息RAM構(gòu)成了一個(gè)雙向鏈表,即隊(duì)列信息中需要存入為該隊(duì)列服務(wù)的最新的操作表項(xiàng)索引,用于維護(hù)正確的影子指針。其原理框圖如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA

發(fā)送調(diào)度程序

本100G網(wǎng)卡NIC中使用的默認(rèn)傳輸調(diào)度程序是在tx_scheduler_rr模塊中實(shí)現(xiàn)的簡單循環(huán)調(diào)度程序。調(diào)度器向發(fā)送引擎發(fā)送命令,從NIC傳輸隊(duì)列中啟動(dòng)傳輸操作。循環(huán)調(diào)度器包含所有隊(duì)列的基本隊(duì)列狀態(tài),一個(gè)FIFO用于存儲當(dāng)前活動(dòng)隊(duì)列并執(zhí)行循環(huán)調(diào)度,一個(gè)操作表用于跟蹤進(jìn)程中的傳輸操作。與隊(duì)列管理邏輯類似,循環(huán)傳輸調(diào)度程序還將隊(duì)列狀態(tài)信息存儲在FPGA上的BRAM或URAM中,以便可以擴(kuò)展以支持大量隊(duì)列。傳輸調(diào)度程序還使用處理流水線來隱藏內(nèi)存訪問延遲。以工程1為例,tx_scheduler_rr模塊在代碼中的位置如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
傳輸調(diào)度器模塊具有四個(gè)主要接口:AXI lite寄存器接口和三個(gè)stream接口。AXI lite接口允許驅(qū)動(dòng)程序更改調(diào)度程序參數(shù)并啟用/禁用隊(duì)列。當(dāng)驅(qū)動(dòng)程序?qū)?shù)據(jù)包排隊(duì)發(fā)送時(shí),第一個(gè)流接口從隊(duì)列管理邏輯提供門鈴事件。第二個(gè)流接口將由調(diào)度器生成的傳輸命令攜帶到發(fā)送引擎。每個(gè)命令都包含要發(fā)送的隊(duì)列索引以及用于跟蹤進(jìn)程中操作的標(biāo)簽。最終的流接口將傳輸操作狀態(tài)信息返回給調(diào)度程序。狀態(tài)信息會(huì)通知調(diào)度程序已傳輸數(shù)據(jù)包的長度,或者是否由于隊(duì)列為空或禁用而導(dǎo)致傳輸操作失敗。

傳輸調(diào)度程序模塊可以擴(kuò)展或替換以實(shí)現(xiàn)任意調(diào)度算法。這使本25G/100G網(wǎng)卡可用作評估實(shí)驗(yàn)調(diào)度算法的平臺,包括SENIC、Carousel、PIEO和Loom中提出的算法。還可能向發(fā)射調(diào)度器模塊提供其他輸入,包括來自接收路徑的反饋,這些輸入可用于實(shí)現(xiàn)新協(xié)議和擁塞控制技術(shù),例如NDP和HPCC。將調(diào)度程序連接到PTP硬件時(shí)鐘可用于支持TDMA,TDMA可用于實(shí)現(xiàn)RotorNet 、Opera和其他電路交換體系結(jié)構(gòu)。

端口和接口

本100G網(wǎng)卡的獨(dú)特體系結(jié)構(gòu)特征是端口和網(wǎng)絡(luò)接口之間的分隔,因此多個(gè)端口可以與同一接口關(guān)聯(lián)。當(dāng)前的大多數(shù)NIC每個(gè)接口支持一個(gè)端口,如下圖a所示:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
當(dāng)網(wǎng)絡(luò)協(xié)議棧將數(shù)據(jù)包排隊(duì)以便在網(wǎng)絡(luò)接口上傳輸時(shí),數(shù)據(jù)包將通過與該接口關(guān)聯(lián)的網(wǎng)絡(luò)端口注入網(wǎng)絡(luò)。但是,在本設(shè)計(jì)中,每個(gè)接口都可以關(guān)聯(lián)多個(gè)端口,因此可以在出隊(duì)時(shí)由硬件決定將數(shù)據(jù)包注入到網(wǎng)絡(luò)中的哪個(gè)端口,如上圖b所示。

與同一網(wǎng)絡(luò)接口模塊關(guān)聯(lián)的所有端口共享同一組傳輸隊(duì)列,并顯示為操作系統(tǒng)的單個(gè)統(tǒng)一接口。這樣,通過僅更改傳輸調(diào)度程序設(shè)置,就可以在端口之間遷移流或在多個(gè)端口之間實(shí)現(xiàn)負(fù)載平衡,而不會(huì)影響其余的網(wǎng)絡(luò)協(xié)議棧。動(dòng)態(tài)的,由調(diào)度程序定義的隊(duì)列到端口的映射使人們能夠研究新的協(xié)議和網(wǎng)絡(luò)體系結(jié)構(gòu),包括諸如P-FatTree的并行網(wǎng)絡(luò)以及諸如RotorNet和Opera的光交換網(wǎng)絡(luò)。

數(shù)據(jù)路徑以及發(fā)送和接收引擎

本100G網(wǎng)卡在數(shù)據(jù)路徑中同時(shí)使用了內(nèi)存映射接口和流接口。AXI stream用于在端口DMA模塊,以太網(wǎng)MAC,校驗(yàn)和與哈希計(jì)算模塊之間傳輸以太網(wǎng)數(shù)據(jù)包數(shù)據(jù)。AXI stream還用于將PCIe硬IP內(nèi)核連接到PCIe AXI lite主模塊和PCIe DMA接口模塊。定制的分段存儲器接口用于將PCIe DMA接口模塊,端口DMA模塊以及描述符和完成處理邏輯連接到內(nèi)部暫存器RAM。

AXI stream接口的寬度由所需帶寬確定。除以太網(wǎng)MAC外,核心數(shù)據(jù)路徑邏輯完全在250 MHz PCIe用戶時(shí)鐘域中運(yùn)行。因此,到PCIe硬IP內(nèi)核的AXI流接口必須與硬核接口寬度匹配-PCIe Gen 3 x8為256位,PCIe Gen 3 x16為512位。在以太網(wǎng)端,接口寬度與MAC接口寬度匹配,除非250 MHz時(shí)鐘太慢而無法提供足夠的帶寬。對于10G以太網(wǎng),MAC接口是156.25 MHz的64位,可以以相同的寬度連接到250 MHz的時(shí)鐘域。對于25G以太網(wǎng),MAC接口在390.625 MHz時(shí)為64位,因此必須轉(zhuǎn)換為128位才能在250 MHz時(shí)提供足夠的帶寬。對于100G以太網(wǎng),本25G/100G網(wǎng)卡在Ultrascale Plus FPGA上使用Xilinx 100G硬CMAC內(nèi)核。MAC接口在322.266 MHz時(shí)為512位,它以512位在250 MHz時(shí)鐘域上連接,因?yàn)樗枰源蠹s195 MHz的頻率運(yùn)行才能提供100Gbps。

本100G網(wǎng)卡NIC數(shù)據(jù)路徑的框圖如下圖所示:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
它是前面的第4章節(jié)詳細(xì)設(shè)計(jì)方案圖的簡化版本。PCIe硬IP內(nèi)核(PCIe HIP)將NIC連接到主機(jī)。兩個(gè)AXI stream接口將PCIe DMA接口模塊連接到PCIe硬IP內(nèi)核。一個(gè)接口用于讀寫請求,一個(gè)接口用于讀取數(shù)據(jù)。然后,PCIe DMA接口模塊通過一組DMA接口多路復(fù)用器連接到描述符獲取模塊,完成寫入模塊,端口暫存RAM模塊以及RX和TX引擎。在朝向DMA接口的方向上,多路復(fù)用器組合了來自多個(gè)源的DMA傳輸命令。在相反的方向上,它們路由傳輸狀態(tài)響應(yīng)。它們還管理分段存儲器接口以進(jìn)行讀取和寫入。頂層多路復(fù)用器將描述符流量與分組數(shù)據(jù)流量結(jié)合在一起,為描述符流量提供更高的優(yōu)先級。接下來,一對多路復(fù)用器組合來自多個(gè)接口模塊的流量。最后,每個(gè)接口模塊內(nèi)的一個(gè)附加多路復(fù)用器將來自多個(gè)端口實(shí)例的分組數(shù)據(jù)流量組合在一起。

發(fā)送引擎和接收引擎負(fù)責(zé)協(xié)調(diào)傳輸和接收數(shù)據(jù)包所需的操作。發(fā)送和接收引擎可以處理多個(gè)正在進(jìn)行的數(shù)據(jù)包,以實(shí)現(xiàn)高吞吐量。如第4章節(jié)詳細(xì)設(shè)計(jì)方案圖所示,發(fā)送和接收引擎連接到發(fā)送和接收數(shù)據(jù)路徑中的幾個(gè)模塊,包括端口DMA模塊以及哈希和校驗(yàn)和卸載模塊,以及描述符和完成處理邏輯以及時(shí)間戳接口模塊、以太網(wǎng)MAC模塊。

發(fā)送引擎負(fù)責(zé)協(xié)調(diào)數(shù)據(jù)包的傳輸操作。發(fā)送引擎處理來自傳輸調(diào)度程序的特定隊(duì)列的傳輸請求。使用PCIe DMA引擎進(jìn)行低級處理后,數(shù)據(jù)包將通過傳輸校驗(yàn)和模塊,MAC和PHY。一旦發(fā)送了數(shù)據(jù)包,發(fā)送引擎將從MAC接收PTP時(shí)間戳,建立完成記錄,并將其傳遞給完成寫入模塊。

與發(fā)送引擎類似,接收引擎負(fù)責(zé)協(xié)調(diào)數(shù)據(jù)包的接收操作。傳入的數(shù)據(jù)包通過PHY和MAC。在包括哈希和時(shí)間戳的底層處理之后,接收引擎將向PCIe DMA引擎發(fā)出一個(gè)或多個(gè)寫請求,以將數(shù)據(jù)包數(shù)據(jù)寫出到主機(jī)內(nèi)存中。寫操作完成后,接收引擎將構(gòu)建一個(gè)完成記錄,并將其傳遞給完成寫模塊。

描述符讀取和完成寫入模塊的操作類似于發(fā)送和接收引擎。這些模塊處理來自發(fā)送和接收引擎的描述符/完成讀/寫請求,向隊(duì)列管理器發(fā)出入隊(duì)/出隊(duì)請求,以獲取主機(jī)內(nèi)存中的隊(duì)列元素地址,然后向PCIe DMA接口發(fā)出請求以傳輸數(shù)據(jù)。完成寫入模塊還負(fù)責(zé)通過將發(fā)送和接收完成隊(duì)列排隊(duì)在適當(dāng)?shù)氖录?duì)列中并寫出事件記錄來處理事件。

分段內(nèi)存接口

對于PCIe上的高性能DMA,本設(shè)計(jì)使用自定義分段存儲器接口。該接口被分成最大128位的段,并且整體寬度是PCIe硬IP內(nèi)核的AXI流接口寬度的兩倍。例如,將PCIe Gen 3 x16與PCIe硬核中的512位AXI流接口一起使用的設(shè)計(jì)將使用1024位分段接口,該接口分成8個(gè)段,每個(gè)段128位。與使用單個(gè)AXI接口相比,該接口提供了改進(jìn)的“阻抗匹配”,從而消除了DMA引擎中的對齊和互連邏輯中的仲裁,從而消除了背壓,從而提高了PCIe鏈路利用率。具體地說,該接口保證DMA接口可以在每個(gè)時(shí)鐘周期執(zhí)行全寬度,未對齊的讀取或?qū)懭搿4送?,使用簡單的雙端口RAM(專用于在單個(gè)方向上移動(dòng)的流量)消除了讀寫路徑之間的爭用。

除了使用三個(gè)接口(而不是五個(gè))之外,每個(gè)網(wǎng)段的運(yùn)行方式均與AXI lite類似。一個(gè)通道提供寫地址和數(shù)據(jù),一個(gè)通道提供讀地址,一個(gè)通道提供讀數(shù)據(jù)。與AXI不同,不支持突發(fā)和重新排序,從而簡化了接口邏輯。互連組件(多路復(fù)用器)負(fù)責(zé)維護(hù)操作的順序,即使在訪問多個(gè)RAM時(shí)也是如此。這些段通過單獨(dú)的流控制連接和互連排序邏輯的單獨(dú)實(shí)例彼此完全獨(dú)立地運(yùn)行。另外,操作是基于單獨(dú)的選擇信號而不是通過地址解碼進(jìn)行路由的。此功能消除了分配地址的需要,并允許使用可參數(shù)化的互連組件,這些組件以最少的配置適當(dāng)?shù)芈酚刹僮鳌?/p>

字節(jié)地址被映射到分段的接口地址上,最低的地址位確定段中的字節(jié)通道,接下來的位選擇段,最高的位確定該段的字地址。例如,在一個(gè)1024位分段接口中,分成8個(gè)128位段,最低的4個(gè)地址位將確定段中的字節(jié)通道,接下來的3位將確定該段。其余位確定該段的地址總線。

100G-PHY 層

本設(shè)計(jì)使用的是QSFP,一個(gè)QSFP包含4路Line,每條Line可跑25G,4條Line線速率共計(jì)100G;PHY層就是有4路GTY組成,每路GTY配置為GTY-CAUI_4*協(xié)議,編解碼類型設(shè)置為Raw;內(nèi)部數(shù)據(jù)位寬為80bit,以工程1為例,PHY層代碼位置如下:這里命名為100G-PHY 層是因?yàn)?路25G的GTY共計(jì)100G;
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
GTY 配置分別如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA

100G-MAC 層

當(dāng)4 Line線速率共計(jì)100G時(shí),數(shù)據(jù)收發(fā)將變得不可控,一是參考時(shí)鐘很快,而是數(shù)據(jù)對齊變得很難,基于此,我們例化了Xilinx官方的 UltraScale+ 100G Ethernet Subsystem IP核,該IP可以處理100G的高速數(shù)據(jù),其內(nèi)部十分復(fù)雜,用戶不必太過關(guān)心,只需知道其用戶接口時(shí)序和配置接口即可使用,雖如此,對齊使用依然是很難的,但我們已經(jīng)寫好了與之對接的收發(fā)處理模塊;對于接收,需要在100G Ethernet 輸出數(shù)據(jù)口加上PTP硬件時(shí)鐘標(biāo)記,以便于解碼和對齊;對于發(fā)送要對待發(fā)送的數(shù)據(jù)進(jìn)行幀重組;以工程1為例,100G-MAC代碼位置如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
UltraScale+ 100G Ethernet Subsystem 配置如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA

Linux 下的驅(qū)動(dòng)編譯、加載、測試

本設(shè)計(jì)只能在Linux環(huán)境下運(yùn)行,提供驅(qū)動(dòng)源碼和測試源碼,提供驅(qū)動(dòng)編譯、加載、測試簡潔版教程,資料已經(jīng)打包好,截圖如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA

5、vivado工程1–詳解

開發(fā)板FPGA型號:Xilinx Virtex UltraScale+ XCVU3P–xcvu3p-ffvc1517-2-i;
開發(fā)環(huán)境:Vivado2022.2;
輸入/輸出:PCIE/SFP光口
應(yīng)用:NIC-100G 網(wǎng)卡應(yīng)用
工程代碼架構(gòu)如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
綜合編譯完成后的FPGA資源消耗和功耗預(yù)估如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA

6、vivado工程2–詳解

開發(fā)板FPGA型號:Xilinx Zynq UltraScale+ XCZU19EG–xczu19eg-ffvd1760-2-e;
開發(fā)環(huán)境:Vivado2022.2;
輸入/輸出:PCIE/QSFP光口
應(yīng)用:NIC-100G 網(wǎng)卡應(yīng)用
工程代碼架構(gòu)如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
綜合編譯完成后的FPGA資源消耗和功耗預(yù)估如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA

7、工程移植說明

vivado版本不一致處理

1:如果你的vivado版本與本工程vivado版本一致,則直接打開工程;
2:如果你的vivado版本低于本工程vivado版本,則需要打開工程后,點(diǎn)擊文件–>另存為;但此方法并不保險(xiǎn),最保險(xiǎn)的方法是將你的vivado版本升級到本工程vivado的版本或者更高版本;
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
3:如果你的vivado版本高于本工程vivado版本,解決如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
打開工程后會(huì)發(fā)現(xiàn)IP都被鎖住了,如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
此時(shí)需要升級IP,操作如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA

FPGA型號不一致處理

如果你的FPGA型號與我的不一致,則需要更改FPGA型號,操作如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
更改FPGA型號后還需要升級IP,升級IP的方法前面已經(jīng)講述了;

其他注意事項(xiàng)

1:由于每個(gè)板子的DDR不一定完全一樣,所以MIG IP需要根據(jù)你自己的原理圖進(jìn)行配置,甚至可以直接刪掉我這里原工程的MIG并重新添加IP,重新配置;
2:根據(jù)你自己的原理圖修改引腳約束,在xdc文件中修改即可;
3:純FPGA移植到Zynq需要在工程中添加zynq軟核;

8、上板調(diào)試驗(yàn)證

準(zhǔn)備工作

需要準(zhǔn)備以下物品:
1:FPGA開發(fā)板;
2:QSFP光口、光纖;
3:主機(jī),Linux系統(tǒng),最好用服務(wù)器,普通臺式機(jī)性能太差;
連接如下,然后上電下載bit:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA
上板調(diào)試需要在Linux系統(tǒng)下進(jìn)行,目前已經(jīng)測試過了,但速率跑不到25G,在14G左右,關(guān)于上板測試方法,請參考前面的“Linux 下的驅(qū)動(dòng)編譯、加載、測試”章節(jié);

9、福利:工程代碼的獲取

福利:工程代碼的獲取
代碼太大,無法郵箱發(fā)送,以某度網(wǎng)盤鏈接方式發(fā)送,
資料獲取方式:私,或者文章末尾的V名片。
網(wǎng)盤資料如下:
FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持,菜鳥FPGA以太網(wǎng)專題,菜鳥FPGA PCIE通信專題,FPGA GT 高速接口,fpga開發(fā),udp,網(wǎng)絡(luò)協(xié)議,NIC,網(wǎng)卡,RDMA文章來源地址http://www.zghlxwxcb.cn/news/detail-717840.html

到了這里,關(guān)于FPGA實(shí)現(xiàn) RDMA NIC 100G UDP協(xié)議棧網(wǎng)卡,UltraScale+ 100G Ethernet Subsystem驅(qū)動(dòng),提供工程源碼和技術(shù)支持的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • FPGA純verilog實(shí)現(xiàn)10G UDP協(xié)議棧,XGMII接口UltraScale GTY驅(qū)動(dòng),提供工程源碼和技術(shù)支持

    FPGA純verilog實(shí)現(xiàn)10G UDP協(xié)議棧,XGMII接口UltraScale GTY驅(qū)動(dòng),提供工程源碼和技術(shù)支持

    目前網(wǎng)上的fpga實(shí)現(xiàn)udp基本生態(tài)如下: 1:verilog編寫的udp收發(fā)器,但中間的FIFO或者RAM等調(diào)用了IP,或者不帶ping功能,這樣的代碼功能正常也能用,但不帶ping功能基本就是廢物,在實(shí)際項(xiàng)目中不會(huì)用這樣的代碼,試想,多機(jī)互聯(lián),出現(xiàn)了問題,你的網(wǎng)卡都不帶ping功能,連基本的

    2024年02月14日
    瀏覽(22)
  • FPGA實(shí)現(xiàn) NIC 10G 網(wǎng)卡,純verilog代碼編寫,提供工程源碼和技術(shù)支持

    FPGA實(shí)現(xiàn) NIC 10G 網(wǎng)卡,純verilog代碼編寫,提供工程源碼和技術(shù)支持

    FPGA實(shí)現(xiàn) NIC 10G 網(wǎng)卡,純verilog代碼編寫,提供3套工程源碼和技術(shù)支持 網(wǎng)絡(luò)接口控制器(NIC)是計(jì)算機(jī)與網(wǎng)絡(luò)進(jìn)行交互的網(wǎng)關(guān)。NIC構(gòu)成了軟件協(xié)議棧和網(wǎng)絡(luò)之間的橋梁,該橋梁的功能定義了網(wǎng)絡(luò)接口。網(wǎng)絡(luò)接口的功能以及這些功能的實(shí)現(xiàn)都在迅速發(fā)展。這些變化是由提高線速和

    2024年02月03日
    瀏覽(46)
  • iperf3 測試100G網(wǎng)卡帶寬性能

    iperf3 測試100G網(wǎng)卡帶寬性能

    iperf3 作為iperf 系列網(wǎng)絡(luò)測試工具新一代工具,開發(fā)團(tuán)隊(duì)重寫代碼使之有全新的實(shí)現(xiàn)方式,更少的代碼量,更加小巧,但這也導(dǎo)致了其與iperf工具前后不兼容,一些命令執(zhí)行具有差異化,而這些差異在大帶寬網(wǎng)卡性能測試時(shí)則更加明顯,現(xiàn)記錄整理以供大家參考。 iperf 帶寬性能

    2023年04月08日
    瀏覽(16)
  • Python實(shí)現(xiàn)讀取超100G的數(shù)據(jù)文件

    前言 本文是該專欄的第42篇,后面會(huì)持續(xù)分享python的各種干貨知識,值得關(guān)注。 在項(xiàng)目工作中,難免會(huì)遇到需要你通過python去讀取100G甚至超過100G的數(shù)據(jù)文件。對于小數(shù)據(jù)的文件來說,相信很多同學(xué)都可以輕松解決。但對于大數(shù)據(jù)文件,類似讀取100G的數(shù)據(jù)文件甚至?xí)﹄娔X的

    2024年01月19日
    瀏覽(21)
  • 千兆以太網(wǎng)傳輸層 UDP 協(xié)議原理與 FPGA 實(shí)現(xiàn)(UDP接收)

    千兆以太網(wǎng)傳輸層 UDP 協(xié)議原理與 FPGA 實(shí)現(xiàn)(UDP接收)

    相關(guān)文章: (1)千兆以太網(wǎng)網(wǎng)絡(luò)層 ARP 協(xié)議的原理與 FPGA 實(shí)現(xiàn) (2)千兆以太網(wǎng)硬件設(shè)計(jì)及鏈路層 MAC 協(xié)議格式 (3)CRC校驗(yàn)原理及實(shí)現(xiàn) (4)RGMII 與 GMII 轉(zhuǎn)換電路設(shè)計(jì) (5)千兆以太網(wǎng)網(wǎng)絡(luò)層 IP 協(xié)議介紹與 IP 校 驗(yàn)和算法實(shí)現(xiàn) (6)千兆以太網(wǎng)傳輸層 UDP 協(xié)議原理與 FPGA 實(shí)現(xiàn)(

    2024年02月04日
    瀏覽(29)
  • FPGA 20個(gè)例程篇:14.千兆網(wǎng)口實(shí)現(xiàn)ICMP、UDP通信協(xié)議(上)

    FPGA 20個(gè)例程篇:14.千兆網(wǎng)口實(shí)現(xiàn)ICMP、UDP通信協(xié)議(上)

    ? ? ? ?UDP是一種面向無連接的傳輸層協(xié)議,屬于TCP/IP協(xié)議族的一種,UDP具有消耗資源少、通信效率高等優(yōu)點(diǎn),一般性地用來傳輸音頻或者視頻等對實(shí)時(shí)性要求高的場合。 ? ? ? ? ICMP是TCP/IP協(xié)議族的一個(gè)IP層子協(xié)議,包含在IP數(shù)據(jù)報(bào)里,主要用于IP主機(jī)、路由器之間傳遞控制消

    2024年02月03日
    瀏覽(26)
  • FPGA----UltraScale+系列的PS側(cè)與PL側(cè)通過AXI-HP交互(全網(wǎng)唯一最詳)附帶AXI4協(xié)議校驗(yàn)IP使用方法

    FPGA----UltraScale+系列的PS側(cè)與PL側(cè)通過AXI-HP交互(全網(wǎng)唯一最詳)附帶AXI4協(xié)議校驗(yàn)IP使用方法

    1、之前寫過一篇關(guān)于ZYNQ系列通用的PS側(cè)與PL側(cè)通過AXI-HP通道的文檔,下面是鏈接。 FPGA----ZCU106基于axi-hp通道的pl與ps數(shù)據(jù)交互(全網(wǎng)唯一最詳)_zcu106調(diào)試_發(fā)光的沙子的博客-CSDN博客 大家好,今天給大家?guī)淼膬?nèi)容是,基于AXI4協(xié)議的采用AXI-HP通道完成PL側(cè)數(shù)據(jù)發(fā)送至PS側(cè)(PS側(cè)數(shù)

    2024年02月13日
    瀏覽(28)
  • FPGA純verilog實(shí)現(xiàn)UDP協(xié)議棧,sgmii接口SFP光口收發(fā),提供工程源碼和技術(shù)支持

    FPGA純verilog實(shí)現(xiàn)UDP協(xié)議棧,sgmii接口SFP光口收發(fā),提供工程源碼和技術(shù)支持

    目前網(wǎng)上的fpga實(shí)現(xiàn)udp基本生態(tài)如下: 1:verilog編寫的udp收發(fā)器,但中間的FIFO或者RAM等調(diào)用了IP,或者不帶ping功能,這樣的代碼功能正常也能用,但不帶ping功能基本就是廢物,在實(shí)際項(xiàng)目中不會(huì)用這樣的代碼,試想,多機(jī)互聯(lián),出現(xiàn)了問題,你的網(wǎng)卡都不帶ping功能,連基本的

    2024年02月16日
    瀏覽(33)
  • FPGA純verilog實(shí)現(xiàn)UDP協(xié)議棧,GMII接口驅(qū)動(dòng)88E1111,提供工程源碼和技術(shù)支持

    FPGA純verilog實(shí)現(xiàn)UDP協(xié)議棧,GMII接口驅(qū)動(dòng)88E1111,提供工程源碼和技術(shù)支持

    目前網(wǎng)上的fpga實(shí)現(xiàn)udp基本生態(tài)如下: 1:verilog編寫的udp收發(fā)器,但中間的FIFO或者RAM等調(diào)用了IP,或者不帶ping功能,這樣的代碼功能正常也能用,但不帶ping功能基本就是廢物,在實(shí)際項(xiàng)目中不會(huì)用這樣的代碼,試想,多機(jī)互聯(lián),出現(xiàn)了問題,你的網(wǎng)卡都不帶ping功能,連基本的

    2024年02月13日
    瀏覽(27)
  • Wireshark抓取網(wǎng)卡協(xié)議分析(TCP,UDP,ARP,DNS,DHCP,HTTP超詳細(xì)版本)

    Wireshark抓取網(wǎng)卡協(xié)議分析(TCP,UDP,ARP,DNS,DHCP,HTTP超詳細(xì)版本)

    使用wireshark工具抓取ping命令操作 選擇本機(jī)網(wǎng)卡WLAN,點(diǎn)擊開始,開始抓包 在數(shù)據(jù)列表區(qū)中選取TCP協(xié)議,在數(shù)據(jù)詳細(xì)區(qū)中顯示出其詳細(xì)信息 (1)Frame: 物理層的數(shù)據(jù)幀概況 (2)Ethernet II: 數(shù)據(jù)鏈路層以太網(wǎng)幀頭部信息 (3)Internet Protocol Version 6: 互聯(lián)網(wǎng)層IP包頭部信息 (4)Tra

    2024年02月08日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包