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