蘇陽, 趙英瀟, 黃睿, 張?jiān)? 陳曾平
(國防科技大學(xué) 自動(dòng)目標(biāo)識(shí)別重點(diǎn)實(shí)驗(yàn)室,長沙 410073)
摘要: PCIe總線在雷達(dá)系統(tǒng)中應(yīng)用日益廣泛,但FPGA內(nèi)部集成的PCIe硬核數(shù)量有限,難以滿足雷達(dá)并行錄取多種數(shù)據(jù)的需求。為此,本文提出了一種改進(jìn)的PCIe DMA數(shù)據(jù)傳輸方法,利用Xilinx FPGA集成的單個(gè)PCIe硬核實(shí)現(xiàn)了多路數(shù)據(jù)在高速傳輸情況下的并行錄取。針對(duì)實(shí)現(xiàn)過程中遇到的時(shí)序問題,提出了采用多級(jí)FIFO級(jí)聯(lián)方法進(jìn)行時(shí)序優(yōu)化。依據(jù)Xilinx FPGA的時(shí)鐘網(wǎng)絡(luò)特點(diǎn),對(duì)時(shí)鐘資源進(jìn)行優(yōu)化,便于日后系統(tǒng)的擴(kuò)展和升級(jí)。
FPGA的多路數(shù)據(jù)并行錄取和時(shí)序資源優(yōu)化
蘇陽, 趙英瀟, 黃睿, 張?jiān)? 陳曾平
(國防科技大學(xué) 自動(dòng)目標(biāo)識(shí)別重點(diǎn)實(shí)驗(yàn)室,長沙 410073)
摘要: PCIe總線在雷達(dá)系統(tǒng)中應(yīng)用日益廣泛,但FPGA內(nèi)部集成的PCIe硬核數(shù)量有限,難以滿足雷達(dá)并行錄取多種數(shù)據(jù)的需求。為此,本文提出了一種改進(jìn)的PCIe DMA數(shù)據(jù)傳輸方法,利用Xilinx FPGA集成的單個(gè)PCIe硬核實(shí)現(xiàn)了多路數(shù)據(jù)在高速傳輸情況下的并行錄取。針對(duì)實(shí)現(xiàn)過程中遇到的時(shí)序問題,提出了采用多級(jí)FIFO級(jí)聯(lián)方法進(jìn)行時(shí)序優(yōu)化。依據(jù)Xilinx FPGA的時(shí)鐘網(wǎng)絡(luò)特點(diǎn),對(duì)時(shí)鐘資源進(jìn)行優(yōu)化,便于日后系統(tǒng)的擴(kuò)展和升級(jí)。
FPGA;PCIe;并行錄??;時(shí)序優(yōu)化
PCIe(PCI-Express)總線作為芯片間和板間通信最常用的標(biāo)準(zhǔn)之一,目前在雷達(dá)系統(tǒng)中應(yīng)用尤為廣泛。然而隨著雷達(dá)技術(shù)的不斷發(fā)展,當(dāng)前雷達(dá)在應(yīng)用過程中面臨目標(biāo)多樣化、環(huán)境復(fù)雜化和任務(wù)多元化等問題。用一部雷達(dá)代替多部雷達(dá)的功能,使一部雷達(dá)同時(shí)具有多種對(duì)抗能力成為當(dāng)前雷達(dá)發(fā)展的主要趨勢(shì)[2]。
實(shí)驗(yàn)室采用的Xilinx公司Kintex-7 FPGA芯片內(nèi)部僅集成了單個(gè)PCIe硬核,難以滿足多種類型數(shù)據(jù)并行錄取的要求。為此本文提出了一種改進(jìn)的并行錄取方法,并對(duì)其進(jìn)行了時(shí)序和時(shí)鐘資源方面的優(yōu)化。
本文的硬件平臺(tái)是某雷達(dá)系統(tǒng)的數(shù)據(jù)存儲(chǔ)與管理工作站。該工作站主要由一臺(tái)機(jī)架服務(wù)器和安裝在其內(nèi)部的磁盤陣列以及功能板卡組成。功能板卡主要是兩塊PCIe光纖接口卡和一塊陣列控制卡。其中一塊PCIe光纖接口卡用于接收中頻直接采集寬帶數(shù)據(jù)(以下簡稱“直采數(shù)據(jù)”)和寬帶去斜回波數(shù)據(jù)(以下簡稱“去斜數(shù)據(jù)”),而本文的主要工作就是在此板卡上展開。
PCIe光纖接口卡采用Kintex-7 FPGA芯片接收直采數(shù)據(jù)和去斜數(shù)據(jù)并傳輸至陣列服務(wù)器。FPGA芯片通過PCIe接口與陣列服務(wù)器進(jìn)行數(shù)據(jù)交互。另外,該板卡還提供8片DDR3 SDRAM芯片,可用作數(shù)據(jù)緩存。
2.1 并行錄取實(shí)現(xiàn)思路
陣列服務(wù)器與FPGA之間通過PCIe DMA(Direct Memory Access)的方式進(jìn)行數(shù)據(jù)傳輸,其標(biāo)準(zhǔn)的數(shù)據(jù)傳輸流程如圖1所示[3-4]。服務(wù)器在復(fù)位完成后會(huì)為DMA緩存塊申請(qǐng)內(nèi)存空間并設(shè)置DMA的寫地址、TLP包的大小和數(shù)量,之后開啟DMA寫數(shù)據(jù)直至結(jié)束。
圖1 DMA數(shù)據(jù)傳輸流程圖
在FPGA PCIe的BAR內(nèi)存中可以預(yù)先分配多個(gè)寄存器用于服務(wù)器控制FPGA的DMA進(jìn)程。通過這些寄存器,服務(wù)器可以讀取當(dāng)前數(shù)據(jù)緩存的狀態(tài),F(xiàn)PGA也可以通過這些寄存器接收主機(jī)的控制指令[5]。由于需要實(shí)現(xiàn)并行錄取直采數(shù)據(jù)和去斜數(shù)據(jù),而Kintex-7 FPGA內(nèi)只有一個(gè)PCIe硬核,即單次DMA過程中FPGA只能傳輸一種數(shù)據(jù)。因此對(duì)上述DMA流程加以改進(jìn)以實(shí)現(xiàn)多路數(shù)據(jù)并行傳輸,具體如圖2所示。
FPGA會(huì)實(shí)時(shí)計(jì)算當(dāng)前緩存中的數(shù)據(jù)量,一旦其超過設(shè)定的閾值,則會(huì)通過PCIe BAR內(nèi)存中的寄存器反饋給主機(jī)。在DMA開始之前,通過讀取直采和去斜數(shù)據(jù)的緩存狀態(tài),主機(jī)會(huì)向FPGA下達(dá)相應(yīng)數(shù)據(jù)的選通指令。DMA開始后,F(xiàn)PGA根據(jù)選通信號(hào)輸出相應(yīng)的數(shù)據(jù)。一次DMA結(jié)束后主機(jī)根據(jù)數(shù)據(jù)類型的不同將接收到的數(shù)據(jù)存儲(chǔ)至相應(yīng)路徑下。
由于直采數(shù)據(jù)的數(shù)據(jù)率和數(shù)據(jù)量都遠(yuǎn)大于去斜數(shù)據(jù),直采數(shù)據(jù)緩存易變滿,因而選擇優(yōu)先判斷直采數(shù)據(jù)是否就緒。又由于設(shè)定的閾值大于單次DMA的總數(shù)據(jù)量且遠(yuǎn)小于DDR3芯片的存儲(chǔ)容量,在并行錄取時(shí),能夠保證數(shù)據(jù)傳輸類型快速切換而不致緩存變滿出現(xiàn)丟數(shù)的情況。
圖2 改進(jìn)后的DMA數(shù)據(jù)傳輸流程圖
2.2 FPGA頂層結(jié)構(gòu)設(shè)計(jì)
圖3 FPGA頂層結(jié)構(gòu)設(shè)計(jì)圖
根據(jù)上述設(shè)計(jì)思路,F(xiàn)PGA頂層結(jié)構(gòu)設(shè)計(jì)如圖3所示,其中主要模塊功能介紹如下:
① GTX模塊用于接收去斜數(shù)據(jù),Aurora模塊用于接收直采數(shù)據(jù);
② Frame_Check模塊用于將接收的去斜數(shù)據(jù)進(jìn)行位序調(diào)整,之后輸入DDR3模塊;
③ DDR3控制模塊用于控制DDR3芯片讀寫時(shí)序,并將當(dāng)前芯片讀寫狀態(tài)通過PCIe模塊反饋給陣列服務(wù)器;
④ PCIe模塊由Xilinx提供的PCIe IP核配置生成,用于FPGA與服務(wù)器之間的數(shù)據(jù)交互;
⑤ SEL模塊用于接收服務(wù)器的指令,選通相應(yīng)數(shù)據(jù)通道,將相應(yīng)的數(shù)據(jù)通過PCIe模塊發(fā)送給服務(wù)器;
⑥ FIFO用作GTX或者Aurora模塊與DDR3模塊之間以及DDR3模塊與PCIe模塊之間的數(shù)據(jù)位寬轉(zhuǎn)換和跨時(shí)鐘域處理。
2.3 實(shí)現(xiàn)結(jié)果
通過上述方法,實(shí)際在用戶端看到的結(jié)果即為直采數(shù)據(jù)和去斜數(shù)據(jù)能夠?qū)崿F(xiàn)并行錄取,如圖4所示。
圖4 數(shù)據(jù)并行錄取結(jié)果圖
3.1 時(shí)序違例原因分析
利用Xilinx ISE的靜態(tài)時(shí)序分析工具進(jìn)行時(shí)序分析后發(fā)現(xiàn)部分路徑存在時(shí)序問題[6]。從ISE提供的時(shí)序報(bào)告可知,出現(xiàn)時(shí)序問題的路徑在于:PCIe模塊輸出PCIe_fifo_rd_en信號(hào)至DDR3控制模塊,DDR3控制模塊就是通過接收該信號(hào)實(shí)現(xiàn)對(duì)DDR3芯片內(nèi)數(shù)據(jù)讀取的控制。
根據(jù)時(shí)序報(bào)告中對(duì)路徑的具體描述,如表1所列,該路徑經(jīng)過的3級(jí)組合邏輯,邏輯延遲為0.779 ns,線延遲卻高達(dá)5.426 ns,占總延遲時(shí)間的87.4%。結(jié)合在FPGA Editor中看到的實(shí)際布線結(jié)果,可以發(fā)現(xiàn)走線延遲過長是導(dǎo)致時(shí)序問題的主要原因。而出現(xiàn)這種情況的根本原因在于用作DDR3讀數(shù)據(jù)的緩存ddr3 read fifo在布局布線的過程中同時(shí)受到多個(gè)時(shí)序約束的影響。
表1 時(shí)序違例路徑詳細(xì)信息表
FPGA內(nèi)部的FIFO是由多個(gè)blcok RAM搭建出來的,而單個(gè)RAM在芯片內(nèi)部都占據(jù)固定的位置。隨著FIFO容量的增加,使用的blcok RAM數(shù)量越多,但這些blcok RAM之間需要滿足FIFO內(nèi)部固有的時(shí)序約束,因而其布局不能過于分散。
除此以外,ddr3 read fifo還需要滿足與DDR3控制相關(guān)邏輯之間的時(shí)序約束,如圖5所示。最終ddr3 read fifo整體位置在圖中左下區(qū)域且內(nèi)部blcok RAM之間布局相對(duì)緊湊,而PCIe相關(guān)邏輯均分布在右上區(qū)域,靠近內(nèi)嵌的PCIe硬核的位置。兩者之間布局位置相隔較遠(yuǎn),導(dǎo)致布線延遲過大。
圖5 時(shí)序違例路徑實(shí)際布局結(jié)果圖
3.2 時(shí)序優(yōu)化方法
基于以上分析可知,如果只是簡單的在時(shí)序違規(guī)的路徑之間添加一級(jí)寄存器,將整個(gè)路徑分割開來。雖然能消除時(shí)序錯(cuò)誤,但PCIe_fifo_rd_en信號(hào)將延遲一個(gè)周期,意味著讀DDR3的數(shù)據(jù)時(shí)序會(huì)出現(xiàn)偏差,這將導(dǎo)致數(shù)據(jù)傳輸過程中出現(xiàn)丟數(shù)漏數(shù)的情況。因此采用多個(gè)FIFO級(jí)聯(lián)的方法來改善時(shí)序,即大容量blcok RAM FIFO +流水線+小容量distributed RAM FIFO的方式,如圖6所示。
圖6 FIFO級(jí)聯(lián)示意圖
前級(jí)FIFO由blcok RAM構(gòu)成,作為數(shù)據(jù)緩存的主體。后級(jí)FIFO的容量較小,由distributed RAM構(gòu)成。相較于block RAM,distributed RAM容量更小,但在布局布線的過程中更加靈活,可供選擇的位置也更多,能夠顯著緩解大容量FIFO和PCIe 模塊之間的時(shí)序壓力。同時(shí)在兩個(gè)FIFO之間添加一級(jí)流水線作為連接,后級(jí)FIFO的prog_full信號(hào)用于控制前級(jí)FIFO的rd_en端,且在時(shí)序約束中將該路徑設(shè)為虛假路徑,進(jìn)一步緩解時(shí)序壓力。如果布局布線的效果依然不理想,還可以在此基礎(chǔ)上利用PlanAhead軟件手動(dòng)調(diào)整blcok RAM和distributed RAM的布局位置,用于降低時(shí)序沖突[7]。
3.3 時(shí)序優(yōu)化結(jié)果
圖7 時(shí)序優(yōu)化后的布局結(jié)果圖
時(shí)序優(yōu)化后的布局情況如圖7所示。優(yōu)化后的ddr3 read fifo(圖中標(biāo)紅色區(qū)域)和PCIe相關(guān)邏輯(圖中標(biāo)黃色區(qū)域)的布局位置相對(duì)靠近,整體上減少了走線延遲。且兩者之間還有一級(jí)FIFO用作緩存,即圖中標(biāo)綠色區(qū)域,將原先時(shí)序違例的路徑分割開來,極大地緩解了時(shí)序壓力,時(shí)序問題由此得到解決。
在Xilinx的FPGA中,時(shí)鐘網(wǎng)絡(luò)資源分為兩類:全局時(shí)鐘資源和區(qū)域時(shí)鐘資源。全局時(shí)鐘資源是一種專用互連網(wǎng)絡(luò),它可以降低時(shí)鐘歪斜、占空比失真和功耗,提高抖動(dòng)容限。Xilinx的全局時(shí)鐘資源設(shè)計(jì)了專用時(shí)鐘緩沖與驅(qū)動(dòng)結(jié)構(gòu),從而使全局時(shí)鐘到達(dá)CLB、IOB和BRAM的延時(shí)最小。當(dāng)FPGA內(nèi)部使用全局時(shí)鐘資源時(shí),需要經(jīng)過全局時(shí)鐘網(wǎng)絡(luò)緩沖器BUFG驅(qū)動(dòng)。本文中使用的PCIe光纖接口卡上的Kintex-7 FPGA芯片內(nèi)部僅有32個(gè)BUFG可供使用。
區(qū)域時(shí)鐘資源獨(dú)立于全局時(shí)鐘網(wǎng)絡(luò)。Xilinx的器件分為若干個(gè)時(shí)鐘區(qū)域,Kintex-7就有16個(gè)區(qū)域。它與全局時(shí)鐘不同,區(qū)域時(shí)鐘信號(hào)只能驅(qū)動(dòng)限定的時(shí)鐘區(qū)域。與BUFG類似,使用區(qū)域時(shí)鐘資源需要經(jīng)區(qū)域時(shí)鐘緩沖器BUFH或者BUFR驅(qū)動(dòng)。BUFH可驅(qū)動(dòng)單個(gè)時(shí)鐘區(qū)域中的水平全局時(shí)鐘樹,BUFR則最多可以驅(qū)動(dòng)三個(gè)相鄰時(shí)鐘區(qū)域的區(qū)域時(shí)鐘。相較于BUFH和BUFR,BUFG資源數(shù)量較少,不能盲目地將所有時(shí)鐘都用BUFG驅(qū)動(dòng),這將不利于日后代碼的擴(kuò)展和升級(jí)[8]。
通過查看MAP Report中時(shí)鐘資源使用情況的詳細(xì)信息,可以了解每個(gè)模塊內(nèi)部時(shí)鐘資源的使用情況。通過FPGA Editor可以了解每個(gè)時(shí)鐘驅(qū)動(dòng)的邏輯資源的分布情況。對(duì)于僅覆蓋三個(gè)時(shí)鐘區(qū)域以內(nèi)的時(shí)鐘改由BUFR驅(qū)動(dòng),對(duì)于僅覆蓋單個(gè)時(shí)鐘區(qū)域的時(shí)鐘可改為由BUFH驅(qū)動(dòng)。
如圖8所示,圖中黃色走線為時(shí)鐘sync_clk_i經(jīng)過BUFG之前的部分,紅色走線為該時(shí)鐘經(jīng)過BUFG之后通過全局時(shí)鐘網(wǎng)絡(luò)驅(qū)動(dòng)邏輯的部分,藍(lán)色矩形框?yàn)樵摬糠诌壿嬎诘臅r(shí)鐘區(qū)域。
圖8 sync_clk_i時(shí)鐘布線結(jié)果圖
可以看到sync_clk_i驅(qū)動(dòng)的邏輯較少且僅分布在單個(gè)時(shí)鐘區(qū)域,故而將其改為由BUFH驅(qū)動(dòng)。優(yōu)化結(jié)果如圖9所示。黃色走線依然為時(shí)鐘sync_clk_i經(jīng)過BUFG之前的部分,紅色走線為該時(shí)鐘經(jīng)過BUFG之后的部分,并且ISE在滿足時(shí)序約束的條件下對(duì)驅(qū)動(dòng)的邏輯部分重新進(jìn)行了布局。通過實(shí)際數(shù)據(jù)傳輸測(cè)試,時(shí)鐘資源優(yōu)化后依然能夠正常工作。
圖9 優(yōu)化后的sync_clk_i時(shí)鐘布線結(jié)果圖
[1] J. Gong T,Wang J H,Chen H Y,et al.An Efficient and Flexible Host-FPGA PCIe Comm-unication Library[C]//in Field Programmable Logic and Applications (FPL) 24th International Conference on IEEE,Germany:Munich,2014.
[2] 郭建明,譚懷英.雷達(dá)技術(shù)發(fā)展綜述及第五代雷達(dá)初探[J].現(xiàn)代雷達(dá),2012,34(2):5-6.
[3] Xilinx.Bus Master Performance Demonstration Reference Design for the Xilinx Endpoint PCI Express Solutions,2015.
[4] H Kavianipour,C Bohm.High Performance FPGA-Based DMA Interface for PCIe[C]//IEEE TRANSACTIONS ON NUCLEAR SCIENCE,2014.
[5] Xilinx.7 Series FPGAs Integrated Block for PCI Express v3.3 LogiCORE IP Product Guide,2016.
[6] 許天一.FPGA 靜態(tài)時(shí)序分析的研究與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2014.
[7] Xilinx.Timing Closure User Guide,2012.
[8] Xilinx.7 Series FPGAs Clocking Resources,2015.
Parallel Data Transmission Timing and Resource Optimization Based on FPGA
Su Yang,Zhao Yingxiao,Huang Rui,Zhang Yue,Chen Zengping
(ATR,National University of Defense Technology,Changsha 410073,China)
The PCIe bus is widely used in the radar system,but the internal integrated FPGA PCIe core is limited.So ti is difficult to meet the needs of a variety of data parallel transmission of radar.In this paper,an improved PCIe DMA data transmission method is proposed,which ensures the data can be achieved in the parallel high speed transmission using Xilinx FPGA integrated PCIe core.In order to solve the problem of timing in the process of implementation,a multi-level FIFO cascade method is proposed.Based on the characteristics of Xilinx FPGA clock network,the clock resource is optimized for the system expansion and upgrade.
FPGA;PCIe;parallel transmission;timing optimization
TP336
A
?士然
2017-03-13)