齊 樂 常軼松,2 陳欲曉,2 張 旭,2 陳明宇,2 包云崗,2 張 科,2
1 (處理器芯片全國重點(diǎn)實(shí)驗(yàn)室(中國科學(xué)院計(jì)算技術(shù)研究所)北京 100190)
2 (中國科學(xué)院大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 北京 100049)
敏捷開發(fā)最初是指以用戶的需求進(jìn)化為核心,采用迭代、循序漸進(jìn)的方法進(jìn)行軟件開發(fā).而近年來隨著當(dāng)今處理器核心設(shè)計(jì)需求的多樣性與復(fù)雜性不斷增加,一些前沿領(lǐng)域的芯片設(shè)計(jì)團(tuán)隊(duì)也開始嘗試借鑒敏捷開發(fā)的思想[1-3].處理器芯片設(shè)計(jì)在投片前,需要基于近似真實(shí)的硬件環(huán)境,敏捷地進(jìn)行軟硬件系統(tǒng)定義、集成和試錯(cuò),開展軟硬件系統(tǒng)級評估.
在早期的處理器開發(fā)流程中,由于對硬件的依賴,處理器相關(guān)軟件的開發(fā)和驗(yàn)證需要穩(wěn)定的硬件原型,這種硬件開發(fā)和軟件開發(fā)之間的串行性在一定程度上降低了整體的開發(fā)與迭代效率.為了縮短開發(fā)周期,軟硬件協(xié)同開發(fā)[4]的思路被提出.軟硬件協(xié)同開發(fā)在設(shè)計(jì)初期將系統(tǒng)功能進(jìn)行軟件和硬件的劃分,隨后軟件和硬件的開發(fā)并行進(jìn)行,驗(yàn)證階段采用軟硬件協(xié)同驗(yàn)證的方式.軟硬件協(xié)同驗(yàn)證是一種對軟硬件設(shè)計(jì)同時(shí)進(jìn)行驗(yàn)證的方法,要求在驗(yàn)證框架下搭建待驗(yàn)證硬件環(huán)境并運(yùn)行待驗(yàn)證軟件,運(yùn)行過程中軟硬件的行為可以彼此提供測試向量,從而將驗(yàn)證工作并行化,縮短驗(yàn)證時(shí)間.同時(shí),軟件應(yīng)根據(jù)硬件配置進(jìn)行設(shè)計(jì),綜合啟動(dòng)引導(dǎo)固件、操作系統(tǒng)、應(yīng)用程序等各層次的代碼,組織成完整的軟件棧.隨著硬件設(shè)計(jì)的規(guī)模逐漸擴(kuò)大,軟件棧需要跟蹤各種硬件接口(時(shí)鐘與復(fù)位邏輯、訪存接口、各類對外通信設(shè)備等)的準(zhǔn)確版本以及從固件到用戶級應(yīng)用程序的特性和功能,因此軟件棧的開發(fā)和測試變得更加復(fù)雜.設(shè)計(jì)復(fù)雜性的不斷增加對實(shí)驗(yàn)和研究軟件工作負(fù)載的管理提出了挑戰(zhàn).
處理器設(shè)計(jì)的系統(tǒng)性改進(jìn)升級可能涉及修改任何層次代碼,包括從低級電路的硬件描述代碼到操作系統(tǒng)和應(yīng)用程序的軟件代碼.綜上所述,處理器設(shè)計(jì)團(tuán)隊(duì)需要一個(gè)硬件和軟件完全集成的原型驗(yàn)證系統(tǒng).全系統(tǒng)級驗(yàn)證是對軟件或硬件合作的嘗試.系統(tǒng)級驗(yàn)證指對系統(tǒng)層面的硬件設(shè)計(jì)進(jìn)行驗(yàn)證,驗(yàn)證對象通常是軟硬件整體.系統(tǒng)級驗(yàn)證的方法主要采用對軟硬件整體仿真或模擬的方法,如搭建現(xiàn)場可編程門陣列(field programmable gate array,F(xiàn)PGA)原型系統(tǒng)進(jìn)行驗(yàn)證,就是一種目前業(yè)界廣泛采用的基于可編程硬件模擬的方法.近年來,由于FPGA 器件成本的下降和邏輯資源規(guī)模的提升,加上FPGA 本身與真實(shí)電路的近似性,F(xiàn)PGA 原型驗(yàn)證作為系統(tǒng)級驗(yàn)證的一種方式,其優(yōu)勢愈加明顯.
現(xiàn)有的系統(tǒng)級原型驗(yàn)證平臺(tái)主要基于通用型FPGA 器件.通用型FPGA 器件以提供可編程邏輯資源為目標(biāo),幾乎不包含硬核,設(shè)計(jì)流程上主要通過FPGA制造商提供的電子設(shè)計(jì)自動(dòng)化(electronics design automation,EDA)支持工具來構(gòu)建設(shè)計(jì)并配置器件,從而構(gòu)建FPGA 原型系統(tǒng).各制造商的FPGA 開發(fā)過程基本相同,但開發(fā)過程往往涉及工程方面的繁雜細(xì)節(jié).在基于傳統(tǒng)通用型FPGA 的原型驗(yàn)證中,除了需要測試的處理器核部署在FPGA 上之外,還需要實(shí)現(xiàn)一些基本的內(nèi)存訪問接口和I/O 外設(shè)(包括但不限于網(wǎng)絡(luò)接口、串行端口、USB、SD/MMC 等).沒有FPGA 開發(fā)經(jīng)驗(yàn)的人需要相當(dāng)長的時(shí)間來學(xué)習(xí)掌握,技術(shù)門檻較高.這些接口的實(shí)現(xiàn)本身也需要占用FPGA 的大量片上邏輯資源,從而擠壓待測試的處理器核心的布局和布線自由度空間,帶來時(shí)序違例等問題.此外由于芯片底層實(shí)現(xiàn)工藝的原因,相較于專用集成電路(application specific integrated circuit,ASIC),通用型FPGA 的原型驗(yàn)證場景中處理器核的運(yùn)行頻率低,執(zhí)行一些計(jì)算密集型任務(wù)往往需要消耗相當(dāng)長的時(shí)間,而這些等待時(shí)間也會(huì)間接影響到處理器的驗(yàn)證流程.
基于面向開放RISC-V 指令集[5]的開源處理器在近年來受到廣泛關(guān)注.隨著開源芯片社區(qū)的不斷發(fā)展和成熟,處理器內(nèi)部的一些典型基礎(chǔ)邏輯功能模塊也在歷經(jīng)多次流片驗(yàn)證后趨于穩(wěn)定,這些基礎(chǔ)模塊在未來爆發(fā)大規(guī)模邏輯錯(cuò)誤和設(shè)計(jì)缺陷的可能性已大幅度降低。然而,隨著系統(tǒng)整體復(fù)雜度的不斷提升,目前的處理器集成了越來越多的基礎(chǔ)模塊部件,因此,未來不僅需要開展面向傳統(tǒng)RTL(register transfer logic)邏輯設(shè)計(jì)描述和門級電路的仿真測試,更需要一種快速構(gòu)建軟硬件原型的平臺(tái)和方法,以盡快開展系統(tǒng)級測試評估.設(shè)計(jì)團(tuán)隊(duì)亟需一種利用開源IP 快速構(gòu)建硅前系統(tǒng)級平臺(tái)的方法,盡快開展硅前硬件糾錯(cuò)和軟件調(diào)試工作.
隨著片上系統(tǒng)(system-on-a-chip,SoC[6])技術(shù)的演進(jìn),出現(xiàn)了在同一芯片上集成FPGA 可編程邏輯(programmable logic,PL)和硬核處理系統(tǒng)(processing system,PS)的新型SoC-FPGA[7]器件.以Xilinx 的Zynq-7000/MPSoC 為例,其硬核處理系統(tǒng)部分是一個(gè)以ARM 處理器硬核為核心的SoC,它包含硬核ARM 處理器、平臺(tái)管理單元(platform management unit,PMU)協(xié)處理器及各類豐富的外設(shè)接口資源.SoC-FPGA 可以認(rèn)為是ASIC 器件與傳統(tǒng)FPGA 器件的互補(bǔ),將一些廣泛使用的標(biāo)準(zhǔn)化處理器核與外設(shè)接口以硬核的形式直接提供給開發(fā)者復(fù)用.
如何充分利用SoC-FPGA 提供的各類外設(shè)接口及算力資源,為開源RISC-V 處理器核提供一套敏捷易用的原型驗(yàn)證環(huán)境,以更好地開展軟硬件全系統(tǒng)評估工作,是本文著力解決的問題.
FireMarshal[8]是一個(gè)用在全棧SoC 上創(chuàng)建和共享可復(fù)制和可重復(fù)實(shí)驗(yàn)的軟件工件的工具.用戶可以將配置項(xiàng)寫入JSON 文件,以快速生成所需的所有級別的軟件棧.然而,F(xiàn)ireMarshal 側(cè)重于RISC-V 軟件系統(tǒng)的自動(dòng)化生成,在硬件上依賴FireSim[9]仿真加速平臺(tái),尚未充分考慮如何為RISC-V 處理器的完整軟硬件系統(tǒng)級驗(yàn)證提供豐富的I/O 外設(shè)接口.
Freedom[10]是SiFive 設(shè)計(jì)的一個(gè)平臺(tái),用于將特定的RISC-V 核——Rocketchip[11]部署到傳統(tǒng)通用型FPGA 設(shè)備,為設(shè)計(jì)者提供一套典型的RISC-V SoC參考系統(tǒng).雖然Freedom 開源代碼倉庫中提供了一些簡單I/O 接口的使用方法,但接口類型和功能極為有限,不能滿足目標(biāo)處理器軟硬件系統(tǒng)的完整驗(yàn)證需求.此外,F(xiàn)reedom 提供的I/O 接口可選擇使用Xilinx FPGA 開發(fā)工具中提供的IP,但這些IP 核仍需要以邏輯電路的形式被部署在FPGA 上,占用待驗(yàn)證處理器需要的邏輯資源.
ESP[12]是用于異構(gòu)SoC 設(shè)計(jì)的開源研究平臺(tái).ESP體系結(jié)構(gòu)具有高度可擴(kuò)展性,并在規(guī)則性和專業(yè)性之間取得平衡.伴隨的方法提高了系統(tǒng)級設(shè)計(jì)的抽象級別,并支持從軟件和硬件開發(fā)到FPGA 上的全系統(tǒng)原型的自動(dòng)化過程.對于應(yīng)用程序開發(fā)人員,ESP提供面向特定領(lǐng)域的自動(dòng)化解決方案,為其軟件合成新的加速器,并將復(fù)雜的工作負(fù)載映射到SoC 架構(gòu)上.對于硬件工程師來說,ESP 提供了將加速器設(shè)計(jì)集成到完整SoC 中的自動(dòng)化解決方案.
國內(nèi)也有團(tuán)隊(duì)開始探索基于SoC-FPGA 構(gòu)建RISCV 處理器的測試系統(tǒng)[13].其基本思路是通過對RISCV 發(fā)起的外設(shè)地址訪問請求進(jìn)行捕獲,將RISC-V 處理器通過AXI 外設(shè)控制總線對外設(shè)控制器訪問產(chǎn)生的相應(yīng)數(shù)據(jù)轉(zhuǎn)存,最終通過串口打印.然而該方法僅能對RISC-V 處理器的外設(shè)訪問通路進(jìn)行相關(guān)訪問數(shù)據(jù)記錄的收集,轉(zhuǎn)存機(jī)制本身也難以保證數(shù)據(jù)交互的實(shí)時(shí)性,同時(shí)也未考慮對復(fù)雜高速DMA 外設(shè)的訪問支持還無法滿足完整的系統(tǒng)級驗(yàn)證需求.
綜上,盡管國內(nèi)外已開始重視RISC-V 有關(guān)的軟硬件協(xié)同驗(yàn)證系統(tǒng),但主要沿用傳統(tǒng)的通用型FPGA模式,測試待驗(yàn)證處理器所需的接口通常需要直接在FPGA 上實(shí)現(xiàn).特別是對于一些高速接口,即使能夠應(yīng)用Xilinx 或第三方公司提供的IP 核保證功能可靠,但這些IP 核需要占用大量的邏輯資源,基于Xilinx ZynqMP ZU2EG 系列器件測得的各IP 以默認(rèn)配置設(shè)置時(shí)所需的邏輯資源數(shù)量與所占總邏輯資源的比例,如表1 所示.而目前基于SoC-FPGA 構(gòu)建RISC-V 處理器測試系統(tǒng)的技術(shù)嘗試,尚存在一定的局限性.
Table 1 Logical Resources Required by the IP of Several Peripheral Interfaces表1 若干外設(shè)接口IP 所需的邏輯資源
針對傳統(tǒng)通用型FPGA 在構(gòu)建復(fù)雜系統(tǒng)方面的這些缺點(diǎn),本文面向RISC-V 處理器提出了一種基于SoC-FPGA 的RISC-V 處理器軟硬件系統(tǒng)級平臺(tái).該平臺(tái)充分發(fā)掘可編程SoC-FPGA 軟硬件協(xié)同可編程的潛力,通過構(gòu)建各級硬件和軟件的設(shè)計(jì),使部署在硬件可編程邏輯部分的待驗(yàn)證目標(biāo)RISC-V 處理器核能夠充分利用硬核SoC 側(cè)的I/O 外設(shè)資源,并與ARM 硬核處理器進(jìn)行協(xié)同,以獲得較好的仿真驗(yàn)證效果.最后,通過與一系列定制化軟硬件自動(dòng)化設(shè)計(jì)框架,用戶只需提供幾個(gè)關(guān)鍵參數(shù)即可自動(dòng)生成可在SoC-FPGA 上部署的目標(biāo)RISC-V 開源處理器軟硬件鏡像文件,降低原型驗(yàn)證環(huán)境的構(gòu)建開銷.
如圖1 所示,待測RISC-V 軟核處理器位于可編程邏輯側(cè),可通過不同類型的總線接口(訪存接口和外設(shè)接口)訪問ARM 硬核SoC 側(cè)的內(nèi)存與I/O 外設(shè)資源;同時(shí)I/O 外設(shè)可通過一致性接口向RISC-V 可見內(nèi)存發(fā)起DMA 訪問.此外,為了提高驗(yàn)證平臺(tái)在軟硬件各個(gè)層次上的兼容性,本文提出一種基于Mailbox 模塊的軟硬件協(xié)同的驗(yàn)證平臺(tái)設(shè)計(jì)框架,通過RISC-V 軟核與ARM 硬核對Mailbox 模塊的共享訪問,實(shí)現(xiàn)硬核處理器對RISC-V 處理器軟硬件驗(yàn)證的高效協(xié)同.
Fig.1 Overall schematic diagram of prototype verification platform based on SoC-FPGA圖1 基于SoC-FPGA 的原型驗(yàn)證平臺(tái)總體示意圖
完整的軟硬件協(xié)同驗(yàn)證需要待測試RISC-V 處理器核與各種總線接口之間進(jìn)行頻繁交互.一些特定的測試數(shù)據(jù)、測試結(jié)果也需要通過相關(guān)的總線接口與待驗(yàn)證處理器進(jìn)行傳輸.
在驗(yàn)證平臺(tái)框架中如圖1 所示,待驗(yàn)證的RISCV 處理器核主要包含3 類總線接口,分別為訪存接口、一致性接口和外設(shè)接口,其中外設(shè)接口一般使用內(nèi)存映射輸入輸出(memory-mapped I/O,MMIO)的方式工作.為了充分利用硬核處理系統(tǒng)側(cè)的各項(xiàng)資源,本文將可編程邏輯側(cè)待驗(yàn)證處理器的MMIO 接口連接到硬核處理系統(tǒng)端,并允許待驗(yàn)證處理器訪問硬核處理系統(tǒng)端的各種I/O 外設(shè);將待驗(yàn)證處理器通過訪存接口訪問硬核處理系統(tǒng)側(cè)的內(nèi)存控制器.一些具有大量通信數(shù)據(jù)的外設(shè)設(shè)備,如用于訪問SD/MMC便攜存儲(chǔ)設(shè)備的安全數(shù)字輸入輸出(secure digital input and output,SDIO)接口和以太網(wǎng),其DMA 交互接口也與待驗(yàn)證處理器的緩存一致性接口連接.此外,Mailbox 模塊可以像普通外設(shè)一樣由MMIO 接口直接尋址訪問,為可編程邏輯側(cè)的待驗(yàn)證處理器提供了一種間接訪問PMU 的方式在ARM 處理器的算力協(xié)助工作中發(fā)揮重要作用.
硬核處理系統(tǒng)[14]中的UART、SDIO、網(wǎng)絡(luò)等外設(shè)既可以被可編程邏輯中的待驗(yàn)證處理器通過接口訪問,也可以被硬核處理系統(tǒng)中的ARM 處理器訪問,但不應(yīng)該被二者同時(shí)占用.在驗(yàn)證平臺(tái)啟動(dòng)過程中,首先由ARM 處理器完成平臺(tái)初始化和引導(dǎo)文件加載工作,之后各外設(shè)的控制權(quán)被移交給待驗(yàn)證處理器,以實(shí)現(xiàn)外設(shè)資源的復(fù)用.各外設(shè)資源在平臺(tái)啟動(dòng)過程中的使用情況為:
1)UART 接口.在驗(yàn)證平臺(tái)啟動(dòng)期間,ARM 處理器和待驗(yàn)證處理器的各個(gè)啟動(dòng)階段的日志信息,以及掛載文件系統(tǒng)后的交互都可以通過UART 接口完成輸入輸出.
2)SDIO 接口.在基于SD 卡的引導(dǎo)模式下,ARM和待驗(yàn)證處理器引導(dǎo)文件都需要從SD 卡移動(dòng)到內(nèi)存.啟動(dòng)Linux 內(nèi)核后,待驗(yàn)證處理器還可能需要在SD 卡分區(qū)上掛載發(fā)行版文件系統(tǒng),也需要訪問SDIO接口.
3)網(wǎng)絡(luò).在基于網(wǎng)絡(luò)的啟動(dòng)模式下,ARM 和待驗(yàn)證處理器都需要從網(wǎng)絡(luò)的遠(yuǎn)端服務(wù)器讀取啟動(dòng)鏡像文件到內(nèi)存.啟動(dòng)Linux 內(nèi)核后,待驗(yàn)證處理器還可能需要在網(wǎng)絡(luò)文件系統(tǒng)(network file system,NFS)服務(wù)器上掛載發(fā)行版文件系統(tǒng),這也需要訪問網(wǎng)絡(luò)接口.
值得注意的是,由于ARM 處理器在通電和啟動(dòng)的初始階段僅暫時(shí)使用SDIO 或網(wǎng)絡(luò)接口,一旦開始執(zhí)行服務(wù)程序,ARM 將不再訪問硬核處理系統(tǒng)端的各類外設(shè)資源.因此,待驗(yàn)證處理器從開始加載啟動(dòng)到掛載發(fā)行版文件系統(tǒng)的整個(gè)過程,對硬核處理系統(tǒng)端的所有接口資源都具有完全權(quán)限.
硬核處理系統(tǒng)側(cè)的處理器核心主要包括ARM主處理器和PMU 協(xié)處理器2 部分.ARM 主處理器作為硬核處理系統(tǒng)的高性能處理器,主頻較高,而且上電后立即開始工作,可直接進(jìn)行訪存以及各類外設(shè)接口的交互操作,能夠向待測RISC-V 處理器軟核提供算力方面的協(xié)助.PMU 是一個(gè)在SoC-FPGA 上執(zhí)行管理功能的硬核處理器.PMU 可以執(zhí)行其他處理器不被允許的操作,如電源管理、時(shí)鐘管理和可編程邏輯配置,能夠向待測RISC-V 處理器軟核提供功能上的輔助.待測RISC-V 核對2 種硬核處理器資源的利用在結(jié)構(gòu)上均需要基于Mailbox 進(jìn)行關(guān)鍵信息的交互,如圖1 所示.3.2.1 節(jié)將對硬核處理器資源的利用方法,以及不同處理器之間的具體交互流程進(jìn)行闡述說明.
3.2.1 平臺(tái)管理單元協(xié)同
基于3.1 節(jié)的方法雖然能夠訪問到I/O 外設(shè)的控制與狀態(tài)寄存器空間,但無法直接訪問一些對系統(tǒng)行為較為敏感的特殊寄存器(如I/O 外設(shè)的時(shí)鐘寄存器).這些特殊寄存器只能由PMU 管理,其他處理器核沒有直接訪問權(quán)限.當(dāng)待驗(yàn)證RISC-V 處理器需要讀寫特殊寄存器時(shí),需要向PMU 發(fā)出核間中斷請求,委托PMU 進(jìn)行特殊寄存器的讀寫操作.因此需要建立待驗(yàn)證RISC-V 處理器與PMU 的核間中斷通信機(jī)制.然而,現(xiàn)有SoC-FPGA 器件往往并不允許位于可編程邏輯的待測處理器直接向PMU 單元發(fā)出核間中斷操作.
為解決這些問題,本文提出一種虛擬核間中斷機(jī)制,通過ARM 硬核處理器作為第三方,對核間中斷(inter-processor interrupt,IPI)請求進(jìn)行轉(zhuǎn)發(fā).具體地,本文提出一種基于Mailbox 的核間中斷請求轉(zhuǎn)發(fā)流程.同時(shí),為了對特殊寄存器的操作與普通寄存器操作進(jìn)行隔離,本文在RISC-V 的機(jī)器態(tài)運(yùn)行模式(machine mode,M-MODE)下實(shí)現(xiàn)了程序調(diào)用接口,允許在其他運(yùn)行模式下通過環(huán)境調(diào)用(environment call,ECALL)模式訪問.
如圖2 所示,Mailbox 主要包括請求標(biāo)記段和參數(shù)段,參數(shù)段包括請求類型段、輸入?yún)?shù)段與輸出參數(shù)段3 部分,可基于FPGA 片上小容量BRAM 實(shí)現(xiàn).請求標(biāo)記段由RISC-V 在需要時(shí)進(jìn)行置位和回讀,ARM 則在默認(rèn)情況下循環(huán)檢測該請求標(biāo)記.為了當(dāng)RISC-V 開始執(zhí)行PMU 訪問時(shí)首先通過ECALL 陷入M-MODE,將核間中斷的相關(guān)信息通過MMIO 總線接口寫入Mailbox 的相應(yīng)位置.在Mailbox 模塊的配合下,RISC-V 核對PMU 等單元的操作請求將由ARM進(jìn)行中轉(zhuǎn),代替RISC-V 向PMU 發(fā)出操作請求從而實(shí)現(xiàn)虛擬核間中斷機(jī)制,最終RISC-V 通過Mailbox回讀核間中斷操作的返回結(jié)果,圖2 中,從平臺(tái)的角度上,各操作按數(shù)字序號的次序依次執(zhí)行;從RISCV 與ARM 處理器的角度上,各自按照其執(zhí)行步驟箭頭依次執(zhí)行.
Fig.2 Interaction process between RISC-V processor and PMU圖2 RISC-V 處理器與PMU 的交互流程
基于Mailbox 構(gòu)建的虛擬核間中斷機(jī)制將在平臺(tái)的操作系統(tǒng)引導(dǎo)過程中起到重要作用.在待測RISC-V 軟核啟動(dòng)時(shí),Linux 內(nèi)核的初始化階段需要陷入M-MODE 的管理器二進(jìn)制接口(supervisor binary interface,SBI)固件代碼中執(zhí)行核間中斷請求.RISCV 處理器上的Linux 內(nèi)核運(yùn)行于S-MODE, 更高級別的M-MODE 運(yùn)行OpenSBI(OpenSBI 是SBI 的一種開源實(shí)現(xiàn),除了作為引導(dǎo)程序以外, 同時(shí)也作為平臺(tái)管理固件運(yùn)行于處理器的最高級別).本文兼容了現(xiàn)有的SoC-FPGA 時(shí)鐘驅(qū)動(dòng)程序,通過添加相應(yīng)的接口函數(shù)來支持RISC-V 從內(nèi)核態(tài)陷入M-MODE 固件,發(fā)起對PMU 的虛擬核間中斷,如圖3 所示.
Fig.3 Linux drivers running on RISC-V processor initiate a virtual IPI towards PMU圖3 RISC-V 處理器上運(yùn)行的Linux 驅(qū)動(dòng)程序發(fā)起對PMU 的虛擬核間中斷請求
3.2.2 ARM 處理器協(xié)同
在驗(yàn)證平臺(tái)中,ARM 處理器負(fù)責(zé)為RISC-V 處理器核的啟動(dòng)準(zhǔn)備內(nèi)存環(huán)境,并將RISC-V 的啟動(dòng)鏡像文件從SD 卡提前移動(dòng)到內(nèi)存,完成可編程邏輯端的位流配置等.并在啟動(dòng)和運(yùn)行期間最終執(zhí)行服務(wù)程序以協(xié)助ECALL 和RISC-V 的其他操作.除了RISC-V 操作所需的輔助外,ARM 處理器還可以承擔(dān)一些計(jì)算任務(wù).
例如,在涉及RISC-V 安全框架的研究中,ARM處理器不僅負(fù)責(zé)協(xié)助RISC-V 啟動(dòng)和轉(zhuǎn)發(fā)IPI 消息,它本身還具有更高的工作時(shí)鐘頻率和更大的計(jì)算潛力.對于一些計(jì)算密集型的任務(wù),RISC-V 可以通過Mailbox 向ARM 提交計(jì)算輔助請求以及所需要計(jì)算的任務(wù)類型、原始數(shù)據(jù)信息等,如圖4 所示.ARM 接收到計(jì)算輔助請求后,將通過一致性接口讀取所需計(jì)算的原始數(shù)據(jù),之后將計(jì)算結(jié)果數(shù)據(jù)由一致性接口寫入共享內(nèi)存區(qū)域,并通過清除請求標(biāo)記告知RISC-V 去回讀共享內(nèi)存中的計(jì)算結(jié)果,從平臺(tái)的角度上,各操作按數(shù)字序號的次序依次執(zhí)行;從RISCV 與ARM 處理器的角度上,各自按照其執(zhí)行步驟箭頭依次執(zhí)行.
Fig.4 ARM processor cooperates to run complex computing tasks of RISC-V圖4 ARM 處理器協(xié)同運(yùn)行RISC-V 的復(fù)雜運(yùn)算任務(wù)
為了提升軟硬件協(xié)同驗(yàn)證平臺(tái)的敏捷性,本文構(gòu)建了RISC-V 處理器軟硬件驗(yàn)證的可配置、自動(dòng)化開發(fā)框架.
3.3.1 可配置框架
驗(yàn)證平臺(tái)通過多層Git 存儲(chǔ)庫組織,將有關(guān)的軟件和硬件倉庫以高內(nèi)聚、低耦合的原則組織成一個(gè)集成的設(shè)計(jì)環(huán)境.用戶僅需要向平臺(tái)的接口文件提供關(guān)鍵配置參數(shù),如硬件處理器核的相關(guān)配置、軟件代碼的入口地址等.如圖5 所示,平臺(tái)通過一系列逐層調(diào)用并相互協(xié)作的Makefile 和工具命令語言(tool command language,Tcl)腳本,將這些關(guān)鍵參數(shù)配至各個(gè)代碼倉庫的編譯傳參接口,自動(dòng)進(jìn)行各個(gè)軟硬件模塊的參數(shù)修改以及FPGA 工程的適配工作,而不需要用戶深入平臺(tái)內(nèi)部進(jìn)行繁瑣的手動(dòng)修改.當(dāng)出現(xiàn)某些模塊的更替時(shí)僅需要關(guān)注關(guān)鍵參數(shù)即可,從而使得平臺(tái)能夠快速兼容各個(gè)軟硬件層次的設(shè)計(jì)變化.
Fig.5 Organization structure of platform on software and hardware codes圖5 平臺(tái)軟硬件代碼組織結(jié)構(gòu)
軟硬件協(xié)同驗(yàn)證平臺(tái)的敏捷性應(yīng)該體現(xiàn)在其可以快速高效地集成任何符合標(biāo)準(zhǔn)接口的軟件與硬件模塊.軟件模塊包括軟件協(xié)議棧的各層次代碼,例如啟動(dòng)引導(dǎo)軟件、Linux 操作系統(tǒng)、應(yīng)用層可執(zhí)行程序的不同階段的軟件代碼;而硬件模塊則主要包括處理器層次的邏輯設(shè)計(jì)與配置代碼與板卡層次的硬件腳本代碼.對于不同的軟硬件層次,需要分別配置特定的參數(shù),如表2 所示.
Table 2 Configuration Parameters Required for Integration of Different Software and Hardware Modules表2 不同軟硬件層次整合時(shí)所需要提供的配置參數(shù)
3.3.2 自動(dòng)化框架
考慮到系統(tǒng)級原型驗(yàn)證涉及到很多軟硬件各層次代碼,本文探索在云端將全棧的代碼倉庫組織起來,使用戶在本地或服務(wù)器端,自動(dòng)化執(zhí)行編譯和測試流程.由于編譯需要許多特定版本的工具鏈,基于持續(xù)集成(continuous integration,CI)的編譯方法可以將不同的編譯階段分成特定順序的job,各個(gè)job 使用包含所需編譯工具鏈的獨(dú)立容器鏡像,相比本地編譯更簡單、更可靠.除了編譯階段,本文也探索了將編譯產(chǎn)出的目標(biāo)文件通過持續(xù)部署(continuous deployment,CD)更新到設(shè)備.
4.1.1 硬件環(huán)境
平臺(tái)的硬件環(huán)境包括2 種自研板卡平臺(tái),實(shí)物如圖6 所示,分別是基礎(chǔ)實(shí)驗(yàn)平臺(tái)(Plat-B)板卡,以及擴(kuò)展實(shí)驗(yàn)平臺(tái)(Plat-E)板卡, 2 種板卡的各項(xiàng)板載基礎(chǔ)配置參數(shù)分別如表3 所示.Plat-E 配備了邏輯資源更大的SoC-FPGA 器件,可以提供更多的片上存儲(chǔ)資源以支持相對復(fù)雜的應(yīng)用場景(如基于RISC-V 的可信執(zhí)行環(huán)境).
Fig.6 Physical photos of platform hardware圖6 平臺(tái)硬件實(shí)物照片
Table 3 Basic Configurations of Two Experimental Platforms表3 2 個(gè)實(shí)驗(yàn)平臺(tái)的基本配置
4.1.2 目標(biāo)軟核處理器
在評估實(shí)驗(yàn)中,Plat-E 板卡與Plat-B 板卡上RISC-V軟核處理器的基本配置相同,但Plat-E 板卡為RISCV 提供的訪存空間更大、可編程邏輯側(cè)提供的時(shí)鐘頻率更高,如表4 所示.
4.1.3 軟件負(fù)載
基于表3、表4 硬件環(huán)境,通過部署并運(yùn)行一系列軟件負(fù)載,如表5 所示,評估本文提出的驗(yàn)證平臺(tái)性能.
1)驗(yàn)證平臺(tái)的I/O 外設(shè)性能
硬核處理系統(tǒng)側(cè)的各類外設(shè)接口在交予可編程邏輯側(cè)的待測試處理器使用時(shí),由于片內(nèi)通路較長,需要更多的總線中轉(zhuǎn),可能會(huì)產(chǎn)生一定的性能下降.對于大多數(shù)待驗(yàn)證處理器的功能和性能測試,特別是需要運(yùn)行Linux 的場景,考慮到文件系統(tǒng)通常需要放置在SD/MMC 卡或NFS 服務(wù)器上,并且數(shù)據(jù)輸入和輸出也取決于SD/MMC 存儲(chǔ)介質(zhì)或網(wǎng)絡(luò)接口.為了測試本文所述的原型驗(yàn)證平臺(tái)是否可以提供足夠的網(wǎng)絡(luò)與SD 卡訪問能力以滿足系統(tǒng)級測試的基本需求,本文基于Plat-B 板卡的硬件環(huán)境設(shè)計(jì)了一些典型的比較試驗(yàn),對驗(yàn)證平臺(tái)的網(wǎng)絡(luò)與SDIO 這2 個(gè)典型外設(shè)接口進(jìn)行了性能測試和評估.
2)驗(yàn)證平臺(tái)的算力輔助
在原型驗(yàn)證中,待測處理器軟核往往不能以高時(shí)鐘頻率運(yùn)行.當(dāng)待測處理器必須執(zhí)行一些耗時(shí)的計(jì)算任務(wù)時(shí),長時(shí)間的等待往往會(huì)給其他后續(xù)驗(yàn)證過程帶來麻煩.硬核處理系統(tǒng)側(cè)的ARM 處理器可以輔助進(jìn)行一些較為復(fù)雜的計(jì)算密集型任務(wù).
如何提供一個(gè)安全可信執(zhí)行環(huán)境是未來處理器設(shè)計(jì)中的重要發(fā)展方向.在現(xiàn)有可信執(zhí)行框架下,基于第三代安全散列算法[15-16](secure Hash algorithm 3,SHA-3)的度量操作屬于一種計(jì)算密集型任務(wù),它占整體運(yùn)行時(shí)間的80.4%.本文在RISC-V 開源處理器核上部署UC Berkley 發(fā)布的開源可信執(zhí)行環(huán)境Keystone[17-18],探索將SHA-3 核心計(jì)算任務(wù)委托到ARM 硬核處理器進(jìn)行處理的方法,并進(jìn)行性能評估.
在Xilinx Zynq UltraScale+ MPSoC 設(shè)備上,本文分別在硬核處理系統(tǒng)側(cè)使用ARM 處理器,在可編程邏輯側(cè)使用待驗(yàn)證處理器核來測試兩側(cè)處理器訪問通信的各項(xiàng)性能.網(wǎng)絡(luò)帶寬Inbound(驗(yàn)證平臺(tái)接收來自外界發(fā)送的數(shù)據(jù))和Outbound(驗(yàn)證平臺(tái)向外界發(fā)送數(shù)據(jù))的情況如表6 所示.實(shí)驗(yàn)評估了分別由ARM硬核和RISC-V 軟核訪問SDIO 接口時(shí)的性能參數(shù),如圖7 所示,從左到右依次為SDIO 接口的帶寬、每秒讀寫操作次數(shù)、延遲測試結(jié)果.
Fig.7 SDIO performance evaluation of prototype platform圖7 原型平臺(tái)的SDIO 性能評估
Table 6 Network Performance Evaluation of Prototype Verification Platform表6 原型驗(yàn)證平臺(tái)的網(wǎng)絡(luò)性能評估
從芯片架構(gòu)來看,硬核處理系統(tǒng)側(cè)的ARM 處理器具有更高的運(yùn)行主頻(1.5GHz),其到網(wǎng)絡(luò)外設(shè)設(shè)備的數(shù)據(jù)和控制路徑更短.Inbound 和Outbound 的測試性能均優(yōu)于被測的RISC-V.盡管如此,被測的RISC-V 仍然可以保證一定的網(wǎng)絡(luò)傳輸帶寬,在大多數(shù)原型驗(yàn)證工作中不會(huì)出現(xiàn)明顯的瓶頸,可以滿足系統(tǒng)級測試的基本需求.
基于硬核處理系統(tǒng)側(cè)的ARM 處理器來進(jìn)行SHA-3計(jì)算的基本思路如圖4 所示.ARM 可以按RISC-V 地址空間,以常規(guī)訪存方式,通過RISC-V 緩存一致性接口讀取數(shù)據(jù).執(zhí)行完成后,通過ARM 側(cè)顯式地執(zhí)行緩存寫回操作,將ARM 側(cè)的運(yùn)算結(jié)果主動(dòng)通過RISC-V 一致性接口直接寫回RISC-V 內(nèi)存,無需顯式地進(jìn)行結(jié)果數(shù)據(jù)在ARM 與RISC-V 內(nèi)存中的搬移.
逐一運(yùn)行Keystone 的功能測試集進(jìn)行算力輔助效果測試.在實(shí)驗(yàn)中RISC-V 軟核處理器通過Mailbox將用于SHA-3 計(jì)算的數(shù)據(jù)塊的起始地址信息傳遞給ARM 處理器.ARM 運(yùn)行特定的加速程序?qū)υ摰刂返臄?shù)據(jù)塊執(zhí)行SHA-3 計(jì)算.ARM 輔助計(jì)算的方法顯著加快了SHA-3 計(jì)算速度,平均將加解密計(jì)算運(yùn)行時(shí)間減少了81.13%.由于SHA-3 的計(jì)算得以輔助進(jìn)行,Keystone 框架中各功能測試集的執(zhí)行時(shí)間均顯著縮短,如圖8 所示.
Fig.8 Evaluation of the computing power’s auxiliary effect of the ARM processor on the prototype platform圖8 原型平臺(tái)的ARM 處理器算力輔助效果評估
為進(jìn)一步驗(yàn)證本文所提出的平臺(tái)在敏捷性方面的改進(jìn)程度,本文在4.1 節(jié)所述的在基準(zhǔn)平臺(tái)基礎(chǔ)上,分別對3 個(gè)處理器實(shí)例進(jìn)行移植,如表7 所示.
Table 7 Amount of Work Required to Integrate Different Software and Hardware Modules表7 整合不同軟硬件模塊所需要的工作量
如表7 所示,當(dāng)需要實(shí)現(xiàn)實(shí)例I 的目標(biāo)處理器時(shí),平臺(tái)在基準(zhǔn)Rocketchip 環(huán)境的基礎(chǔ)上,僅需將代碼倉庫中的處理器核子倉庫替換為“果殼”處理器子倉庫,根據(jù)相應(yīng)的設(shè)計(jì)要求修改DRAM 起始地址與內(nèi)存范圍,此外考慮到“果殼”處理器核不包含硬件浮點(diǎn)計(jì)算單元,需要啟動(dòng)引導(dǎo)軟件提供浮點(diǎn)模擬輔助,因此增加BBL(Berkeley boot loader )代碼倉庫到啟動(dòng)引導(dǎo)軟件棧路徑下,最后修改頂層軟件棧相應(yīng)編譯腳本即可.
當(dāng)需要實(shí)現(xiàn)實(shí)例II 的目標(biāo)處理器時(shí),則以實(shí)例I為基礎(chǔ),替換支持脈沖神經(jīng)網(wǎng)絡(luò)加速的“果殼”處理器子倉庫,繼續(xù)沿用實(shí)例I 處理器的其他改動(dòng)即可直接重新編譯并部署新的處理器核到平臺(tái)上.
當(dāng)需要實(shí)現(xiàn)實(shí)例III 的目標(biāo)處理器時(shí),平臺(tái)首先將虛擬化擴(kuò)展的四核Rocketchip 子倉庫替換基準(zhǔn)Rocketchip 子倉庫,再修改U-Boot 與Linux 的配置項(xiàng)以支持RISC-V 的虛擬化功能即可.
最后,根據(jù)3 個(gè)實(shí)例所需的包括對平臺(tái)腳本的配置項(xiàng)、Makefile 與Tcl 腳本代碼修改等工作量進(jìn)行了評估,如表7 所示.
綜上,對于以上軟硬件層次的需求變更,僅需較少的手動(dòng)修改工作即可快速整合進(jìn)平臺(tái),開啟新一輪的部署與驗(yàn)證迭代.
處理器芯片設(shè)計(jì)在投片前需要基于近似真實(shí)的軟硬件環(huán)境,敏捷地進(jìn)行軟硬件系統(tǒng)定義、集成和試錯(cuò).為更好地支持敏捷的軟硬件協(xié)同驗(yàn)證技術(shù),本文提出了一套基于SoC-FPGA 的系統(tǒng)級全棧平臺(tái),支持主流開源RISC-V 處理器軟硬件棧,支撐軟硬件協(xié)同的評測工作.
未來的工作包括進(jìn)一步提升平臺(tái)兼容性,以便為設(shè)計(jì)規(guī)模更大、邏輯結(jié)構(gòu)更為復(fù)雜的國產(chǎn)香山RISCV 開源處理器項(xiàng)目[23-24]提供系統(tǒng)級原型環(huán)境.對于香山處理器核所需的可編程邏輯資源規(guī)模,現(xiàn)有的SoCFPGA 器件尚不足以提供支持,本文正在探索相關(guān)解決方案,以構(gòu)建邏輯資源規(guī)模更大的系統(tǒng)級平臺(tái).
本文所述的敏捷軟硬件系統(tǒng)級評估平臺(tái)已經(jīng)開放①https://gitlab.agileserve.org.cn:8001.,并發(fā)布了平臺(tái)的使用說明②https://gitlab.agileserve.org.cn:8001/ICT-SERVE-FARM/serve-docs/user-manual.git.,歡迎申請?jiān)囉貌⑻岢鰧氋F建議.
作者貢獻(xiàn)聲明:齊樂實(shí)施實(shí)驗(yàn)并撰寫論文;常軼松負(fù)責(zé)提供實(shí)驗(yàn)方案與詳細(xì)工作思路;陳欲曉和張旭提出相關(guān)意見并修改論文;陳明宇、包云崗和張科提供總體指導(dǎo).