段中雄
摘? 要:該文對基于龍芯2K1000國產(chǎn)化CPU和Xilinx Kintex-7 325T FPGA的嵌入式實(shí)驗(yàn)平臺的構(gòu)建進(jìn)行研究,通過嵌入式軟件環(huán)境和對XDMA驅(qū)動程序中內(nèi)存拷貝方式、中斷處理方式進(jìn)行優(yōu)化設(shè)計,實(shí)現(xiàn)2K1000的PCIe接口高達(dá)400 MB/s與FPGA的高性能數(shù)據(jù)交互,滿足在國產(chǎn)化嵌入式實(shí)驗(yàn)平臺下的高性能數(shù)據(jù)處理需求。
關(guān)鍵詞:國產(chǎn)化;龍芯;FPGA;嵌入式系統(tǒng);驅(qū)動;PCIe
中圖分類號:TP368.1? ? ? 文獻(xiàn)標(biāo)志碼: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
當(dāng)前,國外在集成電路等優(yōu)勢行業(yè)對我國進(jìn)行斷供、限制出口,關(guān)鍵芯片“卡脖子”問題愈加突出,嚴(yán)重影響我國核心基礎(chǔ)高科技產(chǎn)業(yè)發(fā)展,對國家信息安全造成了威脅。在此背景下,國家提升了對關(guān)鍵基礎(chǔ)行業(yè)的“自主可控”要求,推進(jìn)了芯片等基礎(chǔ)行業(yè)的國產(chǎn)化發(fā)展。在處理器領(lǐng)域,經(jīng)過數(shù)十年的積累,我國發(fā)展了一批龍芯、飛騰、申威、兆芯和海思麒麟等國產(chǎn)化CPU[1],基于國產(chǎn)化平臺開展了數(shù)字信號處理、網(wǎng)絡(luò)安全、機(jī)械控制領(lǐng)域的研究。本文結(jié)合國產(chǎn)化實(shí)驗(yàn)平臺的建設(shè),完成了基于國產(chǎn)化龍芯2K系列高性能處理平臺構(gòu)建,深入研究了龍芯2K1000處理器在高性能數(shù)據(jù)交換性能,為國產(chǎn)化處理器在高性能數(shù)據(jù)交換領(lǐng)域的應(yīng)用打下基礎(chǔ)。
1? 高性能嵌入式平臺硬件構(gòu)建
高性能嵌入式平臺主要用于專業(yè)領(lǐng)域,對處理實(shí)時性、應(yīng)用環(huán)境復(fù)雜性、功耗和安裝尺寸均有更高要求。隨著國產(chǎn)化64位多核嵌入式CPU的應(yīng)用,大幅度提升了嵌入式平臺的處理性能,有學(xué)者[2]開展了面向國產(chǎn)化教學(xué)試驗(yàn)平臺的研制,但對于國產(chǎn)化CPU的性能還沒有深入的研究。為深入挖掘國產(chǎn)化CPU在數(shù)字傳輸中的性能,構(gòu)建通用化的嵌入式處理平臺,滿足高性能處理需求,本文圍繞國產(chǎn)化高性能CPU,通過PCIe總線與FPGA實(shí)現(xiàn)高速互聯(lián),構(gòu)建了高性能國產(chǎn)化高速數(shù)據(jù)處理平臺,如圖 1所示,并完成FPGA固件及驅(qū)動程序開發(fā),打通了FPGA與國產(chǎn)化CPU之間的高速數(shù)據(jù)傳輸通道,為國產(chǎn)化嵌入式CPU高速數(shù)據(jù)處理應(yīng)用奠定了基礎(chǔ)。
1.1? 高性能CPU方案
為降低CPU的復(fù)雜度,嵌入式CPU大多采用RISC架構(gòu),將復(fù)雜處理交給了編譯器,在通道中僅包含了最有用的指令,確保數(shù)據(jù)通道快速執(zhí)行每一條指令,提高了執(zhí)行效率并使CPU硬件結(jié)構(gòu)設(shè)計變的更為簡單,主要代表是ARM、MIPS、PowerPC等。國產(chǎn)CPU廠商也主要基于主流的指令集架構(gòu)進(jìn)行發(fā)展,龍芯、飛騰分別基于MIPS、ARM架構(gòu)。不同的國產(chǎn)CPU廠商所走的技術(shù)路線并不完全相同,指令集授權(quán)方式也各有差異,龍芯采用了授權(quán)+自研方式的技術(shù)路線,飛騰采用了指令集授權(quán)方式。授權(quán)+自研方式技術(shù)難度相對較高,但是自主化程度較高。因此,本文采用了基于龍芯的國產(chǎn)化CPU進(jìn)行構(gòu)建。
龍芯系列芯片主要面向信息與工業(yè)控制領(lǐng)域,龍芯2號系列為低功耗面向工業(yè)控制與終端等領(lǐng)域的通用處理器,主要用于網(wǎng)絡(luò)終端、智能裝備[3]。基于對龍芯系列芯片,結(jié)合嵌入式、高性能、低功耗的應(yīng)用場景,本文選擇龍芯2K1000處理器構(gòu)建平臺,該處理具有較強(qiáng)的處理能力、豐富的接口。該處理器的處理能力、高速數(shù)據(jù)接口能夠支持有較高性能需求的嵌入式應(yīng)用。
1.2 高性能FPGA方案
針對高性能處理應(yīng)用場景,需要平臺同時具備較強(qiáng)的邏輯處理能力,F(xiàn)PGA(Filed Programmed Gate Array)是一種可編程邏輯器件,具有支持復(fù)雜邏輯的并行處理能力,有豐富的IO資源,使用靈活,可重構(gòu),得到了廣泛應(yīng)用。當(dāng)前主流的FPGA主要有Altera、Xilinx等,分別被Intel和AMD收購,相對于自主可控CPU的較長積累,國產(chǎn)化FPGA及配套開發(fā)軟件研制起步較晚。
FPGA的開發(fā)應(yīng)用不僅依賴FPGA器件及綜合軟件,更重要是需要有完善的IP生態(tài)環(huán)境,因此本文FPGA選用了Xilinx的中端產(chǎn)品Kintex[4],結(jié)合平臺的功耗、處理能力、成本等因素,選擇了Kintex-7 325T,該FPGA有32 KB邏輯資源、4Mb Block Memory、16個GTX與一個PCIe Gen2的硬核,兼顧了性能及成本。
1.3? 高性能數(shù)據(jù)傳輸接口方案
嵌入式CPU與FPGA之間需要高速數(shù)據(jù)接口互聯(lián),以滿足高速的數(shù)據(jù)傳輸需求。常用的高速數(shù)據(jù)接口有Local Bus總線、PCIe總線甚至還有以太網(wǎng)接口,以實(shí)現(xiàn)FPGA與CPU之間的高速數(shù)據(jù)交換。Local Bus總線接口時序較為簡單直接,通常沒有復(fù)雜的上層協(xié)議,但交換速率較低,更重要的是不同CPU的Local Bus可能在工作速率、時隙配置上略有差別,不利于平臺的升級與擴(kuò)展;網(wǎng)絡(luò)接口雖然可以達(dá)到高速的數(shù)據(jù)傳輸,但是FPGA對網(wǎng)絡(luò)協(xié)議包的處理難度大,不利于靈活的數(shù)據(jù)傳輸應(yīng)用;PCIe是一種高速串行總線標(biāo)準(zhǔn),采用差分信號傳輸具有很強(qiáng)的抗干擾性能,同時具有較高的傳輸速率,但接口協(xié)議相對復(fù)雜,提升了FPGA、驅(qū)動開發(fā)的難度。綜合考慮擴(kuò)展性及高性能數(shù)據(jù)傳輸需求,本文選擇PCIe接口作為FPGA與CPU之間的高速接口。
為進(jìn)一步降低FPGA程序?qū)CIe的復(fù)雜處理,本文采用了基于Xilinx XDMA的高速數(shù)據(jù)傳輸。Xilinx提供的XDMA IP core已完成了PCIe的封裝,并支持與AXI、AXI-lite總線的相互轉(zhuǎn)換[5],需要在FPGA內(nèi)部實(shí)現(xiàn)AXI接口的RAM處理。
如圖2所示,圍繞國產(chǎn)化龍芯2K1000,通過PCIe接口實(shí)現(xiàn)了與Xilinx高性能FPGA進(jìn)行互聯(lián),完成了高性能嵌入式平臺硬件構(gòu)建。
2? 高性能嵌入式平臺軟件構(gòu)建
基于高性能嵌入式平臺硬件,需要進(jìn)一步完成嵌入式軟件運(yùn)行環(huán)境構(gòu)建,并同時為PCIe傳輸通道開發(fā)驅(qū)動程序,實(shí)現(xiàn)高性能的數(shù)據(jù)傳輸處理。
2.1? 嵌入式軟件運(yùn)行環(huán)境
嵌入式系統(tǒng)為降低用戶應(yīng)用軟件開發(fā)及維護(hù)的復(fù)雜度,需要構(gòu)建嵌入式軟件運(yùn)行依賴的環(huán)境,主要包括BootLoader、內(nèi)核、根文件系統(tǒng)的移植等。龍芯國產(chǎn)化平臺,支持相對完善的是PMON,在完成交叉編譯后在板上燒寫,主板上電后,PMON完成初始化CPU、內(nèi)存、總線等設(shè)備及對串口、鍵盤、鼠標(biāo)等外設(shè)進(jìn)行基礎(chǔ)測試等一系列工作,最后進(jìn)入PMON的顯示字符界面,為系統(tǒng)內(nèi)核準(zhǔn)備必要的環(huán)境。
根據(jù)龍芯白皮書推薦,本文采用了開源的Linux內(nèi)核[3],內(nèi)核裁剪了在Networking support、Divice Driver、Filesystems等子系統(tǒng)中不需要的功能[6]。例如裁剪了本項(xiàng)目不需要的無線網(wǎng)絡(luò),文件系統(tǒng)選用yaffs2。設(shè)備驅(qū)動也只選擇需要的進(jìn)行編譯,最終交叉編譯后的內(nèi)核文件約為4 MB。
本文采用Buildroot工具來實(shí)現(xiàn)對文件系統(tǒng)的構(gòu)建,選擇將常用的系統(tǒng)管理命令、網(wǎng)絡(luò)配置和測試工具、內(nèi)核模塊管理工具以及PCI配置工具生成文件系統(tǒng)。根文件系統(tǒng)是Linux系統(tǒng)啟動時首先掛載的文件系統(tǒng),其包含了系統(tǒng)啟動所需的所有文件和目錄,如/bin、/etc、/dev、/usr等,這些目錄和子目錄包含了操作系統(tǒng)的關(guān)鍵組件以及用戶選擇安裝的應(yīng)用程序。
2.2? 基于XDMA數(shù)據(jù)交互程序設(shè)計
本文基于XDMA core 來實(shí)現(xiàn)PCIe的高速數(shù)據(jù)交互,軟件架構(gòu)如圖3所示,整個架構(gòu)包括了3個層次,來實(shí)現(xiàn)對FPGA內(nèi)部緩存的高速訪問。
用戶空間程序通過系統(tǒng)調(diào)用的方式來完成與驅(qū)動的交互,應(yīng)用程序通過poll函數(shù)監(jiān)聽驅(qū)動,根據(jù)底層驅(qū)動提供的傳輸接口發(fā)起DMA的讀寫請求。
XDMA驅(qū)動程序是整個軟件的核心,是應(yīng)用與底層硬件交互的橋梁。XDMA驅(qū)動程序響應(yīng)由上層應(yīng)用發(fā)起的系統(tǒng)調(diào)用,進(jìn)一步訪問內(nèi)核空間的驅(qū)動設(shè)備。驅(qū)動設(shè)備具體控制完成對SGDMA的讀寫控制,完成對用戶數(shù)據(jù)使用的物理頁映射,實(shí)現(xiàn)DMA數(shù)據(jù)傳輸。
在FPGA內(nèi)部實(shí)現(xiàn)了XDMA硬核,XDMA硬核實(shí)現(xiàn)了PCIe協(xié)議與AXI協(xié)議的相互轉(zhuǎn)化,在FPGA中生成了兼容AXI總線的Block memory并掛載至XDMA硬核上,在XDMA驅(qū)動發(fā)起DMA讀寫數(shù)據(jù)操作時,經(jīng)過XDMA通過AXI接口實(shí)現(xiàn)了對FPGA內(nèi)部緩存的讀寫訪問。
由于在XDMA IP核中支持了多個DMA channel,為了能夠方便調(diào)用,為每一個通道的調(diào)用都創(chuàng)建一個字符設(shè)備驅(qū)動,這樣在應(yīng)用中只需要打開對應(yīng)的字符設(shè)備即可完成對相應(yīng)部分的操作。另外,為中斷事件的處理、PCIe不同func設(shè)備空間的操作都提供一個字符設(shè)備驅(qū)動來進(jìn)行操作,實(shí)現(xiàn)了較好隔離操作。
PCIe驅(qū)動的實(shí)現(xiàn)主要是針對pci_driver數(shù)據(jù)結(jié)構(gòu)進(jìn)行填充[7]。在驅(qū)動加載后會調(diào)用probe函數(shù)完成初始化,在這個函數(shù)流程中完成PCIe設(shè)備的檢測、字符設(shè)備的創(chuàng)建、DMA通道的初始化等功能,具體的主要流程如圖4所示。
整個傳輸軟件的關(guān)鍵在于XDMA驅(qū)動中高速數(shù)據(jù)傳輸、中斷函數(shù)的處理,通過對數(shù)據(jù)拷貝的優(yōu)化處理、中斷方案的優(yōu)選,實(shí)現(xiàn)了高速數(shù)據(jù)傳輸。
2.2.1? 基于零拷貝的高速數(shù)據(jù)交互
對零拷貝進(jìn)行優(yōu)化設(shè)計,內(nèi)核態(tài)和用戶態(tài)共享一片物理內(nèi)存,用戶態(tài)和內(nèi)核態(tài)完成對同一片物理頁的映射,數(shù)據(jù)在內(nèi)核空間和用戶空間的大量拷貝工作就可以避免了,進(jìn)而提升高速數(shù)據(jù)處理性能。
2.2.2? 基于workqueue的中斷處理
為平衡中斷響應(yīng)時間及大量數(shù)據(jù)的處理,將中斷處理分為了中斷頂半部和中斷底半部。在中斷頂半部中,完成盡可能少的比較緊急的功能,其往往只是簡單地讀取寄存器中的中斷狀態(tài)快速返回,而將大的數(shù)據(jù)量處理放到低半部中。底半部主要處理的是實(shí)時性要求相對較低但是耗時比較長的工作,主要工作對底半部的處理進(jìn)行優(yōu)化。中斷下半部的處理方案主要有4種:內(nèi)核線程、tasklet、softirq和workqueue[7]。
3種方案的對比見表1,由表1可以看出,工作隊列workqueue的方案,延后工作睡眠可以減少空閑時系統(tǒng)資源的占用,多CPU運(yùn)行可以最大化利用資源,這些特點(diǎn)在資源緊張的龍芯嵌入式系統(tǒng)中比較關(guān)鍵,因此本文選擇工作隊列的方案來實(shí)現(xiàn)中斷下半部的處理。
通過對數(shù)據(jù)拷貝方式、中斷處理方式的優(yōu)化處理,實(shí)現(xiàn)了高性能嵌入式平臺軟件構(gòu)建,具備了通過PCIe 接口進(jìn)行高速數(shù)據(jù)交換的能力。
3性能測試結(jié)果與分析
基于高性能嵌入式平臺軟、硬件構(gòu)建,按照圖5對吞吐量、中斷性能等核心指標(biāo)進(jìn)行了測試。針對數(shù)據(jù)吞吐量的測試主要是下半部分,讀寫程序指定DMA通道和數(shù)據(jù)長度發(fā)起DMA讀寫;中斷性能測試則是分為兩部分,中斷觸發(fā)程序配合FPGA用戶中斷產(chǎn)生模塊完成固定中斷的觸發(fā),中斷處理程序則接收中斷并完成數(shù)據(jù)基于DMA的讀寫。
測試結(jié)果表明,隨著一次DMA傳輸數(shù)據(jù)長度的增加,信道資源帶寬的利用率不斷上升。因而,選擇合適的長度對于高速數(shù)據(jù)傳輸尤其重要。具體的,在DMA傳輸長度為200KB的的情況下,讀、寫速率分別為420? MB/s、410 MB/s。本PCIe2.0接口的理論速率為500 MB/s,分析其中的原因是為保證傳輸穩(wěn)定龍芯2K1000上的MPS僅能配置為128 B,但是MPS在512 B才能充分發(fā)揮帶寬效率,造成了實(shí)際測試結(jié)果與理論值的差異。
進(jìn)一步對龍芯2K1000的中斷性能進(jìn)行測試,通過FPGA模擬發(fā)送周期中斷信號,中斷周期為5 ms,中斷期間完成200 KB數(shù)據(jù)的讀出,一共測試20萬個中斷。測試結(jié)果表明,CPU資源占用3%~5%,內(nèi)存占用在1%以內(nèi),由于對內(nèi)存及中斷處理進(jìn)行了優(yōu)化,因此CPU和內(nèi)存的占用會比較低,符合預(yù)期。中斷漏檢概率在1.0E-5左右,需要在增加確認(rèn)及超時機(jī)制,防止因?yàn)橹袛嗦z而造成的FPGA緩存溢出。
4結(jié)論
本文以龍芯2K1000為核心,通過PCIe高速接口實(shí)現(xiàn)了與FPGA數(shù)據(jù)交互,完成了國產(chǎn)化高性能嵌入式硬件平臺構(gòu)建,完成了嵌入式軟件環(huán)境構(gòu)建與基于XDMA的高速驅(qū)動程序的設(shè)計。通過對驅(qū)動程序中的內(nèi)存拷貝方式、中斷處理方式進(jìn)行優(yōu)化設(shè)計,測試結(jié)果表明,該平臺達(dá)到了400 MB/s高性能數(shù)據(jù)傳輸,摸清了龍芯2K1000的處理性能邊界,為國產(chǎn)化嵌入式處理平臺的深入應(yīng)用奠定了基礎(chǔ)。
參考文獻(xiàn):
[1] 馬威,姚靜波,常永勝,等.國產(chǎn)CPU發(fā)展的現(xiàn)狀與展望[J].集成電路應(yīng)用,2019,36(4):5-8.
[2] 李曉飛,曲巨寶.“龍芯”實(shí)驗(yàn)平臺在《計算機(jī)組成與結(jié)構(gòu)》課程教學(xué)實(shí)踐中的應(yīng)用[J].中文科技期刊數(shù)據(jù)庫(全文版) 教育科學(xué),2021(9):361-363.
[3] 龍芯生態(tài)白皮書(2022年)[Z].北京:龍芯中科技術(shù)股份有限公司,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] 楊延軍,王志軍,趙建業(yè),等.嵌入式系統(tǒng)開發(fā)原理與實(shí)驗(yàn)[M].北京:北京大學(xué)出版社,2011.
[7] JONATHAN C, ALESSANDRO R, GREG K. Linux device drivers[M].OReilly Media,2005.