洪 暢,翟棟梁,丁志輝
(中國船舶集團(tuán)有限公司第七二四研究所,江蘇 南京 211153)
數(shù)據(jù)傳輸系統(tǒng)被廣泛應(yīng)用于雷達(dá)、遙感、通信、圖像處理等領(lǐng)域,隨著電子技術(shù)的高速發(fā)展,電子設(shè)備或系統(tǒng)的功能復(fù)雜度不斷提高,數(shù)據(jù)處理能力也大幅增強,因此數(shù)據(jù)傳輸系統(tǒng)需要滿足數(shù)據(jù)吞吐量大、傳輸帶寬高的特點[1-8]。為了充分發(fā)揮FPGA 可編程的優(yōu)點,業(yè)內(nèi)通常將FPGA 設(shè)計為數(shù)據(jù)接口,主要作用是接入數(shù)據(jù)采集前端發(fā)送過來的數(shù)據(jù),并通過高速通信總線發(fā)送給數(shù)據(jù)處理后端完成處理,例如CPU、GPU、DSP 等,而FPGA 與后端處理節(jié)點之間的傳輸帶寬和效率成為制約系統(tǒng)處理性能的關(guān)鍵因素[9-11]。PCIE 總線由于其具有高帶寬、低延遲的優(yōu)點,目前被廣泛應(yīng)用于高性能數(shù)據(jù)傳輸系統(tǒng)中。國內(nèi)外對于基于PCIE 總線的DMA 數(shù)據(jù)傳輸架構(gòu)開展了深入研究,能夠?qū)崿F(xiàn)較高吞吐量的數(shù)據(jù)傳輸,但是多數(shù)方案存在帶寬利用率不高的問題,或者往往僅聚焦于傳輸效能的提升而忽略后端數(shù)據(jù)解析對系統(tǒng)資源和性能的開銷,并且通用性和可移植性較差。文獻(xiàn)[10]設(shè)計了一種PCIE DMA 控制器,通過簡化狀態(tài)機流程來提高帶寬利用率,但該方案沒有考慮數(shù)據(jù)流傳輸時后端處理節(jié)點的數(shù)據(jù)解析開銷。文獻(xiàn)[11]設(shè)計了一種多通道視頻數(shù)據(jù)傳輸系統(tǒng),通過降低PIO 寫入延遲和動態(tài)拼接等措施實現(xiàn)高效傳輸,但該方案通用性和可移植性較差。文獻(xiàn)[12]設(shè)計了一種DMA 數(shù)據(jù)傳輸系統(tǒng),在X4 gen1 下最大DMA 寫速率為793.2 MB/s,并沒有充分利用PCIE 通信帶寬。文獻(xiàn)[13]實現(xiàn)了一種多通道DMA 傳輸系統(tǒng),針對數(shù)據(jù)流傳輸設(shè)計了專用的數(shù)據(jù)解析機制,但該方案基于阻塞式DMA 實現(xiàn),傳輸效率還有提升空間,并且可擴展性較差。
針對上述問題,本文基于PCIE 總線設(shè)計了一種高性能數(shù)據(jù)傳輸架構(gòu),采用分散-聚集式DMA 傳輸方式,通過優(yōu)化傳輸流程進(jìn)一步提升傳輸效率。本架構(gòu)中傳輸參數(shù)用戶可配置并且描述符結(jié)構(gòu)可擴展,因而大大增強了本設(shè)計的適應(yīng)性和可移植性,并且通過反饋數(shù)據(jù)特征參數(shù)的方式可以有效解決后端數(shù)據(jù)解析開銷大的問題,能夠滿足諸如雷達(dá)信息處理、圖像處理等應(yīng)用場景中海量數(shù)據(jù)流傳輸和實時解析的需求。
PCIE 總線采用端點到端點的連接方式,通過串行差分信號進(jìn)行傳輸,其層次結(jié)構(gòu)由低到高分為物理層、數(shù)據(jù)鏈路層和事務(wù)層[14]。物理層確保數(shù)據(jù)傳輸?shù)奈锢憝h(huán)境和電信號符合要求,并完成鏈路訓(xùn)練和狀態(tài)管理;數(shù)據(jù)鏈路層定義了一系列的DLLP(數(shù)據(jù)鏈路層包)來實現(xiàn)數(shù)據(jù)的可靠傳遞和鏈路維護(hù);事務(wù)層的主要功能是處理設(shè)備核心層的數(shù)據(jù)請求,將其轉(zhuǎn)換為TLP(事務(wù)層包)并傳遞給數(shù)據(jù)鏈路層。
PCIE 總線傳輸峰值帶寬很高,這得益于PCIE 總線具備較高的單Lane 線速,并且支持多個Lane 通路同時傳輸,但是實際傳輸數(shù)據(jù)的有效帶寬會受到很多因素影響[15]。
1)事務(wù)層開銷
以PCIE V3.0 規(guī)范為例,讀寫存儲器事務(wù)的TLP 報文通用格式如圖1 所示。
圖1 PCIE V3.0 TLP 報文格式
TLP 報文中開始字段由物理層添加,占4 個字節(jié),表示一個TLP 的開始;序列號和鏈路層校驗由數(shù)據(jù)鏈路層添加,共6 個字節(jié);TLP 頭提供了該TLP 報文的屬性信息,64 位地址訪問時為4 個雙字,其余為3 個雙字;數(shù)據(jù)載荷為傳輸?shù)挠行?shù)據(jù),長度可為0~1 024 個雙字,實際由MPS 參數(shù)(最大負(fù)荷長度)決定。事務(wù)層校驗是可選的,占一個雙字,由事務(wù)層添加。
2)物理層和數(shù)據(jù)鏈路層開銷
物理層額外開銷包括數(shù)據(jù)編碼和時鐘補償,PCIE Gen3 以上摒棄較早的8b/10b 轉(zhuǎn)換,采取128b/130b 轉(zhuǎn)換,大大降低了帶寬損失。物理層產(chǎn)生一個周期性時鐘補償序列用于解決時鐘漂移問題。數(shù)據(jù)鏈路層額外開銷主要由ACK/NAK 報文和流量控制報文引起,由于接收TLP 個數(shù)的閾值和流量計算沒有統(tǒng)一的標(biāo)準(zhǔn),因而這部分開銷難以準(zhǔn)確計算[16]。
3)應(yīng)用開銷
除協(xié)議開銷外,PCIE 傳輸架構(gòu)設(shè)計需要對數(shù)據(jù)獲取及封裝、處理狀態(tài)機、FPGA 與處理器之間握手交互、數(shù)據(jù)解析等邏輯功能進(jìn)行合理設(shè)計,將應(yīng)用開銷盡可能降到最低。
本文設(shè)計的基于PCIE 總線的高性能數(shù)據(jù)傳輸架構(gòu)用于實現(xiàn)數(shù)據(jù)由PCIE 設(shè)備到主機的高速傳輸,PCIE 設(shè)備由FPGA 實現(xiàn),主機為CPU 處理器。高速傳輸必須采用DMA 傳輸方式,其實質(zhì)為FPGA 將待發(fā)數(shù)據(jù)封裝為存儲器寫請求TLP,發(fā)送到處理器系統(tǒng)的內(nèi)存中,應(yīng)用軟件再從內(nèi)存中獲取數(shù)據(jù)并解析處理。
阻塞式傳輸在每次DMA 啟動時需要等待上一次傳輸徹底結(jié)束,使用同一片物理地址連續(xù)的內(nèi)存區(qū)域作為DMA 數(shù)據(jù)緩沖區(qū)。分散-聚集式傳輸是將多個內(nèi)存區(qū)域鏈接起來,每個內(nèi)存區(qū)域內(nèi)部物理地址連續(xù),各內(nèi)存區(qū)域之間是不連續(xù)的。常規(guī)的阻塞和分散-聚集式DMA傳輸流程如圖2 和圖3 所示。
圖2 阻塞式DMA 傳輸流程
圖3 分散-聚集式DMA 傳輸流程
對比傳輸流程可以發(fā)現(xiàn)二者存在如下差異:
1)阻塞式傳輸每次DMA 均由CPU 發(fā)起和控制;分散-聚集式傳輸FPGA 僅首次需要等待CPU 準(zhǔn)備就緒消息,后續(xù)傳輸均由FPGA 自主控制。
2)阻塞式傳輸過程中CPU 和FPGA 無法同時工作,因此傳輸過程有大片時間處于互相等待過程;分散-聚集式傳輸過程通過傳遞多個描述符實現(xiàn),F(xiàn)PGA 獲取描述符和CPU 輪詢鏈表是同時進(jìn)行互不干擾的。
3)相比阻塞式傳輸,分散-聚集式傳輸在實現(xiàn)方法和交互邏輯上都更加復(fù)雜。CPU 端需要建立和維護(hù)描述符鏈表,每次傳輸FPGA 先讀取描述符進(jìn)而獲取數(shù)據(jù)緩沖區(qū)物理地址,數(shù)據(jù)發(fā)送完成后再向CPU 反饋描述符及表頭信息。
分散-聚集式傳輸具有非阻塞的特性,基于描述符鏈表能夠?qū)崿F(xiàn)流水線式數(shù)據(jù)傳輸,因而傳輸效率更高,因此本文在常規(guī)的分散-聚集式DMA 傳輸架構(gòu)之上進(jìn)行設(shè)計改進(jìn),通過優(yōu)化傳輸流程從而進(jìn)一步提高帶寬利用率和數(shù)據(jù)吞吐量。此外,傳輸參數(shù)可由應(yīng)用軟件進(jìn)行配置,并且描述符結(jié)構(gòu)中表項可擴展,這可以極大增強本架構(gòu)的適應(yīng)性和可移植性。FPGA 發(fā)起寫存儲器TLP將數(shù)據(jù)和相應(yīng)的數(shù)據(jù)特征參數(shù)發(fā)送給CPU,有助于處理器完成后續(xù)的數(shù)據(jù)解析工作,使得處理器的性能及資源得到充分利用。
2.2.1 傳輸流程優(yōu)化
在常規(guī)的分散-聚集模式下,每次DMA 傳輸FPGA都需要完成兩次描述符的讀取/反饋操作,導(dǎo)致帶寬損失。因此,本設(shè)計中對CPU 與FPGA 之間的交互邏輯進(jìn)行優(yōu)化,在傳輸開始前CPU 將所有必要的傳輸信息一次性發(fā)送給FPGA,從而避免了FPGA 在傳輸過程中頻繁讀取描述符,包括描述符個數(shù)、數(shù)據(jù)緩沖區(qū)大小、描述符表頭地址、描述符地址以及數(shù)據(jù)DMA 地址,F(xiàn)PGA 中DMA 控制器自動載入描述符完成數(shù)據(jù)傳輸和信息反饋。改進(jìn)的分散-聚集式DMA 傳輸流程如圖4 所示。
圖4 改進(jìn)的分散-聚集式DMA 傳輸流程
CPU 端處理流程為:初始化主要包括初始化PCIE設(shè)備、申請和映射I/O 資源等;分配DMA 內(nèi)存區(qū)域,需要完成描述符表頭、所有描述符和數(shù)據(jù)緩沖區(qū)內(nèi)存空間的申請;初始化描述符表頭,完成鏈表頭初始化、描述符個數(shù)和數(shù)據(jù)長度等字段的填充;建立描述符鏈表,初始化描述符并形成循環(huán)鏈表;發(fā)送傳輸參數(shù),將所有需要的傳輸信息發(fā)送給FPGA;發(fā)送DMA 已準(zhǔn)備就緒消息,通知FPGA 可開啟DMA 流程;周期性輪詢描述符鏈表,檢測數(shù)據(jù)區(qū)為滿時表示有新數(shù)據(jù)到達(dá),取出數(shù)據(jù)并開啟后續(xù)的解析處理;判斷是否結(jié)束,若是則退出并釋放資源,否則,繼續(xù)輪詢鏈表。
FPGA 端處理流程為:不斷采集數(shù)據(jù)并緩存到DDR中;等待收到處理器端準(zhǔn)備就緒消息;加載第i個描述符,并發(fā)起DMA 讀存儲器請求TLP 獲取第i個數(shù)據(jù)區(qū)指示信息;若數(shù)據(jù)區(qū)為空,則發(fā)起寫存儲器請求TLP 完成數(shù)據(jù)傳輸;反饋描述符信息,將數(shù)據(jù)區(qū)指示置滿;若還有數(shù)據(jù)未發(fā)送,則繼續(xù)讀取下一描述符,否則FPGA 可控制傳輸結(jié)束或等待數(shù)據(jù)。
與常規(guī)的分散-聚集傳輸相比,本架構(gòu)中FPGA 擁有DMA 傳輸?shù)耐耆灾鳈?quán),傳輸過程中交互邏輯更少,F(xiàn)PGA 和CPU 端處理流程更加簡化。數(shù)據(jù)區(qū)空/滿指示信號不僅有利于CPU 輪詢鏈表的實現(xiàn),應(yīng)用軟件通過檢測該信號為滿時取出數(shù)據(jù),而且實現(xiàn)了一種數(shù)據(jù)區(qū)保護(hù)機制,F(xiàn)PGA 只有當(dāng)檢測到該信號為空時才往該數(shù)據(jù)緩沖區(qū)發(fā)送數(shù)據(jù),在傳輸瞬時大帶寬數(shù)據(jù)時能夠避免因CPU 取數(shù)據(jù)慢導(dǎo)致的數(shù)據(jù)覆蓋問題。
2.2.2 描述符設(shè)計
不同應(yīng)用平臺下軟硬件環(huán)境和數(shù)據(jù)傳輸業(yè)務(wù)存在差異,主要包括:FPGA 可利用資源大小不同;支持的PCIE 規(guī)范及通道不同;內(nèi)存容量不同;操作系統(tǒng)不同,從而可申請的最大物理連續(xù)內(nèi)存大小可能不同;數(shù)據(jù)采集率和預(yù)期傳輸?shù)臄?shù)據(jù)大小可能不同;數(shù)據(jù)來源及數(shù)據(jù)類型可能不同。因此,本架構(gòu)設(shè)計了一種用戶可配置、表項可擴展的描述符循環(huán)鏈表來實現(xiàn)數(shù)據(jù)的傳輸和解析,其基礎(chǔ)結(jié)構(gòu)如圖5 所示。
圖5 描述符鏈表結(jié)構(gòu)
描述符表頭信息包括傳輸參數(shù)、DMA 地址和數(shù)據(jù)區(qū)指示信息。傳輸參數(shù)有描述符個數(shù)和數(shù)據(jù)緩沖區(qū)大小,均可由應(yīng)用軟件根據(jù)實際進(jìn)行配置;DMA 地址即描述符鏈表頭基物理地址;數(shù)據(jù)區(qū)指示信息用于CPU 與FPGA 之間的握手,指示該數(shù)據(jù)區(qū)空或滿。描述符信息包括描述符id、地址信息和數(shù)據(jù)特征參數(shù)。描述符id 是描述符的唯一標(biāo)識;地址信息分為描述符地址、DMA 地址和CPU 地址,描述符地址即該描述符基物理地址,DMA 地址指對應(yīng)的數(shù)據(jù)緩沖區(qū)起始物理地址,CPU 地址為數(shù)據(jù)緩沖區(qū)的內(nèi)核虛擬地址;數(shù)據(jù)特征參數(shù)有數(shù)據(jù)大小、數(shù)據(jù)幀號和數(shù)據(jù)包號,數(shù)據(jù)大小為該數(shù)據(jù)緩沖區(qū)內(nèi)的有效數(shù)據(jù)大小,數(shù)據(jù)幀號為每一幀數(shù)據(jù)的報文計數(shù),數(shù)據(jù)包號為一幀數(shù)據(jù)拆分后的子包號。此外,描述符表頭及描述符中均預(yù)留可擴展項,用戶可根據(jù)需要增加額外的控制信息或數(shù)據(jù)特征參數(shù),例如DMA 結(jié)束、數(shù)據(jù)來源、類型等。
數(shù)據(jù)傳輸及處理的另一個難點在于處理節(jié)點的數(shù)據(jù)解析,當(dāng)傳輸數(shù)據(jù)幀長度不固定和大數(shù)據(jù)幀分包傳輸時,難以確定數(shù)據(jù)緩沖區(qū)內(nèi)的有效數(shù)據(jù)范圍和數(shù)據(jù)幀分包數(shù)量等信息,傳統(tǒng)方式通過查找報文幀頭幀尾來完成拼包解析,數(shù)據(jù)解析耗費大量處理器時間片和系統(tǒng)資源。通過反饋描述符信息的方式,將數(shù)據(jù)特征參數(shù)發(fā)送給處理器,處理器借助于數(shù)據(jù)特征參數(shù)可以完成數(shù)據(jù)解析,從而減輕處理器負(fù)擔(dān),將處理器性能最大限度地用于數(shù)據(jù)的后續(xù)處理上。
一種CPU+FPGA 信息處理板用于測試本架構(gòu)在PCIE gen3 X8 下的性能表現(xiàn),F(xiàn)PGA 為復(fù)旦微電子JFM7VX690T80,CPU 為飛騰FT1500A/16,操作系統(tǒng)為銀河麒麟。測試參數(shù)設(shè)置如下:PCIE 最大負(fù)荷長度為1 024 B;描述符個數(shù)為256 個;數(shù)據(jù)緩沖區(qū)大小為1/2/4 MB;每次發(fā)送數(shù)據(jù)大小固定為4 MB,數(shù)據(jù)為遞增的計數(shù)器,速率可自定義調(diào)節(jié);報文個數(shù)為1 024 個。測試方法為:自測試軟件發(fā)送DMA Ready 消息起計時,最后一幀數(shù)據(jù)到達(dá)時結(jié)束計時;結(jié)束傳輸后,檢測接收數(shù)據(jù)幀號及包號是否連續(xù),并校驗接收數(shù)據(jù)是否連續(xù)遞增;調(diào)節(jié)測試數(shù)據(jù)速率進(jìn)行多次測試,最終得出實際最大有效傳輸速率。測試條件不變,對常規(guī)的分散-聚集式DMA 傳輸架構(gòu)進(jìn)行測試。測試結(jié)果分別如表1 和表2 所示。
表1 改進(jìn)的分散-聚集式DMA 性能測試
表2 常規(guī)的分散-聚集式DMA 性能測試
由測試結(jié)果可以發(fā)現(xiàn):當(dāng)配置數(shù)據(jù)緩沖區(qū)由1 MB增大為2 MB 和由2 MB 增大為4 MB 時,改進(jìn)架構(gòu)傳輸速率分別提升10.1%和7.5%,常規(guī)架構(gòu)分別提升13.0%和11.2%;在三種數(shù)據(jù)緩沖區(qū)下改進(jìn)架構(gòu)相比常規(guī)架構(gòu)傳輸速率分別增長21.3%、18.2 和14.4%,但增長速度逐漸變慢,最大傳輸速率可達(dá)5.2 GB/s。測試結(jié)果表明:增大數(shù)據(jù)緩沖區(qū)減少了數(shù)據(jù)分包和握手開銷,從而能夠提高傳輸帶寬利用率;改進(jìn)架構(gòu)相比常規(guī)的分散-聚集式傳輸架構(gòu)傳輸效率得到顯著提升。
本文設(shè)計了一種基于PCIE 總線的高性能分散-聚集式DMA 傳輸架構(gòu),目前已成功部署于某型雷達(dá)國產(chǎn)化信息處理平臺中,通過全互聯(lián)的CPU+FPGA 異構(gòu)處理模塊實現(xiàn)了雷達(dá)中頻數(shù)據(jù)的實時傳輸和處理。該架構(gòu)具有帶寬利用率高、通用性強、資源開銷小、報文易解析的優(yōu)點,能夠滿足海量數(shù)據(jù)和不定長數(shù)據(jù)幀的高速傳輸及數(shù)據(jù)解析的需求。
注:本文通訊作者為洪暢。