蘇陽, 趙英瀟, 黃睿, 張月, 陳曾平
(國防科技大學 自動目標識別重點實驗室,長沙 410073)
摘要: PCIe總線在雷達系統中應用日益廣泛,但FPGA內部集成的PCIe硬核數量有限,難以滿足雷達并行錄取多種數據的需求。為此,本文提出了一種改進的PCIe DMA數據傳輸方法,利用Xilinx FPGA集成的單個PCIe硬核實現了多路數據在高速傳輸情況下的并行錄取。針對實現過程中遇到的時序問題,提出了采用多級FIFO級聯方法進行時序優化。依據Xilinx FPGA的時鐘網絡特點,對時鐘資源進行優化,便于日后系統的擴展和升級。
FPGA的多路數據并行錄取和時序資源優化
蘇陽, 趙英瀟, 黃睿, 張月, 陳曾平
(國防科技大學 自動目標識別重點實驗室,長沙 410073)
摘要: PCIe總線在雷達系統中應用日益廣泛,但FPGA內部集成的PCIe硬核數量有限,難以滿足雷達并行錄取多種數據的需求。為此,本文提出了一種改進的PCIe DMA數據傳輸方法,利用Xilinx FPGA集成的單個PCIe硬核實現了多路數據在高速傳輸情況下的并行錄取。針對實現過程中遇到的時序問題,提出了采用多級FIFO級聯方法進行時序優化。依據Xilinx FPGA的時鐘網絡特點,對時鐘資源進行優化,便于日后系統的擴展和升級。
FPGA;PCIe;并行錄?。粫r序優化
PCIe(PCI-Express)總線作為芯片間和板間通信最常用的標準之一,目前在雷達系統中應用尤為廣泛。然而隨著雷達技術的不斷發展,當前雷達在應用過程中面臨目標多樣化、環境復雜化和任務多元化等問題。用一部雷達代替多部雷達的功能,使一部雷達同時具有多種對抗能力成為當前雷達發展的主要趨勢[2]。
實驗室采用的Xilinx公司Kintex-7 FPGA芯片內部僅集成了單個PCIe硬核,難以滿足多種類型數據并行錄取的要求。為此本文提出了一種改進的并行錄取方法,并對其進行了時序和時鐘資源方面的優化。
本文的硬件平臺是某雷達系統的數據存儲與管理工作站。該工作站主要由一臺機架服務器和安裝在其內部的磁盤陣列以及功能板卡組成。功能板卡主要是兩塊PCIe光纖接口卡和一塊陣列控制卡。其中一塊PCIe光纖接口卡用于接收中頻直接采集寬帶數據(以下簡稱“直采數據”)和寬帶去斜回波數據(以下簡稱“去斜數據”),而本文的主要工作就是在此板卡上展開。
PCIe光纖接口卡采用Kintex-7 FPGA芯片接收直采數據和去斜數據并傳輸至陣列服務器。FPGA芯片通過PCIe接口與陣列服務器進行數據交互。另外,該板卡還提供8片DDR3 SDRAM芯片,可用作數據緩存。
2.1 并行錄取實現思路
陣列服務器與FPGA之間通過PCIe DMA(Direct Memory Access)的方式進行數據傳輸,其標準的數據傳輸流程如圖1所示[3-4]。服務器在復位完成后會為DMA緩存塊申請內存空間并設置DMA的寫地址、TLP包的大小和數量,之后開啟DMA寫數據直至結束。

圖1 DMA數據傳輸流程圖
在FPGA PCIe的BAR內存中可以預先分配多個寄存器用于服務器控制FPGA的DMA進程。通過這些寄存器,服務器可以讀取當前數據緩存的狀態,FPGA也可以通過這些寄存器接收主機的控制指令[5]。由于需要實現并行錄取直采數據和去斜數據,而Kintex-7 FPGA內只有一個PCIe硬核,即單次DMA過程中FPGA只能傳輸一種數據。因此對上述DMA流程加以改進以實現多路數據并行傳輸,具體如圖2所示。
FPGA會實時計算當前緩存中的數據量,一旦其超過設定的閾值,則會通過PCIe BAR內存中的寄存器反饋給主機。在DMA開始之前,通過讀取直采和去斜數據的緩存狀態,主機會向FPGA下達相應數據的選通指令。DMA開始后,FPGA根據選通信號輸出相應的數據。一次DMA結束后主機根據數據類型的不同將接收到的數據存儲至相應路徑下。
由于直采數據的數據率和數據量都遠大于去斜數據,直采數據緩存易變滿,因而選擇優先判斷直采數據是否就緒。又由于設定的閾值大于單次DMA的總數據量且遠小于DDR3芯片的存儲容量,在并行錄取時,能夠保證數據傳輸類型快速切換而不致緩存變滿出現丟數的情況。

圖2 改進后的DMA數據傳輸流程圖
2.2 FPGA頂層結構設計

圖3 FPGA頂層結構設計圖
根據上述設計思路,FPGA頂層結構設計如圖3所示,其中主要模塊功能介紹如下:
① GTX模塊用于接收去斜數據,Aurora模塊用于接收直采數據;
② Frame_Check模塊用于將接收的去斜數據進行位序調整,之后輸入DDR3模塊;
③ DDR3控制模塊用于控制DDR3芯片讀寫時序,并將當前芯片讀寫狀態通過PCIe模塊反饋給陣列服務器;
④ PCIe模塊由Xilinx提供的PCIe IP核配置生成,用于FPGA與服務器之間的數據交互;
⑤ SEL模塊用于接收服務器的指令,選通相應數據通道,將相應的數據通過PCIe模塊發送給服務器;
⑥ FIFO用作GTX或者Aurora模塊與DDR3模塊之間以及DDR3模塊與PCIe模塊之間的數據位寬轉換和跨時鐘域處理。
2.3 實現結果
通過上述方法,實際在用戶端看到的結果即為直采數據和去斜數據能夠實現并行錄取,如圖4所示。

圖4 數據并行錄取結果圖
3.1 時序違例原因分析
利用Xilinx ISE的靜態時序分析工具進行時序分析后發現部分路徑存在時序問題[6]。從ISE提供的時序報告可知,出現時序問題的路徑在于:PCIe模塊輸出PCIe_fifo_rd_en信號至DDR3控制模塊,DDR3控制模塊就是通過接收該信號實現對DDR3芯片內數據讀取的控制。
根據時序報告中對路徑的具體描述,如表1所列,該路徑經過的3級組合邏輯,邏輯延遲為0.779 ns,線延遲卻高達5.426 ns,占總延遲時間的87.4%。結合在FPGA Editor中看到的實際布線結果,可以發現走線延遲過長是導致時序問題的主要原因。而出現這種情況的根本原因在于用作DDR3讀數據的緩存ddr3 read fifo在布局布線的過程中同時受到多個時序約束的影響。

表1 時序違例路徑詳細信息表
FPGA內部的FIFO是由多個blcok RAM搭建出來的,而單個RAM在芯片內部都占據固定的位置。隨著FIFO容量的增加,使用的blcok RAM數量越多,但這些blcok RAM之間需要滿足FIFO內部固有的時序約束,因而其布局不能過于分散。
除此以外,ddr3 read fifo還需要滿足與DDR3控制相關邏輯之間的時序約束,如圖5所示。最終ddr3 read fifo整體位置在圖中左下區域且內部blcok RAM之間布局相對緊湊,而PCIe相關邏輯均分布在右上區域,靠近內嵌的PCIe硬核的位置。兩者之間布局位置相隔較遠,導致布線延遲過大。

圖5 時序違例路徑實際布局結果圖
3.2 時序優化方法
基于以上分析可知,如果只是簡單的在時序違規的路徑之間添加一級寄存器,將整個路徑分割開來。雖然能消除時序錯誤,但PCIe_fifo_rd_en信號將延遲一個周期,意味著讀DDR3的數據時序會出現偏差,這將導致數據傳輸過程中出現丟數漏數的情況。因此采用多個FIFO級聯的方法來改善時序,即大容量blcok RAM FIFO +流水線+小容量distributed RAM FIFO的方式,如圖6所示。

圖6 FIFO級聯示意圖
前級FIFO由blcok RAM構成,作為數據緩存的主體。后級FIFO的容量較小,由distributed RAM構成。相較于block RAM,distributed RAM容量更小,但在布局布線的過程中更加靈活,可供選擇的位置也更多,能夠顯著緩解大容量FIFO和PCIe 模塊之間的時序壓力。同時在兩個FIFO之間添加一級流水線作為連接,后級FIFO的prog_full信號用于控制前級FIFO的rd_en端,且在時序約束中將該路徑設為虛假路徑,進一步緩解時序壓力。如果布局布線的效果依然不理想,還可以在此基礎上利用PlanAhead軟件手動調整blcok RAM和distributed RAM的布局位置,用于降低時序沖突[7]。
3.3 時序優化結果

圖7 時序優化后的布局結果圖
時序優化后的布局情況如圖7所示。優化后的ddr3 read fifo(圖中標紅色區域)和PCIe相關邏輯(圖中標黃色區域)的布局位置相對靠近,整體上減少了走線延遲。且兩者之間還有一級FIFO用作緩存,即圖中標綠色區域,將原先時序違例的路徑分割開來,極大地緩解了時序壓力,時序問題由此得到解決。
在Xilinx的FPGA中,時鐘網絡資源分為兩類:全局時鐘資源和區域時鐘資源。全局時鐘資源是一種專用互連網絡,它可以降低時鐘歪斜、占空比失真和功耗,提高抖動容限。Xilinx的全局時鐘資源設計了專用時鐘緩沖與驅動結構,從而使全局時鐘到達CLB、IOB和BRAM的延時最小。當FPGA內部使用全局時鐘資源時,需要經過全局時鐘網絡緩沖器BUFG驅動。本文中使用的PCIe光纖接口卡上的Kintex-7 FPGA芯片內部僅有32個BUFG可供使用。
區域時鐘資源獨立于全局時鐘網絡。Xilinx的器件分為若干個時鐘區域,Kintex-7就有16個區域。它與全局時鐘不同,區域時鐘信號只能驅動限定的時鐘區域。與BUFG類似,使用區域時鐘資源需要經區域時鐘緩沖器BUFH或者BUFR驅動。BUFH可驅動單個時鐘區域中的水平全局時鐘樹,BUFR則最多可以驅動三個相鄰時鐘區域的區域時鐘。相較于BUFH和BUFR,BUFG資源數量較少,不能盲目地將所有時鐘都用BUFG驅動,這將不利于日后代碼的擴展和升級[8]。
通過查看MAP Report中時鐘資源使用情況的詳細信息,可以了解每個模塊內部時鐘資源的使用情況。通過FPGA Editor可以了解每個時鐘驅動的邏輯資源的分布情況。對于僅覆蓋三個時鐘區域以內的時鐘改由BUFR驅動,對于僅覆蓋單個時鐘區域的時鐘可改為由BUFH驅動。
如圖8所示,圖中黃色走線為時鐘sync_clk_i經過BUFG之前的部分,紅色走線為該時鐘經過BUFG之后通過全局時鐘網絡驅動邏輯的部分,藍色矩形框為該部分邏輯所在的時鐘區域。

圖8 sync_clk_i時鐘布線結果圖
可以看到sync_clk_i驅動的邏輯較少且僅分布在單個時鐘區域,故而將其改為由BUFH驅動。優化結果如圖9所示。黃色走線依然為時鐘sync_clk_i經過BUFG之前的部分,紅色走線為該時鐘經過BUFG之后的部分,并且ISE在滿足時序約束的條件下對驅動的邏輯部分重新進行了布局。通過實際數據傳輸測試,時鐘資源優化后依然能夠正常工作。

圖9 優化后的sync_clk_i時鐘布線結果圖

[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] 郭建明,譚懷英.雷達技術發展綜述及第五代雷達初探[J].現代雷達,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 靜態時序分析的研究與實現[D].哈爾濱:哈爾濱工業大學,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)