?

基于PCIe的高性能國產化嵌入式實驗平臺構建

2024-04-09 18:02段中雄
科技創新與應用 2024年10期
關鍵詞:龍芯嵌入式系統國產化

段中雄

摘? 要:該文對基于龍芯2K1000國產化CPU和Xilinx Kintex-7 325T FPGA的嵌入式實驗平臺的構建進行研究,通過嵌入式軟件環境和對XDMA驅動程序中內存拷貝方式、中斷處理方式進行優化設計,實現2K1000的PCIe接口高達400 MB/s與FPGA的高性能數據交互,滿足在國產化嵌入式實驗平臺下的高性能數據處理需求。

關鍵詞:國產化;龍芯;FPGA;嵌入式系統;驅動;PCIe

中圖分類號:TP368.1? ? ? 文獻標志碼:A? ? ? ? ? 文章編號:2095-2945(2024)10-0010-04

Abstract: This paper studies the construction of an embedded experimental platform based on Loongson 2K1000 localized CPU and Xilinx Kintex-7 325T FPGA, and the memory copy mode and interrupt handling mode in the XDMA driver are optimized through the embedded software environment and the optimized design of the memory copy mode and interrupt handling mode in the XDMA driver, and the PCIe interface of the 2K1000 is up to 400MB/s to interact with the high-performance data of the FPGA, which meets the high-performance data processing requirements under the localized embedded experimental platform.

Keywords: localization; Loongson; FPGA; embedded system; driver; PCIe

當前,國外在集成電路等優勢行業對我國進行斷供、限制出口,關鍵芯片“卡脖子”問題愈加突出,嚴重影響我國核心基礎高科技產業發展,對國家信息安全造成了威脅。在此背景下,國家提升了對關鍵基礎行業的“自主可控”要求,推進了芯片等基礎行業的國產化發展。在處理器領域,經過數十年的積累,我國發展了一批龍芯、飛騰、申威、兆芯和海思麒麟等國產化CPU[1],基于國產化平臺開展了數字信號處理、網絡安全、機械控制領域的研究。本文結合國產化實驗平臺的建設,完成了基于國產化龍芯2K系列高性能處理平臺構建,深入研究了龍芯2K1000處理器在高性能數據交換性能,為國產化處理器在高性能數據交換領域的應用打下基礎。

1? 高性能嵌入式平臺硬件構建

高性能嵌入式平臺主要用于專業領域,對處理實時性、應用環境復雜性、功耗和安裝尺寸均有更高要求。隨著國產化64位多核嵌入式CPU的應用,大幅度提升了嵌入式平臺的處理性能,有學者[2]開展了面向國產化教學試驗平臺的研制,但對于國產化CPU的性能還沒有深入的研究。為深入挖掘國產化CPU在數字傳輸中的性能,構建通用化的嵌入式處理平臺,滿足高性能處理需求,本文圍繞國產化高性能CPU,通過PCIe總線與FPGA實現高速互聯,構建了高性能國產化高速數據處理平臺,如圖 1所示,并完成FPGA固件及驅動程序開發,打通了FPGA與國產化CPU之間的高速數據傳輸通道,為國產化嵌入式CPU高速數據處理應用奠定了基礎。

1.1? 高性能CPU方案

為降低CPU的復雜度,嵌入式CPU大多采用RISC架構,將復雜處理交給了編譯器,在通道中僅包含了最有用的指令,確保數據通道快速執行每一條指令,提高了執行效率并使CPU硬件結構設計變的更為簡單,主要代表是ARM、MIPS、PowerPC等。國產CPU廠商也主要基于主流的指令集架構進行發展,龍芯、飛騰分別基于MIPS、ARM架構。不同的國產CPU廠商所走的技術路線并不完全相同,指令集授權方式也各有差異,龍芯采用了授權+自研方式的技術路線,飛騰采用了指令集授權方式。授權+自研方式技術難度相對較高,但是自主化程度較高。因此,本文采用了基于龍芯的國產化CPU進行構建。

龍芯系列芯片主要面向信息與工業控制領域,龍芯2號系列為低功耗面向工業控制與終端等領域的通用處理器,主要用于網絡終端、智能裝備[3]?;趯埿鞠盗行酒?,結合嵌入式、高性能、低功耗的應用場景,本文選擇龍芯2K1000處理器構建平臺,該處理具有較強的處理能力、豐富的接口。該處理器的處理能力、高速數據接口能夠支持有較高性能需求的嵌入式應用。

1.2 高性能FPGA方案

針對高性能處理應用場景,需要平臺同時具備較強的邏輯處理能力,FPGA(Filed Programmed Gate Array)是一種可編程邏輯器件,具有支持復雜邏輯的并行處理能力,有豐富的IO資源,使用靈活,可重構,得到了廣泛應用。當前主流的FPGA主要有Altera、Xilinx等,分別被Intel和AMD收購,相對于自主可控CPU的較長積累,國產化FPGA及配套開發軟件研制起步較晚。

FPGA的開發應用不僅依賴FPGA器件及綜合軟件,更重要是需要有完善的IP生態環境,因此本文FPGA選用了Xilinx的中端產品Kintex[4],結合平臺的功耗、處理能力、成本等因素,選擇了Kintex-7 325T,該FPGA有32 KB邏輯資源、4Mb Block Memory、16個GTX與一個PCIe Gen2的硬核,兼顧了性能及成本。

1.3? 高性能數據傳輸接口方案

嵌入式CPU與FPGA之間需要高速數據接口互聯,以滿足高速的數據傳輸需求。常用的高速數據接口有Local Bus總線、PCIe總線甚至還有以太網接口,以實現FPGA與CPU之間的高速數據交換。Local Bus總線接口時序較為簡單直接,通常沒有復雜的上層協議,但交換速率較低,更重要的是不同CPU的Local Bus可能在工作速率、時隙配置上略有差別,不利于平臺的升級與擴展;網絡接口雖然可以達到高速的數據傳輸,但是FPGA對網絡協議包的處理難度大,不利于靈活的數據傳輸應用;PCIe是一種高速串行總線標準,采用差分信號傳輸具有很強的抗干擾性能,同時具有較高的傳輸速率,但接口協議相對復雜,提升了FPGA、驅動開發的難度。綜合考慮擴展性及高性能數據傳輸需求,本文選擇PCIe接口作為FPGA與CPU之間的高速接口。

為進一步降低FPGA程序對PCIe的復雜處理,本文采用了基于Xilinx XDMA的高速數據傳輸。Xilinx提供的XDMA IP core已完成了PCIe的封裝,并支持與AXI、AXI-lite總線的相互轉換[5],需要在FPGA內部實現AXI接口的RAM處理。

如圖2所示,圍繞國產化龍芯2K1000,通過PCIe接口實現了與Xilinx高性能FPGA進行互聯,完成了高性能嵌入式平臺硬件構建。

2? 高性能嵌入式平臺軟件構建

基于高性能嵌入式平臺硬件,需要進一步完成嵌入式軟件運行環境構建,并同時為PCIe傳輸通道開發驅動程序,實現高性能的數據傳輸處理。

2.1? 嵌入式軟件運行環境

嵌入式系統為降低用戶應用軟件開發及維護的復雜度,需要構建嵌入式軟件運行依賴的環境,主要包括BootLoader、內核、根文件系統的移植等。龍芯國產化平臺,支持相對完善的是PMON,在完成交叉編譯后在板上燒寫,主板上電后,PMON完成初始化CPU、內存、總線等設備及對串口、鍵盤、鼠標等外設進行基礎測試等一系列工作,最后進入PMON的顯示字符界面,為系統內核準備必要的環境。

根據龍芯白皮書推薦,本文采用了開源的Linux內核[3],內核裁剪了在Networking support、Divice Driver、Filesystems等子系統中不需要的功能[6]。例如裁剪了本項目不需要的無線網絡,文件系統選用yaffs2。設備驅動也只選擇需要的進行編譯,最終交叉編譯后的內核文件約為4 MB。

本文采用Buildroot工具來實現對文件系統的構建,選擇將常用的系統管理命令、網絡配置和測試工具、內核模塊管理工具以及PCI配置工具生成文件系統。根文件系統是Linux系統啟動時首先掛載的文件系統,其包含了系統啟動所需的所有文件和目錄,如/bin、/etc、/dev、/usr等,這些目錄和子目錄包含了操作系統的關鍵組件以及用戶選擇安裝的應用程序。

2.2? 基于XDMA數據交互程序設計

本文基于XDMA core 來實現PCIe的高速數據交互,軟件架構如圖3所示,整個架構包括了3個層次,來實現對FPGA內部緩存的高速訪問。

用戶空間程序通過系統調用的方式來完成與驅動的交互,應用程序通過poll函數監聽驅動,根據底層驅動提供的傳輸接口發起DMA的讀寫請求。

XDMA驅動程序是整個軟件的核心,是應用與底層硬件交互的橋梁。XDMA驅動程序響應由上層應用發起的系統調用,進一步訪問內核空間的驅動設備。驅動設備具體控制完成對SGDMA的讀寫控制,完成對用戶數據使用的物理頁映射,實現DMA數據傳輸。

在FPGA內部實現了XDMA硬核,XDMA硬核實現了PCIe協議與AXI協議的相互轉化,在FPGA中生成了兼容AXI總線的Block memory并掛載至XDMA硬核上,在XDMA驅動發起DMA讀寫數據操作時,經過XDMA通過AXI接口實現了對FPGA內部緩存的讀寫訪問。

由于在XDMA IP核中支持了多個DMA channel,為了能夠方便調用,為每一個通道的調用都創建一個字符設備驅動,這樣在應用中只需要打開對應的字符設備即可完成對相應部分的操作。另外,為中斷事件的處理、PCIe不同func設備空間的操作都提供一個字符設備驅動來進行操作,實現了較好隔離操作。

PCIe驅動的實現主要是針對pci_driver數據結構進行填充[7]。在驅動加載后會調用probe函數完成初始化,在這個函數流程中完成PCIe設備的檢測、字符設備的創建、DMA通道的初始化等功能,具體的主要流程如圖4所示。

整個傳輸軟件的關鍵在于XDMA驅動中高速數據傳輸、中斷函數的處理,通過對數據拷貝的優化處理、中斷方案的優選,實現了高速數據傳輸。

2.2.1? 基于零拷貝的高速數據交互

對零拷貝進行優化設計,內核態和用戶態共享一片物理內存,用戶態和內核態完成對同一片物理頁的映射,數據在內核空間和用戶空間的大量拷貝工作就可以避免了,進而提升高速數據處理性能。

2.2.2? 基于workqueue的中斷處理

為平衡中斷響應時間及大量數據的處理,將中斷處理分為了中斷頂半部和中斷底半部。在中斷頂半部中,完成盡可能少的比較緊急的功能,其往往只是簡單地讀取寄存器中的中斷狀態快速返回,而將大的數據量處理放到低半部中。底半部主要處理的是實時性要求相對較低但是耗時比較長的工作,主要工作對底半部的處理進行優化。中斷下半部的處理方案主要有4種:內核線程、tasklet、softirq和workqueue[7]。

3種方案的對比見表1,由表1可以看出,工作隊列workqueue的方案,延后工作睡眠可以減少空閑時系統資源的占用,多CPU運行可以最大化利用資源,這些特點在資源緊張的龍芯嵌入式系統中比較關鍵,因此本文選擇工作隊列的方案來實現中斷下半部的處理。

通過對數據拷貝方式、中斷處理方式的優化處理,實現了高性能嵌入式平臺軟件構建,具備了通過PCIe 接口進行高速數據交換的能力。

3性能測試結果與分析

基于高性能嵌入式平臺軟、硬件構建,按照圖5對吞吐量、中斷性能等核心指標進行了測試。針對數據吞吐量的測試主要是下半部分,讀寫程序指定DMA通道和數據長度發起DMA讀寫;中斷性能測試則是分為兩部分,中斷觸發程序配合FPGA用戶中斷產生模塊完成固定中斷的觸發,中斷處理程序則接收中斷并完成數據基于DMA的讀寫。

測試結果表明,隨著一次DMA傳輸數據長度的增加,信道資源帶寬的利用率不斷上升。因而,選擇合適的長度對于高速數據傳輸尤其重要。具體的,在DMA傳輸長度為200KB的的情況下,讀、寫速率分別為420? MB/s、410 MB/s。本PCIe2.0接口的理論速率為500 MB/s,分析其中的原因是為保證傳輸穩定龍芯2K1000上的MPS僅能配置為128 B,但是MPS在512 B才能充分發揮帶寬效率,造成了實際測試結果與理論值的差異。

進一步對龍芯2K1000的中斷性能進行測試,通過FPGA模擬發送周期中斷信號,中斷周期為5 ms,中斷期間完成200 KB數據的讀出,一共測試20萬個中斷。測試結果表明,CPU資源占用3%~5%,內存占用在1%以內,由于對內存及中斷處理進行了優化,因此CPU和內存的占用會比較低,符合預期。中斷漏檢概率在1.0E-5左右,需要在增加確認及超時機制,防止因為中斷漏檢而造成的FPGA緩存溢出。

4結論

本文以龍芯2K1000為核心,通過PCIe高速接口實現了與FPGA數據交互,完成了國產化高性能嵌入式硬件平臺構建,完成了嵌入式軟件環境構建與基于XDMA的高速驅動程序的設計。通過對驅動程序中的內存拷貝方式、中斷處理方式進行優化設計,測試結果表明,該平臺達到了400 MB/s高性能數據傳輸,摸清了龍芯2K1000的處理性能邊界,為國產化嵌入式處理平臺的深入應用奠定了基礎。

參考文獻:

[1] 馬威,姚靜波,常永勝,等.國產CPU發展的現狀與展望[J].集成電路應用,2019,36(4):5-8.

[2] 李曉飛,曲巨寶.“龍芯”實驗平臺在《計算機組成與結構》課程教學實踐中的應用[J].中文科技期刊數據庫(全文版) 教育科學,2021(9):361-363.

[3] 龍芯生態白皮書(2022年)[Z].北京:龍芯中科技術股份有限公司,2023.

[4] 7 Series FPGAs SelectIO Resources User Guide,UG471[Z].San Jose,USA:xilinx,2012.

[5] DMA/Bridge Subsystem for PCI Express v4.1 Product Guide[Z]. San Jose,USA:xilinx,2021.

[6] 楊延軍,王志軍,趙建業,等.嵌入式系統開發原理與實驗[M].北京:北京大學出版社,2011.

[7] JONATHAN C, ALESSANDRO R, GREG K. Linux device drivers[M].OReilly Media,2005.

猜你喜歡
龍芯嵌入式系統國產化
特大型橋梁供電系統國產化改造探討
基于國產化龍芯的動環數據采集系統
元器件國產化推進工作實踐探索
ASM-600油站換熱器的國產化改進
基于國產化ITCS的衛星導航仿真研究
基于物聯網項目驅動的嵌入式系統教學改革的研究與實踐
嵌入式系統課程“中斷、異常與事件”教學實踐及啟示
面向實踐創新人才培養的嵌入式系統教學研究
“龍芯之父”胡偉武
龍芯發布新一代處理器產品
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合