閆 潤,黃立波,成元虎,楊 凌,蘭孟橋,張 京
(國防科技大學(xué) 計(jì)算機(jī)學(xué)院,長沙 410005)
RISC-V指令集架構(gòu)(Instruction Set Architecture,ISA)[1]是一種新興的開源精簡指令集架構(gòu)[2].RISC-V采用模塊化設(shè)計(jì),提供大量自定義編碼空間以支持對指令集的擴(kuò)展,允許開發(fā)者根據(jù)資源、能耗、權(quán)限、實(shí)時性等不同需求,基于部分特定的模塊和擴(kuò)展指令集進(jìn)行精細(xì)化的系統(tǒng)設(shè)計(jì)研發(fā).在內(nèi)容上包括非特權(quán)指令集(Unprivileged ISA)[3]和特權(quán)架構(gòu)(Privileged Architecture)[4]兩部分.
憑借開源和模塊化設(shè)計(jì)的優(yōu)勢,新興的RISC-V指令集發(fā)展迅速.RISC-V指令集架構(gòu)被定義為一個基礎(chǔ)指令集和若干可選擴(kuò)展指令集的組合,并在一種特權(quán)模式下進(jìn)行工作.根據(jù)特權(quán)等級和應(yīng)用場景的不同,RISC-V處理器分為簡單嵌入式系統(tǒng)、安全嵌入式系統(tǒng)和運(yùn)行類Unix操作系統(tǒng)的系統(tǒng).特權(quán)組合和對應(yīng)系統(tǒng)分類見表1.
表1 特權(quán)模式組合Table 1 Supported combinations of privilege modes
簡單嵌入式系統(tǒng)對應(yīng)于特權(quán)等級M模式,一般是被設(shè)計(jì)成用于某一特定功能的處理器,如RV32EC_P2[5]是由IQonIC Work團(tuán)隊(duì)研發(fā)的一款兩級流水線的RISC-V處理器IP,旨在滿足運(yùn)行可信程序的小型低功耗嵌入式應(yīng)用的需求,采用簡單的機(jī)器模式特權(quán)架構(gòu),內(nèi)存訪問方式采用直接物理尋址;國內(nèi)工程師胡振波開發(fā)并開源了蜂鳥E200[6]超低功耗RISC-V處理器核,指令集支持RV32IMAC,兩級流水,特權(quán)架構(gòu)采用機(jī)器模式,采用直接物理尋址方式.安全嵌入式系統(tǒng)是在簡單嵌入式系統(tǒng)的基礎(chǔ)上增加了地址保護(hù),用來保證用戶應(yīng)用程序不會對系統(tǒng)造成影響,其中RV32IC_P5[5]是IQonIC Work團(tuán)隊(duì)研發(fā)的另一款針對中等規(guī)模嵌入式系統(tǒng)的RISC-V處理器IP,五級流水線設(shè)計(jì),采用機(jī)器模式和用戶模式特權(quán)架構(gòu),內(nèi)存直接物理尋址;Z-scala Core[7]是加州大學(xué)伯克利分校研發(fā)的一款面向特定嵌入式系統(tǒng)和微控制器應(yīng)用的32位核,指令集采用RV32IM,三級流水實(shí)現(xiàn),在特權(quán)等級上采用機(jī)器模式和用戶模式.運(yùn)行類Unix操作系統(tǒng)的處理器支持最多的功能,如伯克利在2016年開發(fā)的64位單發(fā)射五級流水線順序處理器Rocket Core[8],具有可配置性,支持多種RISC-V的指令集擴(kuò)展組合,采用3種特權(quán)模式的組合,配備內(nèi)存管理單元(Memory Management Unit,MMU)以支持類Unix操作系統(tǒng),在芯片原型上成功運(yùn)行了Linux操作系統(tǒng);阿里巴巴公司研發(fā)的64位高性能嵌入式RISC-V處理器Xuantie-910[9],指令集支持RV64GCV,采用亂序執(zhí)行三發(fā)射的十二級流水線,特權(quán)架構(gòu)上支持標(biāo)準(zhǔn)的3種模式,采用Sv39的MMU;中國科學(xué)院計(jì)算技術(shù)研究所在RISC-V中國峰會發(fā)布的開源高性能RISC-V處理器核“香山”[10],采用十一級流水線6發(fā)射的亂序處理設(shè)計(jì),配備3種特權(quán)等級,支持Sv39的分頁機(jī)制;SCR7[11]是Syntacore公司推出的64位商用高性能處理器IP,支持3種特權(quán)等級,指令集支持RV64GC,可以運(yùn)行Linux操作系統(tǒng),對稱多處理(Symmetrical Multi-Processing,SMP)每個集群可支持8核.由此可見,在RISC-V處理器設(shè)計(jì)時,除非特權(quán)指令集和體系結(jié)構(gòu)設(shè)計(jì)的差異,在特權(quán)架構(gòu)上亦有差別,主要體現(xiàn)對物理地址的管理方式上.除此之外,特權(quán)架構(gòu)還包括一些可選實(shí)現(xiàn)單元,這些同樣會對系統(tǒng)的功能和硬件開銷產(chǎn)生一定的影響.
隨著近代處理器主頻不斷提高,能耗開銷、系統(tǒng)散熱等問題越來越突出,尤其是學(xué)術(shù)界對多核處理器的關(guān)注越來越多[12-14],芯片面積和功耗開銷成為設(shè)計(jì)處理器的一個重要評估因素.D?rflinger等人[15]對開源的應(yīng)用級RISC-V處理器進(jìn)行了性能,面積和功耗等方面評估,但缺少對特權(quán)架構(gòu)的詳細(xì)對比,更多關(guān)注于體系結(jié)構(gòu)的差異.國內(nèi)劉暢等人[16]對RISC-V指令集架構(gòu)進(jìn)行了綜述.可以看出目前較少研究關(guān)注不同RISC-V特權(quán)架構(gòu)配置對硬件實(shí)現(xiàn)的影響.此外,廣泛的參數(shù)化設(shè)計(jì)體系結(jié)構(gòu)是研究人員孜孜以求的目標(biāo),旨在更方便地為特定的應(yīng)用場景進(jìn)行設(shè)計(jì),通過改變配置,用戶可以生成針對不同應(yīng)用場景的片上系統(tǒng)(System on Chip,SoC).
本文采用開源處理器CVA6[17]進(jìn)行特權(quán)架構(gòu)配置硬件實(shí)現(xiàn)和分析研究,該處理器是由OpenHW團(tuán)隊(duì)研發(fā)設(shè)計(jì)的6級流水單發(fā)射順序核,參照RISC-V特權(quán)指令集架構(gòu)規(guī)范,在硬件上設(shè)計(jì)實(shí)現(xiàn)了包括RV32和RV64兩種位寬的配置,支持3種特權(quán)模式和所有的特權(quán)指令擴(kuò)展,設(shè)置異常處理委托程序,支持M和S兩種模式的異常處理,設(shè)置物理內(nèi)存保護(hù)機(jī)制對物理地址進(jìn)行保護(hù),基于頁面虛擬內(nèi)存采用Sv32和Sv39兩種方案,實(shí)現(xiàn)了較為全面的性能計(jì)數(shù)器等.CVA6架構(gòu)框圖見圖1.本文研究的重點(diǎn)在于讀取、存儲單元,異常處理單元,性能計(jì)數(shù)器等.在圖1中指令TLB(Translation Lookaside Buffer)、指令存儲、數(shù)據(jù)存儲、數(shù)據(jù)TLB和PTW(Page Table Walker)表示讀取、存儲單元相關(guān)涉及到的硬件資源;異常處理和特權(quán)檢查表示特權(quán)架構(gòu)中的異常處理;CSR寫包括性能計(jì)數(shù)器和讀寫其他功能部件等.
圖1 CVA6架構(gòu)示意圖Fig.1 Overview architecture of CVA6
本文針對特權(quán)架構(gòu)的可選配置進(jìn)行硬件實(shí)現(xiàn)的探索研究,分為兩類共32種可選配置,采用參數(shù)化的方式進(jìn)行配置選擇,利用綜合工具對各種配置進(jìn)行硬件資源開銷的估算.根據(jù)估算結(jié)果和處理器功能對各種應(yīng)用場景提供特權(quán)架構(gòu)的配置推薦.本文的實(shí)驗(yàn)結(jié)果表明在采用相同指令集和體系結(jié)構(gòu)設(shè)計(jì)的前提下,不同配置最多可以帶來的28.63%面積和40.83%功耗差異.
本文的內(nèi)容組織如下:第1部分主要描述RISC-V中的32種可選特權(quán)架構(gòu)配置,第2部分是本文的實(shí)驗(yàn)結(jié)果,包括各類配置的量化結(jié)果和應(yīng)用場景配置推薦,第3部分對全文的內(nèi)容進(jìn)行總結(jié).
RV32、RV64是RISC-V中最重要的兩種,分別針對32位和64位環(huán)境而設(shè)計(jì).兩種指令集都使用32個通用寄存器(x寄存器)和一個額外的非特權(quán)寄存器(pc寄存器),主要的區(qū)別在于寄存器的位寬(XLEN),RV32中通用寄存器是32位(XLEN=32),而RV64中通用寄存器是64位(XLEN=64).兩種指令集架構(gòu)位數(shù)的選擇主要取決于尋址范圍的大小和數(shù)據(jù)運(yùn)算能力的強(qiáng)弱.
在本文中,分別實(shí)現(xiàn)了RV32和RV64兩種用來探索不同位寬下特權(quán)架構(gòu)配置的硬件實(shí)現(xiàn)影響.
RISC-V特權(quán)架構(gòu)規(guī)定,指令集必須工作在一種確定的權(quán)限模式下,目前共有以下4種權(quán)限模式:機(jī)器模式(Machine,M模式)、用戶模式(User,U模式)、管理模式(Supervisor,S模式)、監(jiān)視模式(Hypervisor,H模式).其中H模式是基于S模式的虛擬化擴(kuò)展,暫處于草案狀態(tài),因此在本文中僅關(guān)注前3種特權(quán)模式.特權(quán)模式的設(shè)計(jì)主要用于在軟件棧的不同組件之間提供保護(hù).
M模式是RISC-V指令集架構(gòu)中最高級別的權(quán)限模式,具有執(zhí)行任何機(jī)器操作的權(quán)限,也是在系統(tǒng)設(shè)計(jì)中必須實(shí)現(xiàn)的一個工作模式,提供裸機(jī)執(zhí)行環(huán)境.U模式是特權(quán)架構(gòu)里最低級別的權(quán)限模式,通常用于執(zhí)行來自用戶等外部環(huán)境的不可信操作,實(shí)現(xiàn)用戶和系統(tǒng)之間的隔離.S模式具有比U模式更高的權(quán)限,可以設(shè)置相應(yīng)組件來實(shí)現(xiàn)操作系統(tǒng)的使用,調(diào)度多個應(yīng)用程序.只有在響應(yīng)異常或異常返回時才會發(fā)生特權(quán)級的切換.模式轉(zhuǎn)換圖見圖2.
圖2 不同模式之間轉(zhuǎn)換條件Fig.2 Conversion conditions between different modes
中斷和異常機(jī)制往往是處理器指令集架構(gòu)最為復(fù)雜和關(guān)鍵的部分.RISC-V定義了一套相對簡單的中斷和異常機(jī)制,同時也允許用戶對其進(jìn)行定制和擴(kuò)展.在特權(quán)架構(gòu)1.11版本[18]中定義了關(guān)于異常處理的N擴(kuò)展(U模式下的異常處理),在1.12版本中對這部分內(nèi)容進(jìn)行了刪減.考慮到后續(xù)可能對N擴(kuò)展再次進(jìn)行調(diào)整以及內(nèi)容的完整性,本文按照1.12草案[19]對N擴(kuò)展進(jìn)行實(shí)現(xiàn)和硬件實(shí)現(xiàn)的評估.
RISC-V使用CSR寄存器來進(jìn)行記錄異常狀態(tài)以協(xié)助異常處理程序進(jìn)行異常處理.盡管M模式的處理程序可以使用MRET指令將異常重定向到適當(dāng)?shù)奶貦?quán)級別,但是默認(rèn)情況下,無論處于何種特權(quán)模式下發(fā)生異常,控制權(quán)都會被移交到M模式的異常處理程序.為了提高性能,RISC-V指令集規(guī)范了中斷異常委托機(jī)制.這個機(jī)制可以將異常的處理委托到低級別的特權(quán)模式.如果系統(tǒng)支持M/S/U 3種模式,M模式下的medeleg或mideleg寄存器可以將異常委托到S模式或U模式,由S模式下的異常處理程序來處理.如果U模式的異常支持,S模式可以通過sedeleg和sideleg寄存器來將異常委托到U模式,由U模式的異常處理程序來處理.如果系統(tǒng)支持M/U兩種模式,并支持U模式的異常處理,設(shè)置medeleg或mideleg來將對應(yīng)的異常委托到U模式,由U模式的異常處理程序處理.
從系統(tǒng)設(shè)計(jì)來看,以M模式為例,共有8個控制和狀態(tài)寄存器(CSRs)是M模式異常處理的必要部分,分別為:mtvec(Machine trap-handler base address)、mepc(Machine exception program counter)、mcause(Machine trap Cause)、mie(Machine interrupt-enable register)、mip(Machine interrupt pending)、mtval(Machine bad address or instruction)、mscratch(Machine scratch register)、mstatus(Machine status register)、mstatush(僅RV32),其他兩種模式的異常處理對應(yīng)寄存器與M模式的寄存器設(shè)置類似,異常委托機(jī)制所需要設(shè)置的寄存器為mideleg(Machine interrupt delegation register)和medeleg(Machine exception delegation register).如果僅支持M模式的異常處理則無需設(shè)置mideleg和medeleg;當(dāng)系統(tǒng)中實(shí)現(xiàn)M和U兩種模式的異常處理時,需要設(shè)置對應(yīng)M模式和U模式兩種模式下的異常處理和異常委托所需要的寄存器及其對應(yīng)的處理邏輯;當(dāng)系統(tǒng)中同時實(shí)現(xiàn)M、S、U 3種模式的異常處理時,需要設(shè)置對應(yīng)3種模式下的3組異常處理寄存器和兩組異常委托寄存器以及對應(yīng)的處理邏輯.
在CVA6中,實(shí)現(xiàn)了M模式和S模式的異常處理,支持異常處理委托機(jī)制.本文在開發(fā)者的基礎(chǔ)上,完善了U模式的異常處理和對應(yīng)的異常委托機(jī)制.在系統(tǒng)設(shè)計(jì)時,架構(gòu)中規(guī)范至少要實(shí)現(xiàn)M模式的異常處理,在此基礎(chǔ)上可選設(shè)置一組或兩組異常處理委托機(jī)制,這樣可以加速系統(tǒng)對異常的處理,減少特權(quán)模式之間的切換.
M模式具有最高的訪問權(quán)限,可以自由地訪問硬件平臺,但它無法保證整個代碼庫都可信.為此,RISC-V提供了保護(hù)系統(tǒng)免受不可信代碼危害的機(jī)制,并且為不受信任的進(jìn)程提供隔離保護(hù),這種機(jī)制叫做物理內(nèi)存保護(hù)(Physical Memory Protection,PMP),其目的是限制每個硬件線程(hart)運(yùn)行軟件可訪問的物理地址區(qū)域.它能夠?yàn)槊總€硬件線程提供M模式控制的寄存器來限制對每一塊物理內(nèi)存區(qū)域物理地址訪問的特權(quán)等級和訪問權(quán)限(包括讀、寫和執(zhí)行).物理內(nèi)存保護(hù)適用于在S模式或U模式的所有訪問以及M模式下的部分訪問.另外,也適用于基于頁面虛擬內(nèi)存的地址轉(zhuǎn)換.物理內(nèi)存保護(hù)還可以賦予S模式和U模式訪問權(quán)限,或者更改M模式的訪問權(quán)限.當(dāng)訪問到被限制的內(nèi)存區(qū)域時,將會引起異常.
系統(tǒng)中的物理內(nèi)存保護(hù)在硬件邏輯中的實(shí)現(xiàn)主要存在于執(zhí)行和取指單元中.在RISC-V中,PMP的實(shí)現(xiàn)主要是通過幾個地址寄存器(16或64個)和對應(yīng)的配置寄存器.配置寄存器可以授予或拒絕讀、寫和執(zhí)行權(quán)限.當(dāng)處于U模式的處理器嘗試取指或執(zhí)行讀取或存儲操作時,將地址和所有的PMP地址寄存器比較.如果地址大于等于PMP地址i,但小于PMP地址i+1,則PMP i+1的配置寄存器決定該訪問是否可以繼續(xù),如果不能將會引發(fā)訪問異常.在實(shí)現(xiàn)的過程中,如果系統(tǒng)中僅支持M模式,可選擇不設(shè)置PMP,地址空間均可被處理器訪問.圖3顯示了PMP配置寄存器的構(gòu)成,主要的控制位包括R、W和X,分別對應(yīng)于讀、寫和執(zhí)行.
圖3 PMP配置寄存器構(gòu)成Fig.3 PMP configuration register format
在本文中,為保證研究的完整性,除僅實(shí)現(xiàn)M模式下的情況外,其他配置均實(shí)現(xiàn)物理內(nèi)存保護(hù).當(dāng)系統(tǒng)中支持M模式和U模式時,將PMP作為唯一的物理內(nèi)存保護(hù)措施.當(dāng)3種模式同時實(shí)現(xiàn)時,PMP與基于頁面的虛擬內(nèi)存同時對物理內(nèi)存進(jìn)行保護(hù).
物理內(nèi)存保護(hù)的方案對嵌入式系統(tǒng)的實(shí)現(xiàn)很有吸引力,因?yàn)樗孟鄬^低的成本提供了內(nèi)存保護(hù),但它的一些缺點(diǎn)限制了它在通用計(jì)算機(jī)中的使用.由于PMP僅支持固定數(shù)量的內(nèi)存區(qū)域,因此無法對它進(jìn)行擴(kuò)展從而適應(yīng)更復(fù)雜的應(yīng)用程序.而且這些區(qū)域必須在物理存儲中連續(xù),因此系統(tǒng)可能產(chǎn)生存儲碎片化的問題.另外,PMP無法有效地支持對輔存的分頁[20].
S模式提供了一種傳統(tǒng)的虛擬內(nèi)存系統(tǒng),它將內(nèi)存劃分為固定大小的頁來進(jìn)行地址轉(zhuǎn)換和對內(nèi)存內(nèi)容的保護(hù).啟用分頁的時候,大多數(shù)地址(包括讀取和存儲的有效地址和PC中的地址)都是虛擬地址.要訪問物理內(nèi)存,它們必須被轉(zhuǎn)換為真正的物理地址,這通過遍歷頁表來實(shí)現(xiàn).頁表的葉節(jié)點(diǎn)指示虛地址是否已經(jīng)被映射到了真正的物理頁面,如果是,則指示了哪些權(quán)限模式和通過哪種類型的訪問可以操作這個頁.針對RV32和RV64,RISC-V提供了不同的分頁方案.RV32的分頁方案是Sv32,RV64的分頁方案包括Sv39,Sv48和Sv57,其中Sv39是最受歡迎的一種[20].
在CVA6中虛擬內(nèi)存支持Sv32和Sv39兩種方式.從系統(tǒng)設(shè)計(jì)角度來看,存在支持S模式,不實(shí)現(xiàn)基于頁面虛擬內(nèi)存的情況,這種實(shí)現(xiàn)可以用于非傳統(tǒng)的類Unix操作系統(tǒng),適用于需要頻繁采用系統(tǒng)調(diào)用功能的處理器,存儲管理采用連續(xù)空間分配的方式,這種設(shè)計(jì)在地址轉(zhuǎn)換時,使用物理地址來代替虛擬地址,在硬件實(shí)現(xiàn)中也可以選擇不實(shí)現(xiàn)PTW和TLB.
現(xiàn)代處理器中一般都擁有若干被稱為硬件性能計(jì)數(shù)器(Hardware Performance Counter,HPC)的寄存器[21].在RISC-V特權(quán)指令規(guī)范同樣定義了若干CSR寄存器作為計(jì)數(shù)器和選擇器.在進(jìn)行處理器設(shè)計(jì)時,可以將這些寄存器作為捕捉特定事件的HPC.這些事件通常包括時鐘周期數(shù)、已執(zhí)行指令數(shù)、分支預(yù)測失敗數(shù)、各級緩存(cache)的缺失/命中次數(shù)、TLB的缺失/命中次數(shù)等.這些寄存器通常作為系統(tǒng)寄存器(比如ARM中的System Register,RISC-V中的CSR),從而能夠被指令直接訪問.利用性能計(jì)數(shù)器的信息可以更加高效地對系統(tǒng)狀態(tài)進(jìn)行監(jiān)測、對硬件資源進(jìn)行高效利用[22]、對功耗進(jìn)行合理管理[23]、對惡意代碼進(jìn)行有針對性的檢測[24]、對計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)[25]進(jìn)行優(yōu)化.
在CVA6中,提供了對一級指令緩存(cache)缺失、一級數(shù)據(jù)緩存(cache)缺失、指令TLB缺失、數(shù)據(jù)TLB缺失、加載指令數(shù)量、存儲指令數(shù)量、跳轉(zhuǎn)指令數(shù)量等性能計(jì)數(shù)器.在具體處理器設(shè)計(jì)時,可以考慮對這部分的內(nèi)容進(jìn)行調(diào)整,針對需求對性能計(jì)數(shù)進(jìn)行增減,也可以考慮不設(shè)置該模塊.
根據(jù)本節(jié)的描述,結(jié)合RISC-V特權(quán)架構(gòu)規(guī)范,將特權(quán)架構(gòu)配置分成RV32和RV64兩大類;在M模式基礎(chǔ)上擴(kuò)展成M,U和M,U,S 3種;異常處理根據(jù)特權(quán)等級的設(shè)置進(jìn)行異常處理委托程序的擴(kuò)展分為3類;物理內(nèi)存保護(hù)在僅M模式時不配置;基于頁面的虛擬內(nèi)存在M,U,S的特權(quán)模式下可選實(shí)現(xiàn);性能計(jì)數(shù)器在其他配置中可選實(shí)現(xiàn).如此設(shè)計(jì)可以實(shí)現(xiàn)對特權(quán)架構(gòu)兩類32種配置.RV32或RV64對應(yīng)的16種配置見表2.
表2 16種特權(quán)架構(gòu)配置Table 2 16 privileged architecture configurations
為了探索RISC-V特權(quán)架構(gòu)配置對硬件實(shí)現(xiàn)的影響.本文對32種配置使用綜合工具,在28nm工藝庫,500MHz的頻率下進(jìn)行綜合.在RTL實(shí)現(xiàn)上,本文選擇將這些配置作為一個參數(shù)來進(jìn)行定義,如Priv_conf=1對應(yīng)于文章中的配置1,在硬件實(shí)現(xiàn)上會設(shè)置好對應(yīng)的模塊參數(shù)和需要連接的部件.這樣設(shè)計(jì)的意義主要是為了更簡便地配置系統(tǒng)的特權(quán)架構(gòu).在如今IP產(chǎn)商和開源處理器的實(shí)現(xiàn)中,大多關(guān)注于通用架構(gòu)的配置,沒有對特權(quán)架構(gòu)進(jìn)行參數(shù)化配置的實(shí)現(xiàn).本文針對這一點(diǎn)進(jìn)行了實(shí)現(xiàn).在功能驗(yàn)證上,均通過了測試基準(zhǔn)程序.
RV32的功耗、面積開銷見圖4、圖6,RV64的功耗、面積開銷見圖5、圖7.由圖表中的數(shù)據(jù)可知,硬件開銷隨著設(shè)計(jì)復(fù)雜度的增加而增加,當(dāng)RV32與RV64都采用配置1時,功耗開銷從12.76mW增加到了37.64mW,面積開銷從169538μm2增加到了397504μm2,當(dāng)采用功能最全面的配置16時,二者功耗開銷增長到21.57mW和47.08mW,面積開銷增長到了237554μm2和515353μm2.在配置1的情況下,RV32比RV64功耗減少66.09%,面積減少57.35%,在配置16下,功耗減少54.14%,面積減少53.9%.相同非特權(quán)架構(gòu)下,RV32與RV64采用不同特權(quán)配置時功耗最多減少40.83%和20.05%,面積最多減少28.63%和22.89%.在RV32配置下,增加一組異常處理硬件功耗增加約0.25mW,面積增加約1944μm2;在RV64配置下,增加一組異常處理硬件功耗增加約0.63mW,面積增加約8238μm2.在RV32配置下,物理內(nèi)存保護(hù)功耗約占4.54mW,面積約占12838μm2;RV64配置下功耗約占1.52mW,面積約占33813μm2.RV32中基于頁面的虛擬內(nèi)存支持硬件功耗約占1.95mW,面積約占24446μm2;在RV64中功耗4.06mW,面積約占51767μm2.性能技術(shù)器在RV32中功耗約占0.083mW,面積約占7676μm2;在RV64中功耗約占0.723mW,面積約占11285μm2.由此可以看出在設(shè)計(jì)RISC-V處理器時,考慮在特權(quán)架構(gòu)上進(jìn)行配置,根據(jù)需求來選擇特權(quán)架構(gòu)有較大的意義.下面主要根據(jù)應(yīng)用場景進(jìn)行討論.
圖4 RV32不同配置下的功耗開銷Fig.4 RV32 power overhead in different configurations
圖5 RV64不同配置下的功耗開銷Fig.5 RV64 power overhead in different configurations
圖6 RV32不同配置下的面積開銷Fig.6 RV32 area overhead in different configurations
圖7 RV64不同配置下的面積開銷Fig.7 RV64 area overhead in different configurations
僅實(shí)現(xiàn)M模式應(yīng)用場景主要針對簡單嵌入式系統(tǒng).嵌入式系統(tǒng)是由硬件、軟件和某些情況下的附件部件組成.一般情況下,這些設(shè)備執(zhí)行專用的功能,共享有限的資源(內(nèi)存、空間和能耗),具有實(shí)時性、多任務(wù)處理、高復(fù)雜性和資源共享等共同屬性[26].
簡單嵌入式系統(tǒng)對應(yīng)于文章中的配置1和配置2.從實(shí)驗(yàn)結(jié)果來看,這兩種配置對應(yīng)于相同位寬的最復(fù)雜特權(quán)架構(gòu)配置會節(jié)約20%~40%的硬件資源開銷,如果使用32位的位寬,采用配置1和64位的位寬配置16,會有67.10%面積開銷和72.89%功耗開銷的差距,由此可見,選擇較為簡單的特權(quán)架構(gòu)配置可以極大地減小簡單嵌入式系統(tǒng)設(shè)計(jì)的硬件資源開銷.在實(shí)際設(shè)計(jì)RISC-V處理器時,結(jié)合現(xiàn)有開源處理器、IP核產(chǎn)品和本文評估的硬件資源開銷,簡單嵌入式系統(tǒng)推薦采用RV32,特權(quán)架構(gòu)配置選擇本文中的配置1,可以縮減流水線級數(shù)來進(jìn)一步降低硬件資源的開銷.在設(shè)計(jì)之初,可以考慮加入性能計(jì)數(shù)器來測評系統(tǒng)的性能和體系結(jié)構(gòu)的設(shè)計(jì),在真正投入使用時,將性能計(jì)數(shù)器刪減或減少監(jiān)測的內(nèi)容.這樣的系統(tǒng)設(shè)計(jì)對應(yīng)用場景的要求比較苛刻,只適用于某一固定功能的場景應(yīng)用,擁有所有地址的訪問權(quán)限有可能會造成系統(tǒng)崩潰,所以要在系統(tǒng)安全和硬件開銷之間做權(quán)衡.
當(dāng)今嵌入式系統(tǒng)處理的數(shù)據(jù)越來越多,包括我們的個人信息、安全密鑰、私人用戶習(xí)慣等.嵌入式系統(tǒng)的安全性在現(xiàn)代設(shè)計(jì)中變得越來越重要,但是為嵌入式系統(tǒng)注入強(qiáng)大的安全性并非易事.由于嵌入式系統(tǒng)的特性,不同于傳統(tǒng)的計(jì)算機(jī)(桌面計(jì)算機(jī)、服務(wù)器等),并且對系統(tǒng)所支持的安全性有很大的限制,因?yàn)樵谠O(shè)計(jì)嵌入式系統(tǒng)時需要受到較大的約束,這些約束包括處理能力、存儲容量和功耗開銷等.所以,在設(shè)計(jì)安全嵌入式系統(tǒng)時需要盡可能地考慮硬件資源上的開銷.RISC-V指令集加入PMP就是為了給系統(tǒng)提供安全保護(hù).以ARM架構(gòu)的嵌入式系統(tǒng)為例,其設(shè)計(jì)的ARM Cortex-M4就是采用兩種特權(quán)分級的系統(tǒng),這兩種分級為特權(quán)級和用戶級,主要功能是提供了一種存儲器訪問的保護(hù)機(jī)制,使得普通的用戶程序代碼不能意外地,甚至是惡意地執(zhí)行涉及到要害的操作.處理器支持兩個特權(quán)級,是一個基本的安全模型[27].
安全嵌入式系統(tǒng)對應(yīng)于文章中的配置3~配置6.從實(shí)驗(yàn)結(jié)果來看,安全嵌入式系統(tǒng)增加物理內(nèi)存保護(hù)單元相較于簡單嵌入式系統(tǒng)增加5%~20%的硬件資源開銷,采用性能計(jì)數(shù)器會增加大約3%的硬件資源開銷,采用異常委托處理機(jī)制會增加大約4%~8%的硬件資源開銷.綜合現(xiàn)有的RISC-V安全嵌入式系統(tǒng)的設(shè)計(jì)實(shí)踐和本文的實(shí)驗(yàn)結(jié)果來看,可以結(jié)合設(shè)計(jì)需求選擇RV32或RV64,采用三級~五級流水線,特權(quán)架構(gòu)的配置推薦實(shí)現(xiàn)本文中的配置5,性能計(jì)數(shù)器可在設(shè)計(jì)之初實(shí)現(xiàn)以便于設(shè)計(jì)人員探索體系結(jié)構(gòu)設(shè)計(jì)情況,在投入使用時選擇將該部分刪減或選擇較少的監(jiān)測內(nèi)容.在系統(tǒng)中加入兩種模式的異常處理的設(shè)計(jì)是有必要的,因?yàn)橄到y(tǒng)在運(yùn)行用戶程序時處于U模式,當(dāng)異常發(fā)生時,如果設(shè)置了異常委托處理機(jī)制,在U模式下可以處理部分異常,使得系統(tǒng)不必要進(jìn)入更高級別的特權(quán)模式,減少了系統(tǒng)在使用時模式的切換,系統(tǒng)執(zhí)行更高效.
安全嵌入式系統(tǒng)可以考慮搭載RTOS等輕量級操作系統(tǒng)來實(shí)現(xiàn)對系統(tǒng)硬件資源的充分利用.這類型的操作系統(tǒng)主要是用于處理實(shí)時應(yīng)用程序請求,能夠處理傳入的數(shù)據(jù),通常不需要緩沖延遲[28].在實(shí)現(xiàn)輕量級操作系統(tǒng)時,可以多個任務(wù)共享同一存儲空間,此時操作系統(tǒng)可以利用系統(tǒng)中的安全機(jī)制來保護(hù)獨(dú)立任務(wù)中的任務(wù)代碼(獨(dú)立任務(wù)的代碼是隔離的,不能互相訪問).
類Unix操作系統(tǒng)是繼承UNIX的設(shè)計(jì)風(fēng)格演變出來的系統(tǒng),這些操作系統(tǒng)有許多相似之處,包括FreeBSD及其子類、GNU/Linux、NetBSD及其子類等[29].這類操作系統(tǒng)能夠成為計(jì)算機(jī)系統(tǒng)的調(diào)度、控制中心.一方面,此類操作系統(tǒng)可以為裸機(jī)改造成為功能強(qiáng)大、各部件高效運(yùn)行、使用方便靈活、安全可靠的使用環(huán)境;另一方面,此類操作系統(tǒng)采用合理有效的方法組織多個用戶任務(wù)共享計(jì)算機(jī)的各種資源,最大限度地提高資源的利用率.
運(yùn)行類Unix操作系統(tǒng)對應(yīng)于文章中的配置7~配置16.從實(shí)驗(yàn)結(jié)果來看,運(yùn)行類Unix操作系統(tǒng)主要增加了基于頁面的虛擬內(nèi)存,相比于安全嵌入式系統(tǒng)而言,系統(tǒng)的硬件資源約增加20%,由此可見,從特權(quán)配置角度考慮,這種類型的系統(tǒng)占用資源最多,設(shè)計(jì)的系統(tǒng)應(yīng)用場景更豐富.除此之外,性能計(jì)數(shù)器模塊約占系統(tǒng)硬件資源開銷的1%,S模式的異常處理機(jī)制約占系統(tǒng)資源開銷的1%,U模式的異常處理機(jī)制約占系統(tǒng)資源開銷的1%.由此可見,在設(shè)計(jì)RISC-V運(yùn)行類Unix操作系統(tǒng)時,考慮該場景下應(yīng)用最豐富,占用資源最多,推薦配置16.在這種配置下,系統(tǒng)可以利用性能計(jì)數(shù)器對整體性能進(jìn)行監(jiān)測,可以使用多種異常處理機(jī)制來避免特權(quán)模式的頻繁切換.
從配置的分類來看,還存在不支持基于頁面的虛擬內(nèi)存,但是支持3種特權(quán)模式的配置可能,主要包括配置9,11,13,15.這4種配置相對于支持虛擬內(nèi)存的系統(tǒng)可以節(jié)省約15%的硬件資源.但是無法支持類Unix操作系統(tǒng),此類配置可以考慮采用物理地址尋址,內(nèi)存管理上采用連續(xù)空間分配的方式,如多道連續(xù)可變分區(qū)法[30]技術(shù),這種技術(shù)具有便于實(shí)現(xiàn)、訪問效率高、空間利用率低等特點(diǎn).但是這類配置可以提供操作系統(tǒng)使用時的系統(tǒng)調(diào)用功能.通過系統(tǒng)調(diào)用,不論異常是由什么特權(quán)級來處理,都將為系統(tǒng)提供更豐富的擴(kuò)展.此外,在現(xiàn)代CPU設(shè)計(jì)中,可以保留TLB,使用軟件PTW的方式來配合內(nèi)存管理單元完成地址轉(zhuǎn)換.這樣既可以減少硬件開銷,也可以實(shí)現(xiàn)基于頁面的虛擬內(nèi)存,但相對于硬件PTW而言,速度會較慢.
RISC-V特權(quán)架構(gòu)的模塊化特性滿足了各種系統(tǒng)的需求.十分精簡的機(jī)器模式以低成本的特征支持裸機(jī)嵌入式應(yīng)用,附加的用戶模式和物理內(nèi)存保護(hù)功能共同支持了更復(fù)雜的嵌入式系統(tǒng)中的多任務(wù)處理,管理模式和基于頁面的虛擬內(nèi)存提供了運(yùn)行現(xiàn)代操作系統(tǒng)所必需的靈活性.在本文中,基于RISC-V的特權(quán)架構(gòu),在開源CVA6上進(jìn)行了針對不同應(yīng)用場景的特權(quán)架構(gòu)設(shè)計(jì),分成兩類,共32種配置.實(shí)現(xiàn)了從簡單嵌入式系統(tǒng)到支持類Unix操作系統(tǒng)的系統(tǒng)特權(quán)架構(gòu)配置,采用參數(shù)化定義每種配置類型,在實(shí)際設(shè)計(jì)中,可以參照文章中給出的硬件開銷差異,選擇合適的特權(quán)架構(gòu)配置,更加平滑地進(jìn)行微處理器設(shè)計(jì).