0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一個基于FPGA的開源原型平臺

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-11-03 10:02 ? 次閱讀

我們在Linux下Vivado 2019.1版本下恢復(fù)出了Corundum基于VCU118的工程,并在VCU118板子上進行了上板重現(xiàn)。如下圖。

59bdaac8-5b12-11ed-a3b6-dac502259ad0.png

59e7bf20-5b12-11ed-a3b6-dac502259ad0.png

59f9178e-5b12-11ed-a3b6-dac502259ad0.png

摘要

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

5a19603e-5b12-11ed-a3b6-dac502259ad0.png

一、引言與背景

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

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

A.動機和以前的工作

通過介紹當前如何在硬件和軟件之間劃分現(xiàn)有NIC設(shè)計中的網(wǎng)絡(luò)接口功能,可以了解開發(fā)Corundum的動機。硬件NIC功能分為兩個主要類別。第一類包括簡單的卸載功能,這些功能可以從CPU中刪除某些按數(shù)據(jù)包進行的處理,例如校驗和/哈希計算和分段卸載,這些功能使網(wǎng)絡(luò)協(xié)議??梢耘刻幚頂?shù)據(jù)包。第二類包括必須在NIC上的硬件中實現(xiàn)才能實現(xiàn)高性能和公平性的功能。這些功能包括流量控制,速率限制,負載平衡和時間戳。

一般來說,NIC的硬件功能內(nèi)置于專有的專用集成電路ASIC)中。結(jié)合規(guī)模經(jīng)濟,可以低成本實現(xiàn)高性能。但是,這些ASIC的可擴展性受到限制,添加新硬件功能的開發(fā)周期可能既昂貴又耗時[1]。為了克服這些限制,已經(jīng)開發(fā)了各種智能NIC和軟件NIC。智能NIC通常通過提供許多可編程處理核心和硬件原語,在NIC上提供強大的可編程性。這些資源可用于從主機上卸載各種應(yīng)用程序,網(wǎng)絡(luò)和虛擬化操作。但是,智能NIC不一定能夠很好地適應(yīng)高線路速率,并且硬件功能可能會受到限制[1]。

軟件NIC通過繞過大多數(shù)硬件卸載功能,在軟件中實現(xiàn)網(wǎng)絡(luò)功能來提供最大的靈活性。因此,可以快速開發(fā)和測試新功能,但是要進行各種折衷,包括消耗主機CPU周期,并不一定要支持全線速運行。另外,由于軟件固有的隨機中斷驅(qū)動特性,要求精確傳輸控制的網(wǎng)絡(luò)應(yīng)用程序的開發(fā)是不可行的[2]。盡管如此,許多研究項目[3]–[6]通過修改網(wǎng)絡(luò)協(xié)議棧或使用諸如Data Plane Development Kit(DPDK)[7]之類的內(nèi)核繞過框架,在軟件中實現(xiàn)了新穎的NIC功能。

基于FPGA的NIC結(jié)合了基于ASIC的NIC和軟件NIC的功能:它們能夠以線速運行并提供低延遲和精確定時,同時新功能的開發(fā)周期相對較短。還開發(fā)了高性能,基于FPGA的專有NIC。例如,阿里巴巴開發(fā)了一個完全定制的基于FPGA的RDMA-onlyNIC,他們用它來運行精密擁塞控制協(xié)議(HPCC)的硬件實現(xiàn)[8]。商業(yè)產(chǎn)品也存在,包括Exablaze [9]和Netcope [10]提供的產(chǎn)品。

不幸的是,類似于基于ASIC的NIC,可商用的基于FPGA的NIC往往具有無法修改的基本“黑匣子”功能?;綨IC功能的封閉性嚴重限制了它們在開發(fā)新的網(wǎng)絡(luò)應(yīng)用程序時的效用和靈活性。

商業(yè)上可用的高性能DMA組件,例如Xilinx XDMA內(nèi)核和QDMA內(nèi)核,以及Atomic Rules ArkvilleDPDK加速內(nèi)核[11]都沒有提供完全可配置的硬件來控制傳輸數(shù)據(jù)流。Xilinx XDMA內(nèi)核是為計算卸載應(yīng)用程序而設(shè)計的,因此提供了非常有限的排隊功能,并且沒有簡單的方法來控制傳輸調(diào)度。Xilinx QDMA內(nèi)核和Atomic Rules ArkvilleDPDK加速內(nèi)核通過支持少量隊列并提供DPDK驅(qū)動程序而面向網(wǎng)絡(luò)應(yīng)用程序。但是,支持的隊列數(shù)量很少(XDMA內(nèi)核為2K隊列,而Arkville內(nèi)核為128個隊列)而且兩個內(nèi)核都不提供用于精確控制數(shù)據(jù)包傳輸?shù)暮唵畏椒ā?/p>

另外,還有諸如NetFPGA [12]之類的開源項目,但是NetFPGA項目僅提供用于基于FPGA的常規(guī)數(shù)據(jù)包處理的工具箱,而并非專門為NIC開發(fā)而設(shè)計的[P1]。此外,NetFPGA NIC參考設(shè)計利用了Xilinx XDMA內(nèi)核,該內(nèi)核并非為網(wǎng)絡(luò)應(yīng)用而設(shè)計。用Corundum替換NetFPGA板的參考NIC設(shè)計中的Xilinx XDMA內(nèi)核,將提供一個功能更強大,更靈活的原型開發(fā)平臺。

基于FPGA的分組處理解決方案包括實現(xiàn)網(wǎng)絡(luò)應(yīng)用程序卸載的Catapult [13]和實現(xiàn)FPGA上可重構(gòu)匹配引擎的FlowBlaze [14]。但是,這些平臺將標準的NIC功能留給了單獨的基于ASIC的NIC,并且完全作為“線下突擊”進行操作,沒有提供對NIC調(diào)度程序或隊列的明確控制。

其他項目使用軟件實現(xiàn)或部分硬件實現(xiàn)。Shoal [15]描述了一種網(wǎng)絡(luò)架構(gòu),該網(wǎng)絡(luò)架構(gòu)使用自定義NIC和快速的第1層電交叉點交換機執(zhí)行小規(guī)模路由。Shoal是用硬件構(gòu)建的,但僅在沒有主機連接的情況下通過綜合流量進行評估。SENIC [3]描述了基于NIC的可擴展速率限制。單獨評估了調(diào)度程序的硬件實現(xiàn),但是系統(tǒng)級評估是在具有自定義排隊規(guī)則(qdisc)模塊的軟件中進行的。PIEO [16]描述了一種靈活的NIC調(diào)度程序,它是在硬件中單獨進行評估的。NDP [5]是用于數(shù)據(jù)中心應(yīng)用程序的拉模式傳輸協(xié)議。NDP已通過DPDK軟件NIC和基于FPGA的交換機進行了評估。Loom [6]描述了一種有效的NIC設(shè)計,可以使用BESS在軟件中對其進行評估。

Corundum的開發(fā)與所有這些項目都不同,因為它是完全開源的,并且可以以實際的線速與標準主機網(wǎng)絡(luò)協(xié)議棧一起運行。它提供了數(shù)千個傳輸隊列,并帶有可擴展的傳輸調(diào)度程序,以實現(xiàn)對流的細粒度控制。最后我們建立了一個強大而靈活的開源平臺,用于開發(fā)結(jié)合了硬件和軟件功能的網(wǎng)絡(luò)應(yīng)用程序。

二、實施方式

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

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

當前的設(shè)計支持Xilinx Ultrascale PCIe硬IP內(nèi)核接口的PCIe DMA組件。目前尚未實現(xiàn)對其他FPGA中常用的PCIe TLP接口的支持,這是未來的工作。這種支持應(yīng)該可以在更多的FPGA上進行操作。

Corundum的占用空間相當小,即使在相對較小的FPGA上,也有足夠的空間用于附加邏輯。例如,ExaNIC X10[9]的Corundum設(shè)計,是一個雙端口10G設(shè)計,具有PCIe gen 3 x8接口和512位內(nèi)部數(shù)據(jù)路徑,其消耗的邏輯資源不到第二小的Kintex Ultrascale FPGA(KU035)上可用邏輯資源的四分之一。表一列舉了幾個目標平臺的資源,放在本文的最后。

本節(jié)的其余部分描述了FPGA上Corundum的實現(xiàn)。首先,給出了主要功能塊的高層概述。然后,討論了幾個獨特的體系結(jié)構(gòu)特征和功能塊的細節(jié)。

A.高層概述

CorundumNIC的框圖如圖1所示。從較高的層次來看,NIC由3個主要的嵌套模塊組成。頂層模塊主要包含支持和接口組件。這些組件包括PCI Express硬IP內(nèi)核和DMA接口,PTP硬件時鐘以及包括MAC,PHY和相關(guān)串行器的以太網(wǎng)接口組件。頂層模塊還包括一個或多個接口模塊實例。每個接口模塊都對應(yīng)于操作系統(tǒng)級別的網(wǎng)絡(luò)接口(例如eth0)。每個接口模塊都包含隊列管理邏輯以及描述符和完成處理邏輯。隊列管理邏輯維護所有NIC隊列的隊列狀態(tài)-傳輸,傳輸完成,接收,接收完成和事件隊列。每個接口模塊還包含一個或多個端口模塊實例。每個端口模塊都提供一個到MAC的AXI流接口,并包含一個傳輸調(diào)度程序,傳輸和接收引擎,傳輸和接收數(shù)據(jù)路徑以及一個暫存RAM,用于在DMA操作期間臨時存儲傳入和傳出的數(shù)據(jù)包。

對于每個端口,端口模塊中的傳輸調(diào)度程序決定將哪些隊列指定用于傳輸。傳輸調(diào)度程序為發(fā)送引擎生成命令,這些命令協(xié)調(diào)傳輸數(shù)據(jù)路徑上的操作。調(diào)度程序模塊是一個靈活的功能塊,可以對其進行修改或替換,以支持任意調(diào)度,這些調(diào)度可以是事件驅(qū)動的。調(diào)度程序的默認實現(xiàn)是簡單循環(huán)。與同一接口模塊關(guān)聯(lián)的所有端口共享同一組傳輸隊列,并顯示為操作系統(tǒng)的單個統(tǒng)一接口。通過僅更改傳輸調(diào)度程序設(shè)置,而不會影響網(wǎng)絡(luò)協(xié)議棧的其余部分,這可以使流在端口之間遷移或在多個端口之間實現(xiàn)負載平衡。這種動態(tài)的,調(diào)度程序定義的隊列到端口的映射是Corundum的獨特功能,可以使人們能夠研究新的協(xié)議和網(wǎng)絡(luò)體系結(jié)構(gòu),包括并行網(wǎng)絡(luò)(例如P-FatTree [17]和光交換網(wǎng)絡(luò),例如RotorNet [18])。和Opera [19]。

5a33cff0-5b12-11ed-a3b6-dac502259ad0.png

圖1.CorundumNIC的框圖。PCIe HIP:PCIe硬IP內(nèi)核; AXIL M:AXI lite Master; DMA IF:DMA接口; PTP HC:PTP硬件時鐘;TXQ:傳輸隊列管理器; TXCQ:傳輸完成隊列管理器; RXQ:接收隊列管理器; RXCQ:接收完成隊列管理器;EQ:事件隊列管理器; MAC + PHY:以太網(wǎng)媒體訪問控制器(MAC)和物理接口層(PHY)。

在接收方向,傳入的數(shù)據(jù)包通過流哈希模塊確定目標接收隊列,并為接收引擎生成命令,這些命令協(xié)調(diào)對接收數(shù)據(jù)路徑的操作。由于同一接口模塊中的所有端口共享同一組接收隊列,因此不同端口上的傳入流將合并到同一組隊列中。還可以向NIC添加自定義模塊,以在傳入數(shù)據(jù)包通過PCIe總線之前對其進行預(yù)處理和過濾。

NIC上的組件與多個不同的接口互連,包括AXI lite,AXI流和用于DMA操作的自定義分段存儲器接口,這將在后面討論。AXI lite用于從驅(qū)動程序到NIC的控制路徑。它用于初始化和配置NIC組件,并在發(fā)送和接收操作期間控制隊列指針。AXI stream接口用于在NIC內(nèi)傳輸打包數(shù)據(jù),包括PCIe傳輸層數(shù)據(jù)包(TLP)和以太網(wǎng)幀。分段存儲器接口用于將PCIe DMA接口連接到NIC數(shù)據(jù)路徑以及描述符和完成處理邏輯。

大部分NIC邏輯都運行在PCIe用戶時鐘域中,對于所有當前的設(shè)計變體,名義上為250 MHz。異步FIFO用于與MAC接口,這些MAC在串行器中運行,以適當?shù)匕l(fā)送和接收時鐘域-10G為156.25 MHz,25G為390.625 MHz,100G為322.266 MHz。

以下各節(jié)描述了NIC中的幾個關(guān)鍵功能塊。

B.流水線隊列管理

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

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

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

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

用于存儲隊列狀態(tài)信息的BRAM或URAM陣列對于每個讀取操作都需要幾個延遲周期,因此queue_manager是使用流水線結(jié)構(gòu)構(gòu)建的,以促進多個并發(fā)操作。流水線支持四種不同的操作:寄存器讀取,寄存器寫入,出隊/入隊請求和出隊/入隊提交。通過AXI lite接口進行的寄存器訪問操作使驅(qū)動程序可以初始化隊列狀態(tài),并提供指向已分配的主機內(nèi)存的指針,以及在正常操作期間訪問生產(chǎn)者和使用者指針。

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

Corundum NIC中使用的默認傳輸調(diào)度程序是在tx_scheduler_rr模塊中實現(xiàn)的簡單循環(huán)調(diào)度程序。調(diào)度器向發(fā)送引擎發(fā)送命令,從NIC傳輸隊列中啟動傳輸操作。循環(huán)調(diào)度器包含所有隊列的基本隊列狀態(tài),一個FIFO用于存儲當前活動隊列并執(zhí)行循環(huán)調(diào)度,一個操作表用于跟蹤進程中的傳輸操作。

與隊列管理邏輯類似,循環(huán)傳輸調(diào)度程序還將隊列狀態(tài)信息存儲在FPGA上的BRAM或URAM中,以便可以擴展以支持大量隊列。傳輸調(diào)度程序還使用處理流水線來隱藏內(nèi)存訪問延遲。

傳輸調(diào)度器模塊具有四個主要接口:AXI lite寄存器接口和三個stream接口。AXI lite接口允許驅(qū)動程序更改調(diào)度程序參數(shù)并啟用/禁用隊列。當驅(qū)動程序?qū)?shù)據(jù)包排隊發(fā)送時,第一個流接口從隊列管理邏輯提供門鈴事件。第二個流接口將由調(diào)度器生成的傳輸命令攜帶到發(fā)送引擎。每個命令都包含要發(fā)送的隊列索引以及用于跟蹤進程中操作的標簽。最終的流接口將傳輸操作狀態(tài)信息返回給調(diào)度程序。狀態(tài)信息會通知調(diào)度程序已傳輸數(shù)據(jù)包的長度,或者是否由于隊列為空或禁用而導致傳輸操作失敗。

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

D.端口和接口

Corundum的獨特體系結(jié)構(gòu)特征是端口和網(wǎng)絡(luò)接口之間的分隔,因此多個端口可以與同一接口關(guān)聯(lián)。當前的大多數(shù)NIC每個接口支持一個端口,如圖2a所示。當網(wǎng)絡(luò)協(xié)議棧將數(shù)據(jù)包排隊以便在網(wǎng)絡(luò)接口上傳輸時,數(shù)據(jù)包將通過與該接口關(guān)聯(lián)的網(wǎng)絡(luò)端口注入網(wǎng)絡(luò)。但是,在Corundum中,每個接口都可以關(guān)聯(lián)多個端口,因此可以在出隊時由硬件決定將數(shù)據(jù)包注入到網(wǎng)絡(luò)中的哪個端口,如圖2b所示。

5a417f24-5b12-11ed-a3b6-dac502259ad0.png

圖2. NIC端口和接口架構(gòu)比較

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

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

Corundum在數(shù)據(jù)路徑中同時使用了內(nèi)存映射接口和流接口。AXI stream用于在端口DMA模塊,以太網(wǎng)MAC,校驗和與哈希計算模塊之間傳輸以太網(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用戶時鐘域中運行。因此,到PCIe硬IP內(nèi)核的AXI流接口必須與硬核接口寬度匹配-PCIe Gen 3 x8為256位,PCIe Gen 3 x16為512位。在以太網(wǎng)端,接口寬度與MAC接口寬度匹配,除非250 MHz時鐘太慢而無法提供足夠的帶寬。對于10G以太網(wǎng),MAC接口是156.25 MHz的64位,可以以相同的寬度連接到250 MHz的時鐘域。對于25G以太網(wǎng),MAC接口在390.625 MHz時為64位,因此必須轉(zhuǎn)換為128位才能在250 MHz時提供足夠的帶寬。對于100G以太網(wǎng),Corundum在Ultrascale Plus FPGA上使用Xilinx 100G硬CMAC內(nèi)核。MAC接口在322.266 MHz時為512位,它以512位在250 MHz時鐘域上連接,因為它需要以大約195 MHz的頻率運行才能提供100 Gbps。

5a59638c-5b12-11ed-a3b6-dac502259ad0.png

圖3. 圖1的簡化版本,顯示了NIC數(shù)據(jù)路徑。

NIC數(shù)據(jù)路徑的框圖如圖3所示,它是圖1的簡化版本。PCIe硬IP內(nèi)核(PCIe HIP)將NIC連接到主機。兩個AXI stream接口將PCIe DMA接口模塊連接到PCIe硬IP內(nèi)核。一個接口用于讀寫請求,一個接口用于讀取數(shù)據(jù)。然后,PCIe DMA接口模塊通過一組DMA接口多路復(fù)用器連接到描述符獲取模塊,完成寫入模塊,端口暫存RAM模塊以及RX和TX引擎。在朝向DMA接口的方向上,多路復(fù)用器組合了來自多個源的DMA傳輸命令。在相反的方向上,它們路由傳輸狀態(tài)響應(yīng)。它們還管理分段存儲器接口以進行讀取和寫入。頂層多路復(fù)用器將描述符流量與分組數(shù)據(jù)流量結(jié)合在一起,為描述符流量提供更高的優(yōu)先級。接下來,一對多路復(fù)用器組合來自多個接口模塊的流量。最后,每個接口模塊內(nèi)的一個附加多路復(fù)用器將來自多個端口實例的分組數(shù)據(jù)流量組合在一起。

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

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

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

描述符讀取和完成寫入模塊的操作類似于發(fā)送和接收引擎。這些模塊處理來自發(fā)送和接收引擎的描述符/完成讀/寫請求,向隊列管理器發(fā)出入隊/出隊請求,以獲取主機內(nèi)存中的隊列元素地址,然后向PCIe DMA接口發(fā)出請求以傳輸數(shù)據(jù)。完成寫入模塊還負責通過將發(fā)送和接收完成隊列排隊在適當?shù)氖录犃兄胁懗鍪录涗泚硖幚硎录?/p>

F.分段內(nèi)存接口

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

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

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

G.設(shè)備驅(qū)動程序

Corundum NIC通過內(nèi)核模塊連接到Linux內(nèi)核網(wǎng)絡(luò)協(xié)議棧。該模塊負責初始化NIC,注冊內(nèi)核接口,為描述符和完成隊列分配DMA可訪問的緩沖區(qū),處理設(shè)備中斷以及在內(nèi)核和NIC之間傳遞網(wǎng)絡(luò)流量。

NIC使用寄存器空間公開參數(shù),包括接口數(shù)量,端口數(shù)量,隊列數(shù)量,調(diào)度程序數(shù)量,最大傳輸單元(MTU)大小以及PTP時間戳和卸載支持。驅(qū)動程序在初始化期間讀取這些寄存器,因此它可以配置自身并注冊內(nèi)核接口以匹配NIC設(shè)計配置。這種自動檢測功能意味著驅(qū)動程序和NIC松耦合。當在不同的FPGA板,不同的Corundum設(shè)計變體和不同的參數(shù)設(shè)置中使用驅(qū)動程序時,通常不需要針對核心數(shù)據(jù)路徑進行修改。

H.仿真框架

包含了一個廣泛的基于Python的開源仿真框架,以評估完整設(shè)計。該框架使用Python庫MyHDL構(gòu)建,并包括PCI Express系統(tǒng)基礎(chǔ)架構(gòu),PCI Express硬IP內(nèi)核,NIC驅(qū)動程序和以太網(wǎng)接口的仿真模型。該仿真框架通過提供整個系統(tǒng)狀態(tài)的可視性,有助于調(diào)試完整的NIC設(shè)計。

PCIe仿真框架的核心由大約4,500行Python組成,并包括PCIe基礎(chǔ)結(jié)構(gòu)組件的事務(wù)層模型,其中包括根聯(lián)合體,功能,端點和交換機以及高級功能,包括配置空間,功能,總線枚舉,根聯(lián)合體內(nèi)存分配,中斷和其他功能。其他模塊由另外4,000行Python組成,提供FPGA PCIe硬IP核的模型,與模擬的PCIe基礎(chǔ)設(shè)施交換事務(wù)層流量,并驅(qū)動可連接至共同仿真的Verilog設(shè)計的信號。

模擬Corundum需要幾行代碼來實例化和連接所有組件。清單1顯示了使用模擬框架發(fā)送和接收各種大小的數(shù)據(jù)包的簡化測試臺,在Icarus Verilog中共同模擬了Verilog設(shè)計。該測試平臺實例化了以太網(wǎng)接口端點,PCIe根聯(lián)合體和驅(qū)動程序的仿真模型,并將它們連接到協(xié)同仿真的設(shè)計。然后,它初始化PCIe基礎(chǔ)結(jié)構(gòu),初始化驅(qū)動程序模型,并發(fā)送,接收和驗證幾個不同長度的測試數(shù)據(jù)包。

三、結(jié)果

在安裝在Dell R540服務(wù)器(雙Xeon 6138)中的Alpha Data ADM-PCIE-9V3板上評估了CorundumNIC的100G變體,該主板連接到同一服務(wù)器上的最新商業(yè)級NIC(Mellanox ConnectX-5)用QSFP28直接連接銅纜。還對在同一臺計算機上安裝的另外兩個Mellanox ConnectX-5 NIC進行了評估,以進行比較。最多使用八個iperf3實例來飽和鏈接。

5a67fb18-5b12-11ed-a3b6-dac502259ad0.png

5a774f96-5b12-11ed-a3b6-dac502259ad0.png

清單1. NIC測試臺的縮寫。包括設(shè)置PCIe,以太網(wǎng)接口和驅(qū)動程序模型,初始化模擬的PCIe總線和驅(qū)動程序以及發(fā)送和接收測試數(shù)據(jù)包。為簡潔起見,大多數(shù)信號已刪除。

5a859dc6-5b12-11ed-a3b6-dac502259ad0.png

圖4.Corundum和MellanoxConnectX-5的TCP吞吐量比較。

為了將Corundum與Mellanox ConnectX-5的性能進行比較,最初將兩個NIC的最大傳輸單位(MTU)配置為9000字節(jié)。對于此配置,Corundum可以分別實現(xiàn)95.5 Gbps RX和94.4 Gbps TX(圖4a)。在相同條件下,Mellanox ConnectX-5 NIC的RX和TX均達到97.8 Gbps。當運行iperf的其他實例同時在兩個方向上使鏈接飽和時,Corundum的性能將下降到65.7 Gpbs RX和85.9 Gbps TX(圖4b)。對于現(xiàn)有的測試臺,對于RX和TX,Mellanox NIC的性能也下降到83.4 Gbps。在全雙工模式下,Corundum和ConnectX-5的性能下降都表明軟件驅(qū)動程序可能是導致性能下降的重要原因。具體來說,當前版本的驅(qū)動程序僅支持Linux內(nèi)核網(wǎng)絡(luò)協(xié)議棧。支持諸如DPDK之類的內(nèi)核繞過框架的參考設(shè)計是未來工作的目標。此設(shè)計應(yīng)提高全雙工模式的性能,并可針對特定應(yīng)用進行定制。

圖4c和4d比較了1500字節(jié)MTU的性能。對于這種情況,Corundum可以分別實現(xiàn)75.0 Gbps RX和72.2 Gbps TX(圖4c),同時實現(xiàn)53.0 Gbps RX和57.6 Gbps TX(圖4d)。隨著iperf實例數(shù)量的增加,圖4c中TX和RX之間Corundum的性能差異是由進程內(nèi)傳輸數(shù)據(jù)包數(shù)量的限制以及PCIe往返延遲引起的。通過將進程內(nèi)傳輸操作的數(shù)量從8個增加到16個,可以驗證這一點。這將速率從65.6 Gbps RX和45.7 Gbps TX提高到了圖4c中所示的75.0 Gbps RX和72.2 Gbps TX速率。為了進行比較,在相同條件下,Mellanox ConnectX-5 NIC可以分別實現(xiàn)93.4 Gbps的RX和86.5 Gbps的TX,同時實現(xiàn)82.7 Gbps的RX和62.0 Gbps的TX。

為了測試PTP時間戳的性能,將兩個10G模式的CorundumNIC連接到用作PTP邊界時鐘的Arista 40G數(shù)據(jù)包交換機。NIC配置為輸出源自PTP時間的固定頻率信號,該信號由示波器捕獲。在啟用PTP時間戳的情況下實施Corundum時,可以將硬件時鐘與linux ptp同步到50 ns以上。鏈路飽和時,時間同步性能不變。

四、案例研究:時分多址(TDMA)

精確的網(wǎng)絡(luò)準入控制是高線路速率下的關(guān)鍵網(wǎng)絡(luò)功能。Corundum提供了數(shù)千個傳輸隊列,可用于在多個終端主機之間同步的精細時間范圍內(nèi)分離和控制傳輸數(shù)據(jù)。此功能提供了一個獨特的工具箱,可用于開發(fā)新的強大的NIC功能。確定要實現(xiàn)的網(wǎng)絡(luò)功能以及這些功能對網(wǎng)絡(luò)性能的影響是一個活躍的研究領(lǐng)域[3]–[5],[16]。

為了演示如何將Corundum用于精確的傳輸控制,我們?yōu)門DMA實現(xiàn)了具有固定時間表的簡單參考設(shè)計。從此基本設(shè)計和Corundum的模塊化結(jié)構(gòu)開始,可以實現(xiàn)針對新型網(wǎng)絡(luò)協(xié)議的自定義調(diào)度程序,這些調(diào)度程序?qū)φ麄€體系結(jié)構(gòu)的影響最小。

固定的TDMA時間表可以通過IEEE 1588 PTP在多個主機之間同步。在TDMA調(diào)度程序控制模塊的控制下,通過根據(jù)PTP時間啟用和禁用傳輸調(diào)度程序中的隊列來實現(xiàn)TDMA。隊列啟用和禁用命令在TDMA調(diào)度程序控制模塊中生成,并在TDMA調(diào)度的每個時隙的開始和結(jié)束時發(fā)送到發(fā)送調(diào)度器。TDMA調(diào)度器在時隙足夠長的假設(shè)下操作,使得TDMA調(diào)度器控制模塊可以在當前時隙期間為下一個時隙做準備。另外,在每個時隙中必須有相對少量的隊列處于活動狀態(tài),因此啟用或禁用的第一個和最后一個隊列之間的時滯較小。

TDMA調(diào)度程序控制模塊在250 MHz PCIe用戶時鐘域中運行。結(jié)果,每個隊列花費4 ns遍歷每個傳輸隊列以準備下一個時隙(8,192個傳輸隊列總計約32.8 us)。類似地,它需要4 ns的時間來生成每個啟用或禁用命令,以發(fā)送到傳輸調(diào)度程序模塊。

A. TDMA性能

在Alpha DataADM-PCIE-9V3板上評估了具有256個傳輸隊列的100G TDMA變體的Corundum NIC,該板安裝在Dell R540服務(wù)器(雙Xeon 6138)上,連接到Mellanox ConnectX-5 NIC。使用了八個實例的iperf3來飽和鏈路,兩個網(wǎng)卡的MTU配置為9 kB。在禁用TDMA的情況下,網(wǎng)卡以94.0 Gbps的速度運行。TDMA調(diào)度器被配置為運行一個周期為200 μs的調(diào)度,包含兩個100 μs的時隙,在第一個時隙中啟用所有傳輸隊列,在第二個時隙中禁用。在100 Gbps的傳輸數(shù)據(jù)路徑中,11個數(shù)據(jù)包的間隔為8 μs(每個數(shù)據(jù)包11個0.72 μs),再加上1 μs來禁用所有256個隊列,Corundum可以以兩個數(shù)據(jù)包長度或1.4 μs的精度控制離開網(wǎng)卡的數(shù)據(jù)。

表I 資源利用

5a93fd08-5b12-11ed-a3b6-dac502259ad0.png

使用200us的時間表,以10 Gbps的線速和1500字節(jié)的MTU運行附加測試。該時間段被劃分為兩個100 us的時隙??紤]到10 Gbps的傳輸數(shù)據(jù)路徑中的32個數(shù)據(jù)包的間隔為38 us(每個數(shù)據(jù)包32 1.2 us)加上1 us以禁用所有256個隊列,Corundum可以以兩個數(shù)據(jù)包長度或兩個數(shù)據(jù)包的精度控制離開NIC的數(shù)據(jù) 2.4us。

五、結(jié)論

在本文中,我們介紹了Corundum,這是一種基于FPGA的開源高性能NIC。初始設(shè)計的測量性能提供了現(xiàn)實的線速,足以開發(fā)和測試新的網(wǎng)絡(luò)應(yīng)用程序?,F(xiàn)有的和計劃中的開源參考設(shè)計可實現(xiàn)自定義和進一步的性能改進。這些功能為網(wǎng)絡(luò)研究和開發(fā)提供了強大的原型平臺,包括基于NIC的調(diào)度程序,例如SENIC [3],Carousel [4],PIEO [16]和Loom [6],新協(xié)議和擁塞控制技術(shù),例如 NDP [5]和HPCC [8]。Corundum還啟用了新的并行網(wǎng)絡(luò)體系結(jié)構(gòu),例如P-FatTree [17],RotorNet [18]和Opera [19]。優(yōu)化設(shè)計以提高較小數(shù)據(jù)包大小的性能,以及基于精確數(shù)據(jù)包傳輸為新的網(wǎng)絡(luò)協(xié)議定制設(shè)計是當前工作的目標。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1624

    文章

    21539

    瀏覽量

    600526
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2628

    瀏覽量

    47215
  • NIC
    NIC
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    12359

原文標題:業(yè)界第一個真正意義上開源100 Gbps NIC Corundum介紹

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    快速部署原型驗證:從子卡到調(diào)試的全方位優(yōu)化

    引言原型驗證是種在FPGA平臺上驗證芯片設(shè)計的過程,通過在FPGA上實現(xiàn)芯片的設(shè)計原型,使得開
    的頭像 發(fā)表于 09-30 08:04 ?415次閱讀
    快速部署<b class='flag-5'>原型</b>驗證:從子卡到調(diào)試的全方位優(yōu)化

    FPGA算法工程師、邏輯工程師、原型驗證工程師有什么區(qū)別?

    邏輯工程師和 FPGA 原型驗證工程師在工作重點和職責上存在定的區(qū)別: FPGA 算法工程師: 主要關(guān)注算法的設(shè)計和優(yōu)化,以在 FPGA
    發(fā)表于 09-23 18:26

    基于FPGA的網(wǎng)絡(luò)加速設(shè)計實現(xiàn)

    首先是FPGA硬件的變化太多,各個模塊可配參數(shù)的變化(比如卷積模塊并行數(shù)的變化),另外一個是網(wǎng)絡(luò)模型多種多樣以及開源的網(wǎng)絡(luò)模型平臺也很多(tensorflow,pytorch等)。網(wǎng)絡(luò)
    發(fā)表于 04-08 09:48 ?669次閱讀
    基于<b class='flag-5'>FPGA</b>的網(wǎng)絡(luò)加速設(shè)計實現(xiàn)

    fpga原型驗證平臺與硬件仿真器的區(qū)別

    FPGA原型驗證平臺與硬件仿真器在芯片設(shè)計和驗證過程中各自發(fā)揮著獨特的作用,它們之間存在明顯的區(qū)別。
    的頭像 發(fā)表于 03-15 15:07 ?940次閱讀

    fpga原型驗證流程

    FPGA原型驗證流程是確保FPGA(現(xiàn)場可編程門陣列)設(shè)計正確性和功能性的關(guān)鍵步驟。它涵蓋了從設(shè)計實現(xiàn)到功能驗證的整個過程,是FPGA開發(fā)流程中不可或缺的
    的頭像 發(fā)表于 03-15 15:05 ?1292次閱讀

    原型平臺是做什么的?proFPGA驗證環(huán)境介紹

    proFPGA是mentor的FPGA原型驗證平臺,當然mentor被西門子收購之后,現(xiàn)在叫西門子EDA。
    的頭像 發(fā)表于 01-22 09:21 ?1229次閱讀
    <b class='flag-5'>原型</b><b class='flag-5'>平臺</b>是做什么的?pro<b class='flag-5'>FPGA</b>驗證環(huán)境介紹

    什么是FPGA原型驗證?FPGA原型設(shè)計的好處是什么?

    FPGA原型設(shè)計是種成熟的技術(shù),用于通過將RTL移植到現(xiàn)場可編程門陣列(FPGA)來驗證專門應(yīng)用的集成電路(ASIC),專用標準產(chǎn)品(ASSP)和片上系統(tǒng)(SoC)的功能和性能。
    發(fā)表于 01-12 16:13 ?1024次閱讀

    關(guān)于FPGA開源項目介紹

    Hello,大家好,之前給大家分享了大約一百多個關(guān)于FPGA開源項目,涉及PCIe、網(wǎng)絡(luò)、RISC-V、視頻編碼等等,這次給大家?guī)淼氖遣豢菰锏膴蕵讽椖浚饕蚶系挠螒騼?nèi)核使用FPGA進行硬解,涉及的內(nèi)核數(shù)不勝數(shù),主要目標是
    的頭像 發(fā)表于 01-10 10:54 ?1273次閱讀
    關(guān)于<b class='flag-5'>FPGA</b>的<b class='flag-5'>開源</b>項目介紹

    邊緣計算平臺開源框架有哪些類型

    將詳細介紹幾種常見的邊緣計算平臺開源框架。 Akraino Edge Stack Akraino Edge Stack 是開放、輕量級、靈活的云邊緣
    的頭像 發(fā)表于 12-27 15:17 ?1080次閱讀

    開源FPGA項目有哪些

    請問開源FPGA項目有哪些?
    發(fā)表于 12-26 12:09

    開源漏洞共享平臺及安全獎勵計劃正式發(fā)布

    12 月 16 日,在 2023 開放原子開發(fā)者大會開幕式上,開源漏洞共享平臺及安全獎勵計劃正式發(fā)布。開放原子開源基金會秘書長馮冠霖、開源安全委員會副主席任旭東、
    的頭像 發(fā)表于 12-21 17:32 ?612次閱讀
    <b class='flag-5'>開源</b>漏洞共享<b class='flag-5'>平臺</b>及安全獎勵計劃正式發(fā)布

    開源漏洞共享平臺及安全獎勵計劃正式發(fā)布

    12月16日,在2023開放原子開發(fā)者大會開幕式上,開源漏洞共享平臺及安全獎勵計劃正式發(fā)布。開放原子開源基金會秘書長馮冠霖、開源安全委員會副主席任旭東、
    的頭像 發(fā)表于 12-17 15:50 ?1001次閱讀
    <b class='flag-5'>開源</b>漏洞共享<b class='flag-5'>平臺</b>及安全獎勵計劃正式發(fā)布

    Kivy :開源平臺的Python 框架

    教你如何使用 Kivy 編寫款乒乓球游戲。我們將從基本的應(yīng)用程序開始,描述創(chuàng)建這個游戲的每個步驟。 Kivy 是用 Python 和 Cython 編寫的,基于 OpenGL ES 2,支持各種輸入設(shè)備并擁有豐富的部件庫。
    的頭像 發(fā)表于 10-31 15:27 ?957次閱讀
    Kivy :<b class='flag-5'>開源</b>跨<b class='flag-5'>平臺</b>的Python 框架

    Lean:款非常強大的開源量化交易平臺

    Lean 是 QuantConnect 開源款非常強大的開源量化交易平臺,可以回測或運行Python或者C#寫的策略,并在代碼倉庫中內(nèi)置了上百
    的頭像 發(fā)表于 10-31 10:32 ?3428次閱讀
    Lean:<b class='flag-5'>一</b>款非常強大的<b class='flag-5'>開源</b>量化交易<b class='flag-5'>平臺</b>

    FPGA為什么有時候還需要時鐘配置芯片提供時鐘呢?

    FPGA為什么有時候還需要時鐘配置芯片提供時鐘呢? FPGA(Field Programmable Gate Array)是種可編程邏
    的頭像 發(fā)表于 10-25 15:14 ?1539次閱讀