




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一章RISC-V處理器架構(gòu)01RISC-V歷史與未來(lái)1.1指令集架構(gòu)基本概念1.2CISC與RISC1.3RISC-V與ARM、X86的不同1.4RISC-V發(fā)展歷史1.5RISC-V基金會(huì)1.6RISC-V的未來(lái)指令集架構(gòu)基本概念I(lǐng)SA(InstructionSetArchitecture,指令集架構(gòu))是與實(shí)現(xiàn)無(wú)關(guān)的指令行為規(guī)范。它定義了IS(InstructionSet,thelistofinstructions;指令集,一系列指令)及其操作的寄存器和數(shù)據(jù)類(lèi)型。它還定義了其他基本功能,如內(nèi)存訪問(wèn)和I/O。RISC-V就是一種ISA。有了指令集架構(gòu),便可以使用不同的處理器硬件實(shí)現(xiàn)方案來(lái)設(shè)計(jì)不同性能的處理器。處理器的具體硬件實(shí)現(xiàn)方案稱(chēng)為微架構(gòu)。微架構(gòu)(Microarchitecture,縮寫(xiě)為μarch或者uarch)是ISA的一種具體實(shí)現(xiàn)。它是一種硬件處理器設(shè)計(jì)。給定的一種ISA可以實(shí)現(xiàn)多種不同的微架構(gòu)。雖然不同的微架構(gòu)實(shí)現(xiàn)可能造成性能與成本的差異,但是軟件無(wú)須做任何修改便可以完全運(yùn)行在任何一款遵循同一指令集架構(gòu)實(shí)現(xiàn)的處理器上。RISC與CISCRISC(ReducedInstructionSetComputer,精簡(jiǎn)指令集計(jì)算機(jī)),是一種基于簡(jiǎn)單性原則的計(jì)算機(jī)體系結(jié)構(gòu)。RISC處理器通過(guò)精簡(jiǎn)指令集、減少每條指令的復(fù)雜性和執(zhí)行時(shí)間來(lái)提高性能,使得指令執(zhí)行更高效。RISC架構(gòu)的處理器通常將復(fù)雜操作分解為多個(gè)簡(jiǎn)單指令來(lái)完成,這種設(shè)計(jì)有助于提高流水線的效率,并且易于實(shí)現(xiàn)超標(biāo)量執(zhí)行等高級(jí)功能。RISC的典型代表:ARM,RISC-V系列處理器。CISC(ComplexInstructionSetComputer,復(fù)雜指令集計(jì)算機(jī)),與RISC相對(duì)。CISC架處理器具有復(fù)雜而豐富的指令集,指令可能長(zhǎng)度不固定,執(zhí)行時(shí)可能需要更多的時(shí)鐘周期,但允許一條指令完成較為復(fù)雜的操作,包括直接操作內(nèi)存等功能。相對(duì)于RISC,CISC處理器在單個(gè)指令上可能會(huì)提供更多功能,但也可能犧牲了一些效率和性能方面的優(yōu)勢(shì)。CISC典型代表:Intel的x86/64系列處理器。RISCCISCRISC與CISC的區(qū)別指令數(shù)量和復(fù)雜度CISC有大量的復(fù)雜指令,可以完成多個(gè)操作或?qū)ぶ纺J?,但使用率不高,增加了CPU的復(fù)雜度;RISC有少量的簡(jiǎn)單指令,只能完成單個(gè)操作或?qū)ぶ纺J?,但使用率高,降低了CPU的復(fù)雜度。指令長(zhǎng)度和格式CISC的指令長(zhǎng)度不固定,指令格式種類(lèi)多,譯碼較慢;RISC的指令長(zhǎng)度固定,指令格式種類(lèi)少,譯碼較快。內(nèi)存訪問(wèn)方式CISC可以訪問(wèn)內(nèi)存的指令不受限制,可以直接對(duì)內(nèi)存進(jìn)行操作;RISC只有Load/Store指令可以訪問(wèn)內(nèi)存,其余指令只能對(duì)寄存器進(jìn)行操作。寄存器數(shù)量和使用CISC有較少的寄存器,有些寄存器有專(zhuān)門(mén)的用途;RISC有大量的寄存器,所有寄存器都是通用的。指令執(zhí)行時(shí)間和效率CISC的指令執(zhí)行時(shí)間相差很大,大多數(shù)指令需要多個(gè)時(shí)鐘周期才能完成;RISC的指令執(zhí)行時(shí)間基本相同,大多數(shù)指令只需要一個(gè)時(shí)鐘周期就能完成??刂破髟O(shè)計(jì)和編譯器優(yōu)化CISC的控制器大多數(shù)采用微程序控制,難以用優(yōu)化編譯生成高效的目標(biāo)代碼程序;RISC的控制器采用組合邏輯控制,注重軟件優(yōu)化,由編譯器完成大部分優(yōu)化工作RISCCISCCISC的優(yōu)點(diǎn)和缺點(diǎn)指令豐富,功能強(qiáng)大,可以完成多個(gè)操作或?qū)ぶ纺J?,處理特殊任?wù)效率高。尋址方式靈活,可以訪問(wèn)內(nèi)存的指令不受限制,可以直接對(duì)內(nèi)存進(jìn)行操作。以微程序控制器為核心,性能強(qiáng)大,指令存儲(chǔ)器與數(shù)據(jù)存儲(chǔ)器共享同一個(gè)物理存儲(chǔ)空間。需要較少的內(nèi)存空間,因?yàn)橹噶铋L(zhǎng)度不固定,可以用較少的指令來(lái)完成復(fù)雜的任務(wù)。指令使用率不均衡,大多數(shù)指令需要多個(gè)時(shí)鐘周期才能完成,影響計(jì)算機(jī)運(yùn)算速度。不利于采用先進(jìn)結(jié)構(gòu)提高性能,結(jié)構(gòu)復(fù)雜不利于VLSI(超大規(guī)模集成電路)實(shí)現(xiàn)。難以用優(yōu)化編譯生成高效的目標(biāo)代碼程序,因?yàn)橹噶罹幋a復(fù)雜、長(zhǎng)度可變。點(diǎn)優(yōu)點(diǎn)缺精簡(jiǎn)指令集系統(tǒng)RISC的典型特點(diǎn)指令格式的規(guī)格化和簡(jiǎn)單化。采用Load/Store(裝載/存儲(chǔ))指令結(jié)構(gòu)。采用面向寄存器組的指令。單周期的執(zhí)行無(wú)微代碼的硬連線控制。注重編譯的優(yōu)化,力求有效地支撐高級(jí)語(yǔ)言程序。采用高效的流水線操作。RISC-V的設(shè)計(jì)目標(biāo)要適合設(shè)計(jì)各種規(guī)模的處理器,包括從最小的嵌入式控制器,到最快的高性能計(jì)算機(jī)。要適用于所有實(shí)現(xiàn)技術(shù),包括FPGA(Field-ProgrammableGateArray,現(xiàn)場(chǎng)可編程邏輯門(mén)陣列),ASIC(Application-SpecificIntegratedCircuit,專(zhuān)用集成電路),全定制芯片,甚至未來(lái)的制造元件技術(shù)。能用于高效實(shí)現(xiàn)所有微體系結(jié)構(gòu),包括微程序或硬連線控制、順序、解耦或亂序流水線、單發(fā)射或超標(biāo)量等。要穩(wěn)定,基礎(chǔ)ISA不會(huì)改變。更重要的是,它不能像以往的公司專(zhuān)有ISA那樣消亡。要兼容各種流行的軟件棧和編程語(yǔ)言。要支持高度定制化,成為定制加速器的基礎(chǔ),以應(yīng)對(duì)摩爾定律的放緩。RISC-V與ARM、x86的區(qū)別RISC-V與ARM、x86的區(qū)別ARM-32(1986)MIPS-32(1986)X86-32(1978)RV32I(2010)成本整數(shù)乘法必選整數(shù)乘法必選整數(shù)乘法必選8位和16位操作。無(wú)8位和16位操作。整數(shù)乘除法可選(RV32M)簡(jiǎn)潔無(wú)零寄存器。條件執(zhí)行指令。尋址模式復(fù)雜。棧指令(push/pop)廳、算術(shù)/邏輯指令中可移位立即數(shù)有零擴(kuò)展和符號(hào)擴(kuò)展。部分算術(shù)指令會(huì)觸發(fā)溢出自陷無(wú)零寄存器。過(guò)程調(diào)用返回指令(裶脈?停nter/leave復(fù)雜。棧指令(push/pop)。尋址模式復(fù)雜。循環(huán)指令零寄存器x0。立即數(shù)僅符號(hào)擴(kuò)展。尋址模式唯一。無(wú)條件執(zhí)行。無(wú)復(fù)雜調(diào)用/返回指令和棧指令。算術(shù)溢出無(wú)自陷。獨(dú)立的移位指令性能分支指令條件碼。指令格式中源/目的寄存器位置不固定。多字讀數(shù)。立即數(shù)需計(jì)算。PC作為通用寄存器指令格式中源/目的寄存器位置不固定分支指令條件碼。二操作數(shù)指令比較-跳轉(zhuǎn)指令(無(wú)條件碼)。三操作數(shù)指令。無(wú)多字讀取。指令格式中源/目的寄存器位置固定、立即數(shù)為常數(shù)。PC不是通用寄存器架構(gòu)和實(shí)現(xiàn)分離像通用寄存器般寫(xiě)入PC暴露流水線長(zhǎng)度延遲分支。延遲取數(shù)。乘除法專(zhuān)用的HI和LO寄存器部分寄存器不通用(AX、CX、DX、DI、SI有特殊用途)無(wú)延遲分支。無(wú)延遲讀數(shù)。通用寄存器提升空間可用操作碼空間有限可用操作碼空間有限可用操作碼空間豐富程序大小僅32位指令(Thumb-2為獨(dú)立ISA)僅32位指令(mi-croMIPS為獨(dú)立ISA)指令長(zhǎng)度可變,但選擇很少32位指令+16位RV32C擴(kuò)展易于編程/編譯/鏈接15存器。內(nèi)存數(shù)據(jù)必須對(duì)齊。尋址模式不規(guī)則。性能計(jì)數(shù)器不一致內(nèi)存數(shù)據(jù)必須對(duì)齊。性能計(jì)數(shù)器不一致僅8個(gè)存器。無(wú)PC相對(duì)數(shù)據(jù)尋址模式。性能計(jì)數(shù)器不一致31個(gè)存器。數(shù)據(jù)不必對(duì)齊。PC相對(duì)數(shù)據(jù)尋址模式。數(shù)據(jù)尋址模式對(duì)稱(chēng)。性能計(jì)數(shù)器在架構(gòu)中定義RISC-V與ARM、x86的區(qū)別(指令舉例)開(kāi)源指令集架構(gòu)的比較RISC-V指令集架構(gòu)與其他典型開(kāi)源指令集架構(gòu)的比較與商業(yè)指令集架構(gòu)比較ARMCorte-A5與采用RISC-V指令集架構(gòu)的Rocket比較RISC-V歷史五代RISC架構(gòu)處理器RISC-V是一種基于RISC規(guī)范的開(kāi)放標(biāo)準(zhǔn)指令集架構(gòu)(ISA),通過(guò)開(kāi)放標(biāo)準(zhǔn)協(xié)作促進(jìn)了新時(shí)代處理器的創(chuàng)新。RISC-V應(yīng)用領(lǐng)域RISC-V已被學(xué)術(shù)界和工業(yè)界廣泛采用,并被應(yīng)用到各種不同的使用場(chǎng)景中,包括嵌入式系統(tǒng)、高性能計(jì)算和物聯(lián)網(wǎng)(IoT)設(shè)備。此外,它也被考慮用于未來(lái)的百億億級(jí)超級(jí)計(jì)算機(jī)和其他高性能計(jì)算應(yīng)用程序中。RISC-V應(yīng)用領(lǐng)域物聯(lián)網(wǎng)(IoT)邊緣計(jì)算人工智能(AI)無(wú)線連接芯片工業(yè)控制芯片開(kāi)發(fā)者社區(qū)與教育RISC-V基金會(huì)概述2015年RISC-V基金會(huì)正式成立,它是一家非營(yíng)利組織,負(fù)責(zé)維護(hù)RISC-V指令集標(biāo)準(zhǔn)手冊(cè)和架構(gòu)文檔,建立RISC-V生態(tài)。基金會(huì)成員可以使用RISC-V商標(biāo)。由于RISC-V架構(gòu)使用BSD
(BerkeleySoftwareDistribution,伯克利軟件發(fā)行版)開(kāi)源協(xié)議,給予使用者很大自由,允許使用者修改和重新發(fā)布開(kāi)源代碼,也允許基于開(kāi)源代碼開(kāi)發(fā)商業(yè)軟件發(fā)布和銷(xiāo)售。同年,項(xiàng)目組主要成員成立了SiFive公司,以推動(dòng)RISC-V的商業(yè)化應(yīng)用。RISC-V基金會(huì)遵循的原則RISC-V指令集及相關(guān)標(biāo)準(zhǔn)必須對(duì)所有人開(kāi)放且無(wú)須授權(quán)。RISC-V指令集規(guī)范必須能夠在線下載。RISC-V的兼容性測(cè)試套件必須提供源碼下載
RISC-V基金會(huì)概述2019年RISC-V基金會(huì)總部從美國(guó)遷往瑞士
,并于2020年3月完成在瑞士的注冊(cè),基金會(huì)更名為RISC國(guó)際基金會(huì)(RISCInternationalAssociation),這個(gè)行動(dòng)正是向全世界傳達(dá)RISC-V堅(jiān)持開(kāi)放自由、為全球半導(dǎo)體行業(yè)服務(wù)的理念,使任何組織和個(gè)人都可以不受地緣政治影響、自由平等地使用RISC-V?,F(xiàn)在,基金會(huì)成員成員已經(jīng)超過(guò)1000多家,包括了高通、英特爾、NXP、谷歌、英偉達(dá)、華為、騰訊、阿里巴巴等國(guó)內(nèi)外知名企業(yè)。在中央網(wǎng)信辦、工業(yè)和信息化部、中國(guó)科學(xué)院等的支持和指導(dǎo)下,中國(guó)開(kāi)放指令生態(tài)(RISC-V)聯(lián)盟于2018年11月8日浙江烏鎮(zhèn)舉行的第五屆互聯(lián)網(wǎng)大會(huì)上正式宣布成立。中國(guó)開(kāi)放指令生態(tài)(RISC-V)聯(lián)盟旨在以RISC-V指令集為抓手,聯(lián)合學(xué)術(shù)及產(chǎn)業(yè)界推動(dòng)開(kāi)源開(kāi)放指令芯片及生態(tài)的發(fā)展,積極推動(dòng)建立為全世界共享的開(kāi)源芯片生態(tài)。RISC-V的未來(lái)RISC-V是一種很有前景的指令集架構(gòu),擁有十分廣闊的發(fā)展空間。硬件的新發(fā)展隨著社會(huì)需求的不斷增長(zhǎng)和相關(guān)技術(shù)的不斷進(jìn)步,會(huì)不斷涌現(xiàn)出各種新類(lèi)型硬件。如何適應(yīng)新的工作環(huán)境,
適配這些新的硬件,而繼續(xù)保證RISC-V系統(tǒng)的功能完整性、性能優(yōu)越性、安全穩(wěn)定性,將成為隨之而來(lái)的問(wèn)題。
現(xiàn)有的一些RISC-V異構(gòu)硬件解決方案將在解決這一問(wèn)題中發(fā)揮重要的作用;而在硬件方面取得新突破后,RISC-V架構(gòu)自身是否也會(huì)隨之發(fā)生新的變化,同樣值得關(guān)注。
與新技術(shù)結(jié)合RISC-V自身也可以與新技術(shù)結(jié)合,在功能、性能、安全等領(lǐng)域?qū)崿F(xiàn)新的突破.例如,隨著神經(jīng)科學(xué)和腦科學(xué)的不斷發(fā)展,通過(guò)腦機(jī)接口技術(shù),可以實(shí)現(xiàn)生命體對(duì)機(jī)器的直接操控或影響;RISC-V便可以與此技術(shù)結(jié)合,在生命醫(yī)療、自動(dòng)化控制等領(lǐng)域發(fā)揮更大的作用。02RISC-V架構(gòu)特點(diǎn)2.1RISC-V架構(gòu)特點(diǎn)2.2RISC-V硬件平臺(tái)2.3RISC-V安全策略RISC-V架構(gòu)特點(diǎn)——開(kāi)放性與許可伯克利大學(xué)研究團(tuán)隊(duì)認(rèn)為,指令集ISA作為軟硬件接口的一種說(shuō)明和描述規(guī)范,不應(yīng)該像ARM、PowerPC、X86等指令集那樣需要付費(fèi)授權(quán)才能使用,而應(yīng)該開(kāi)放(Open)和免費(fèi)(Free)。他們選擇的BSD開(kāi)源協(xié)議給予使用者很大自由,允許使用者修改和重新發(fā)布開(kāi)源代碼,也允許基于開(kāi)源代碼開(kāi)發(fā)商業(yè)軟件發(fā)布和銷(xiāo)售。這樣RISC-V架構(gòu)既不會(huì)受到單一商業(yè)體的控制,也不會(huì)有商業(yè)上的限制。RISC-V架構(gòu)特點(diǎn)——簡(jiǎn)潔的設(shè)計(jì)RISC-V架構(gòu)在吸收各體系結(jié)構(gòu)的優(yōu)點(diǎn)基礎(chǔ)上,重新開(kāi)始設(shè)計(jì),擺脫了舊有技術(shù)的束縛。新設(shè)計(jì)技術(shù)和方法的引入大大簡(jiǎn)化了RISC-V指令集的設(shè)計(jì),使得RISC-V架構(gòu)的指令數(shù)目非常的簡(jiǎn)潔,將指令集壓縮到了最低限度,基本的RISC-V指令數(shù)目?jī)H有40多條,通過(guò)可選的模塊化指令來(lái)擴(kuò)展其功能,以應(yīng)用于不同的領(lǐng)域。簡(jiǎn)潔的設(shè)計(jì)也使得開(kāi)發(fā)者的學(xué)習(xí)門(mén)檻大大降低,可以較快地掌握所需的技術(shù),加快項(xiàng)目開(kāi)發(fā)進(jìn)程。RISC-VISA的定義盡可能避免了實(shí)現(xiàn)細(xì)節(jié),它應(yīng)該被理解為是各種實(shí)現(xiàn)方案的軟件可見(jiàn)接口,而不是對(duì)某個(gè)特定硬件的設(shè)計(jì)。然而,本著簡(jiǎn)化ISA的原則,多個(gè)設(shè)計(jì)決策依然會(huì)受到一些硬件實(shí)現(xiàn)的影響,例如RISC-V將乘法擴(kuò)展與基本整數(shù)ISA分開(kāi)。RISC-V架構(gòu)特點(diǎn)——模塊化的指令集RISC-V的指令集使用模塊化的方式進(jìn)行組織,提供大量自定義編碼空間以支持對(duì)指令集的擴(kuò)展,從而允許開(kāi)發(fā)者根據(jù)資源、能耗、權(quán)限、實(shí)時(shí)性等不同需求,基于部分特定的模塊和擴(kuò)展指令集進(jìn)行模塊的組合,實(shí)現(xiàn)了強(qiáng)大的系統(tǒng)可定制化能力。RISC-V指令集每個(gè)模塊使用一個(gè)英文字母表示,其中字母I表示整數(shù)指令集,是唯一強(qiáng)制要求實(shí)現(xiàn)的指令集,能夠?qū)崿F(xiàn)完整的軟件編譯器。其他的指令子集部分均為可選的模塊,其代表性的模塊包括M/A//F/D/C等。RISC-V架構(gòu)特點(diǎn)——日趨完善的生態(tài)系統(tǒng)良好的生態(tài)系統(tǒng)對(duì)發(fā)展芯片技術(shù),以及形成良性可持續(xù)的芯片產(chǎn)業(yè)循環(huán)是至關(guān)重要的。與其他開(kāi)源指令集相比,RISC-V在社區(qū)支持方面更完善,支持包括Linux、SeL4、BSD等通用操作系統(tǒng),支持FreeRTOS和RT-thread等實(shí)時(shí)操作系統(tǒng),支持GCC(GNUCompilerCollection,GNU編譯器套件)、LLVM(LowLevelVirtualMachine,底層虛擬機(jī))等通用編譯和調(diào)試工具鏈,支持C/C++、Java、Python、OpenCL和Go等主流編程語(yǔ)言。RISC-V硬件平臺(tái)RISC-V依托的硬件平臺(tái)可以含有組件各種物理內(nèi)存結(jié)構(gòu)03固定功能加速器(一種不可編程的固定功能單元,或者專(zhuān)用于特定任務(wù)的核心)0201帶有其他非兼容RISC-V核心(如IPCore)的一個(gè)或多個(gè)兼容RISC-V的處理核心I/O設(shè)備04組件通信與交互結(jié)構(gòu)05從系統(tǒng)的角度看,這些硬件平臺(tái)組件可以有多種組織形式,從單核心的微控制器到包含數(shù)千個(gè)節(jié)點(diǎn)的集群:(每個(gè)節(jié)點(diǎn)都是一個(gè)共享內(nèi)存的多核心服務(wù)器);甚至可以在小型片上系統(tǒng)(system-on-a-chip,簡(jiǎn)稱(chēng)SoC)中組織成多層多處理器結(jié)構(gòu),來(lái)協(xié)助模塊化開(kāi)發(fā)或者提供子系統(tǒng)間的安全隔離。
一些典型的通用RISC-V處理器8種典型的嵌入式RISC-V處理器RISC-V系統(tǒng)安全策略03RISC-V指令集3.1RISC-V的系統(tǒng)地位3.2大端模式編碼vs小端模式編碼3.3RISC-V指令集概述3.4RV32I基礎(chǔ)指令集指令集是一組指令的集合,而指令是處理器進(jìn)行操作的最小單元。ISA(InstructionSetArchitecture,指令集架構(gòu))是與實(shí)現(xiàn)無(wú)關(guān)的指令行為規(guī)范。它定義了IS(InstructionSet,thelistofinstructions;指令集,一系列指令)及其操作的寄存器和數(shù)據(jù)類(lèi)型。它還定義了其他基本功能,如內(nèi)存訪問(wèn)和I/O。RISC-V就是一種ISA。有了指令集架構(gòu),便可以使用不同的處理器硬件實(shí)現(xiàn)方案來(lái)設(shè)計(jì)不同性能的處理器。RISC-V指令集架構(gòu)ISARISC-V的系統(tǒng)地位RISC-V作為一種指令集架構(gòu),一方面,它規(guī)定了硬件設(shè)備在設(shè)計(jì)電路、組裝元件時(shí)應(yīng)當(dāng)實(shí)現(xiàn)的功能目標(biāo);根據(jù)指令集的內(nèi)容,決定運(yùn)算單元、存儲(chǔ)單元等元件的種類(lèi)、數(shù)目、位寬及接線方式。應(yīng)用程序(高級(jí)語(yǔ)言代碼)頂層應(yīng)用上層體系指令集架構(gòu)底層硬件編譯匯編鏈接編譯器匯編器鏈接器預(yù)處理后代碼匯編代碼引用庫(kù)代碼目標(biāo)代碼(含機(jī)器指令)可執(zhí)行代碼(機(jī)器指令)RISC-V規(guī)范硬件電路操作預(yù)處理RISC-V在系統(tǒng)中的定位另一方面,它是對(duì)硬件能力的一種抽象,提供了機(jī)器所能完成的操作種類(lèi)、地址空間大小、數(shù)據(jù)格式、訪問(wèn)權(quán)限信息;上層軟件應(yīng)用可以將指令集視為硬件運(yùn)行環(huán)境,而無(wú)需特別關(guān)注具體的硬件實(shí)體。大端模式編碼
vs小端模式編碼大端模式編碼(BigEndianEncoding,也稱(chēng)大端序或大端字節(jié)序)從最高有效位到最低有效位進(jìn)行傳輸。小端模式編碼(LittleEndianEncoding,也稱(chēng)小端序或小端字節(jié)序)從最低有效位到最高有效位進(jìn)行傳輸。RISC-V體系架構(gòu)使用小端編碼。大端編碼小端編碼對(duì)指令進(jìn)行編號(hào)從左到右對(duì)指令位進(jìn)行編號(hào)從右到左對(duì)指令位進(jìn)行編號(hào)讀取指令編碼字段從左到右讀取指令編碼字段從右到左讀取指令編碼字段字節(jié)存儲(chǔ)方式被存放字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在存儲(chǔ)系統(tǒng)的低地址中,而被存放的字?jǐn)?shù)據(jù)的低字節(jié)則存放在存儲(chǔ)系統(tǒng)的高地址中。存儲(chǔ)系統(tǒng)的低地址中存放的是被放字?jǐn)?shù)據(jù)中的低字節(jié)內(nèi)容,存儲(chǔ)系統(tǒng)的高地址存放的是被存字?jǐn)?shù)據(jù)中的高字節(jié)內(nèi)容。大端編碼vs小端編碼例如,一個(gè)32位的字?jǐn)?shù)據(jù):0x12345678一種簡(jiǎn)單的大小端排判斷方法RISC-V體系架構(gòu)使用小端編碼。大端模式是被存放字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在存儲(chǔ)系統(tǒng)的低地址中,而被存放的字?jǐn)?shù)據(jù)的低字節(jié)則存放在存儲(chǔ)系統(tǒng)的高地址中。小端模式中,存儲(chǔ)系統(tǒng)的低地址中存放的是被放字?jǐn)?shù)據(jù)中的低字節(jié)內(nèi)容,存儲(chǔ)系統(tǒng)的高地址存放的是被存字?jǐn)?shù)據(jù)中的高字節(jié)內(nèi)容。大端:小端:思考題:大小端0xb32045000xddddddd00xb32045000xddddddd0f6f673734b4bcdcddada0000實(shí)例:變量A:wordA=0xf6734bcd,在內(nèi)存中的起始地址為0xb3204500變量B:halfwordB=218,在內(nèi)存中的起始地址為0xddddddd0問(wèn)題:halfwordB=218與wordC=218在內(nèi)存中的存放方式有何不同?請(qǐng)分大端和小端兩種情況說(shuō)明。RISC-V指令集架構(gòu)概述RISC-V指令集架構(gòu)最初的目標(biāo)包括一個(gè)完全開(kāi)源的ISA,可供學(xué)術(shù)界和工業(yè)界免費(fèi)使用一個(gè)不僅用于仿真或二進(jìn)制翻譯,還能真正直接用于原生硬件實(shí)現(xiàn)的ISA。一個(gè)不過(guò)度傾向某種特定微架構(gòu)風(fēng)格(例如,微碼、順序、解耦、亂序)或?qū)崿F(xiàn)技術(shù)(例如full-custom、ASIC、FPGA)的ISA,不過(guò)如果需要實(shí)現(xiàn)其中的任意一種,它都應(yīng)該是效率最高的。從ISA中分割出一個(gè)小的基礎(chǔ)整數(shù)ISA,用于定制加速器或教育目的,以及可選的標(biāo)準(zhǔn)擴(kuò)展,用于支持通用軟件開(kāi)發(fā)。同時(shí)支持32bit和64bit地址空間的變體,便于應(yīng)用、操作系統(tǒng)內(nèi)核或硬件的實(shí)現(xiàn)。一個(gè)支持高度并行多核或眾核實(shí)現(xiàn)的ISA,包括異構(gòu)多處理器??蛇x的可變長(zhǎng)度指令,用于擴(kuò)展指令編碼空間,以及支持可選的密集指令編碼,以提高性能、靜態(tài)代碼大小和能效。一個(gè)完全虛擬化的ISA,可簡(jiǎn)化虛擬機(jī)監(jiān)控程序的開(kāi)發(fā)。一個(gè)讓新型特權(quán)架構(gòu)的設(shè)計(jì)實(shí)踐變得更簡(jiǎn)單的ISA。RISC-V指令集架構(gòu)概述RISC-V指令集是模塊化的,它由兩種類(lèi)型的ISA組合而成:這種模塊化設(shè)計(jì)允許為嵌入式系統(tǒng)、個(gè)人計(jì)算機(jī)和機(jī)架式高性能計(jì)算機(jī)等創(chuàng)建RISC-V處理器。RISC-V的每個(gè)模塊化規(guī)范都經(jīng)過(guò)一個(gè)設(shè)計(jì)過(guò)程,其中設(shè)計(jì)的成熟度由其狀態(tài)指示,可以是“開(kāi)放的”、“凍結(jié)的”或“批準(zhǔn)的”。雖然指令集規(guī)范存在32位和64位兩種地址空間形式,但RISC-V設(shè)計(jì)本身允許使用任何位寬的地址空間?;局噶罴瘜?shí)現(xiàn)了少量的基本計(jì)算指令(如整數(shù)計(jì)算)基本ISA01ISA擴(kuò)展則實(shí)現(xiàn)了一些僅在某些應(yīng)用中需要的指令(如乘法、浮點(diǎn)或原子操作)一組擴(kuò)展ISA02RISC-V指令集RISC-V指令集采用模塊化的方式進(jìn)行組織,由基本指令集+擴(kuò)展指令集組成。RISC-V指令集提供了大量自定義編碼空間以支持對(duì)指令集的擴(kuò)展,從而允許開(kāi)發(fā)者根據(jù)資源、能耗、權(quán)限、實(shí)時(shí)性等不同需求,基于部分特定的模塊和擴(kuò)展指令集進(jìn)行模塊的組合,實(shí)現(xiàn)了強(qiáng)大的系統(tǒng)可定制化能力。其中RV32I是RISC-V指令架構(gòu)中的基本指令集,RISC-V指令集架構(gòu)僅僅需要RV32I,就能運(yùn)行一個(gè)完整的軟件棧,其他特殊功能的指令集在這個(gè)基本指令集上疊加。RISC-V指令集RV32I是RISC-V架構(gòu)中的基礎(chǔ)整數(shù)指令集,其中的“RV”表示RISC-V,“32”表示寄存器的位寬為32位,“I”代表整數(shù)。32位的RISC-V架構(gòu),指令和數(shù)據(jù)尋址空間就是2的32次方,4GB空間。RISC-V指令集采用固定長(zhǎng)度指令,除了“C”指令集(壓縮指令)中的指令長(zhǎng)度為16位以外,其他指令集中的指令長(zhǎng)度都是32位。RV64I和RV128I指令集中的指令長(zhǎng)度也是32位,只是擴(kuò)展了64位、128位的數(shù)據(jù)訪問(wèn)指令。RISC-V指令集架構(gòu)僅支持小端模式,以簡(jiǎn)化硬件的實(shí)現(xiàn)。RV32I基礎(chǔ)指令集RISC-V架構(gòu)中,程序指針寄存器PC是獨(dú)立的,在指令執(zhí)行過(guò)程中PC值自動(dòng)變化。這一點(diǎn)和ARM32(V8版本之前)十分不同1個(gè)32位的程序計(jì)數(shù)器寄存器PC其中x0寄存器較為特殊,被設(shè)置為硬連線的常數(shù)0。這一點(diǎn)設(shè)計(jì)十分獨(dú)特32個(gè)32位的通用寄存器(GeneralPurposeRegisters)x0到x31RISC-V指令集架構(gòu)還定義了一組CSR寄存器),使用特定的CSR指令訪問(wèn),用來(lái)配置或記錄處理器內(nèi)核運(yùn)行狀態(tài)。CSR寄存器是處理器核內(nèi)部的寄存器,在CSR指令中使用12位獨(dú)立的地址編碼空間,其中的高4位地址空間用于編碼CSR的讀寫(xiě)權(quán)限及不同特權(quán)級(jí)別下的訪問(wèn)權(quán)限??刂坪蜖顟B(tài)寄存器(ControlandStatusRegister,CSR)RV32I基礎(chǔ)指令集指令的前7位為主要操作碼,用于標(biāo)識(shí)指令。源寄存器(rs1始終位于第15至19位,rs2位于第20至24位)和目標(biāo)寄存器(rd位于第7至11位)字段。函數(shù)字段或次要操作碼,命名為funct7或者funct3,具體取決于它們的位寬。Funct7占用R類(lèi)型指令的最后7位,funct3總是占用位第12至14位。立即數(shù)字段,它總是出現(xiàn)在靠近指令末尾(左側(cè))的位置,并且根據(jù)指令類(lèi)型進(jìn)行不同的編碼。特權(quán)級(jí)的含義簡(jiǎn)單來(lái)說(shuō)就是指一條指令可以執(zhí)行的所有操作中,只有一部分是任何用戶都可以執(zhí)行的。而其中最微妙的那些操作,如果使用不當(dāng)可能會(huì)危及機(jī)器。這些操作只能由一些“特權(quán)”用戶執(zhí)行,例如操作系統(tǒng)。40條獨(dú)特的32位非特權(quán)指令,這些指令有六種不同的格式(R、I、S、B、U、J),但有一些重復(fù)字段:24條額外的獨(dú)特32位特權(quán)指令,采用兩種格式(R和I)040504RISC-V指令編碼格式4.1RISC-V指令編碼格式4.2案例4.3RV32I和RV64I區(qū)別RV32I六種指令編碼格式R“Register”類(lèi)型——這種格式用于算術(shù)類(lèi)型的寄存器-寄存器操作,例如ADD、SUB、布爾操作和移位。I“Immediate”類(lèi)型——這種格式用于帶有立即數(shù)、跳轉(zhuǎn)和鏈接寄存器的算術(shù)/邏輯/移位指令,以及環(huán)境調(diào)用和LOAD指令。S“Store”類(lèi)型-這種格式用于STORE(存儲(chǔ))類(lèi)指令。B“Branch”類(lèi)型-這種格式用于BRANCH(分支)類(lèi)指令。U"UpperImmediate"類(lèi)型-這種格式用于那些使用高位立即數(shù)的指令(如LUI和AUIPC)。J“Jump”型-這種格式用于JAL(jumpandlink)指令。RV32I六種指令編碼格式RV32I指令編碼格式01opcode(操作碼)字段:表示指令類(lèi)型。02funct3和funct7(功能碼)字段:與opcode字段一起定義指令的功能。03rd字段:表示目標(biāo)寄存器的編號(hào)。04rs1字段:表示第一個(gè)源操作寄存器的編號(hào)。05rs2字段:表示第二個(gè)源操作寄存器的編號(hào)。06imm字段:表示立即數(shù)。RV32I指令編碼格式示例:加法指令:addx9,x20,x8這是R類(lèi)型指令,由兩個(gè)源寄存器rs2和rs1,一個(gè)目的寄存器rd,操作碼opcode,funct3字段和funct7字段組成。其指令編碼如下表所示:RV32I指令編碼格式示例:加法指令:addix9,x8,1這是I類(lèi)型指令,由12位的立即數(shù)和一個(gè)源寄存器,一個(gè)目的寄存器rd,操作碼opcode和funct3字段組成。其指令編碼如下表所示:RV32I指令編碼格式示例:存儲(chǔ)指令:swx1,1000(x2)這是S類(lèi)型指令,其指令編碼如下表所示:RV32I和
RV64I區(qū)別RV64I與RV32I共享幾乎相同的32位指令,添加了在32位指令對(duì)應(yīng)的字、雙字和長(zhǎng)整型版本的指令,操作的寄存器擴(kuò)展為了64位例如:addw、addiw、subw、sllw,slliw,srlw,srliw,sraw,sraiw等。RV64I是RISC-VISA的64位變體,是64位整數(shù)基礎(chǔ)指令集。在RV64I中,寄存器寬度為64位,地址空間也是64位,支持64位整數(shù)運(yùn)算和操作。RV64I在RV32I的基礎(chǔ)上添加了少量的新指令以支持64位操作例如:ld和sd指令(加載和存儲(chǔ)64位雙字?jǐn)?shù)據(jù)),lwu加載無(wú)符號(hào)字?jǐn)?shù)據(jù)等。RISC-V指令的操作碼RV32I指令格式中opcode字段為7位(Bit[6:0]),其中最低兩位的編碼為11表示指令長(zhǎng)度為32位。05RISC-V中的寄存器5.1通用寄存器5.2X0寄存器5.3PC與CSRRISC-V中的寄存器在RISC-V指令集架構(gòu)中,寄存器組主要包括通用寄存器(GeneralPurposeRegisters)、控制狀態(tài)寄存器(ControlandStatusRegister,CSR)和一個(gè)獨(dú)立的程序指針寄存器PC(ProgramCounter,程序計(jì)數(shù)器)。如果是32位的RISC-V架構(gòu)(RV32I),每個(gè)通用寄存器的寬度為32位;如果是64位的RISC-V架構(gòu)(RV64I),每個(gè)通用寄存器的寬度為64位。在資源受限的使用環(huán)境下,RISC-V定義了可選的嵌入式架構(gòu)(使用擴(kuò)展指令集“E”),則只有x0~x15這16個(gè)通用整數(shù)寄存器。且由于嵌入式架構(gòu)只支持32位的RISC-V架構(gòu)(即RV32E),所以每個(gè)通用寄存器的寬度為32位。在前面介紹的指令編碼格式中可見(jiàn),RV32I和RV64I指令都使用5位編碼來(lái)引用寄存器,并且任何給定的指令最多引用三個(gè)寄存器:兩個(gè)源寄存器rs1和rs2,以及一個(gè)目的地寄存器rd)。源寄存器rs1始終位于指令的第15至19位,源寄存器rs2位于第20至24位,目標(biāo)寄存器rd位于第7至11位。如果支持“F”、Q”和“D”三個(gè)浮點(diǎn)運(yùn)算指令集,則需要另外增加32個(gè)通用浮點(diǎn)寄存器f0~f31,通用浮點(diǎn)寄存器的寬度分別是32位、64位和128位。對(duì)照學(xué)習(xí):ARM32通用寄存器組(v7版本)RISC-V中的通用寄存器基本的通用寄存器(GeneralPurposeRegisters)包含32個(gè)通用整數(shù)寄存器,分別是x0~x31。其中x0寄存器較為特殊,被設(shè)置為硬連線的常數(shù)0。RISC-V中的寄存器為了使匯編程序易于閱讀,在匯編程序中每個(gè)寄存器都有一個(gè)采用應(yīng)用程序二進(jìn)制接口協(xié)議(ApplicationBinaryInterface,ABI)定義的別名。下面是一個(gè)完整的整數(shù)寄存器注釋表:RISC-V中的寄存器RISC-VISA能如此簡(jiǎn)潔的一個(gè)重要原因是,它為常量0專(zhuān)門(mén)分配一個(gè)寄存器。由于ARM-32和x86-32沒(méi)有零寄存器,它們需要通過(guò)原生指令實(shí)現(xiàn)這些操作。但對(duì)于RISC-V,只需簡(jiǎn)單地將零寄存器作為其中一個(gè)操作數(shù),即可通過(guò)RV32I指令實(shí)現(xiàn)相同操作。X0寄存器的使用大多數(shù)RISC-V偽指令依賴(lài)于x0,故將32個(gè)寄存器的其中一個(gè)硬連線為0能利用偽指令提供許多常用操作,如跳轉(zhuǎn)、返回和等于零時(shí)分支,這極大簡(jiǎn)化了RISC-V指令集。CSR寄存器RISC-V指令集架構(gòu)還定義了一組控制和狀態(tài)寄存器(ControlandStatusRegister,CSR),使用特定的CSR指令訪問(wèn),用來(lái)配置或記錄處理器內(nèi)核運(yùn)行狀態(tài)。CSR寄存器是處理器核內(nèi)部的寄存器,在CSR指令中使用12位獨(dú)立的地址編碼空間,其中的高4位地址空間用于編碼CSR的讀寫(xiě)權(quán)限及不同特權(quán)級(jí)別下的訪問(wèn)權(quán)限。程序指針寄存器PC
這里給出一個(gè)具體的例子。裝入高位立即數(shù)(lui)將20位立即數(shù)裝入寄存器的高20位,可與后續(xù)一條RV32I立即數(shù)指令共同構(gòu)造出32位常數(shù)。PC加高位立即數(shù)(auipc)使得僅需2條指令即可實(shí)現(xiàn)任意偏移的PC相對(duì)控制流轉(zhuǎn)移和數(shù)據(jù)訪問(wèn)。具體地,將auipc與jalr中12位立即數(shù)組合,可將控制流轉(zhuǎn)移到任意32位PC相對(duì)地址;而auipc加上訪存指令的12位立即數(shù)偏移量,可訪問(wèn)任意32位PC相對(duì)地址的數(shù)據(jù)。PC(ProgramCounter,程序計(jì)數(shù)器)是ARM-32的16個(gè)寄存器之一,這意味著任何修改寄存器的指令都可能導(dǎo)致分支跳轉(zhuǎn)。其他ISA的程序執(zhí)行時(shí),分支指令通常僅占10%~20%;但在ARM-32中,每條指令都可能是分支指令。這使硬件分支預(yù)測(cè)變得更復(fù)雜,而分支預(yù)測(cè)的準(zhǔn)確率對(duì)流水線的性能至關(guān)重要。此外,采用此方案也意味著少了一個(gè)可用的通用寄存器。06RISC-V的尋址方式對(duì)照學(xué)習(xí):ARM尋址方式尋址方式是指處理器根據(jù)指令中給出的地址信息,找出操作數(shù)所存放的物理地址,實(shí)現(xiàn)對(duì)操作數(shù)的訪問(wèn)。根據(jù)指令中給出的操作數(shù)的不同形式,ARM指令系統(tǒng)支持的尋址方式有:立即尋址寄存器移位尋址堆棧尋址塊復(fù)制尋址變址尋址寄存器尋址寄存器間接尋址多寄存器尋址相對(duì)尋址RISC-V尋址方式尋址方式是指處理器根據(jù)指令中給出的地址信息,找出操作數(shù)所存放的地址,實(shí)現(xiàn)對(duì)操作數(shù)的訪問(wèn)。(1)立即數(shù)尋址立即數(shù)尋址是指常數(shù)作為操作數(shù),直接包含在指令的32位編碼中。在RISC-V的匯編指令中,在指令操作符的后面加上字母“i”表示立即數(shù)操作指令。需要注意的是,RV32I的不同類(lèi)型指令中立即數(shù)的長(zhǎng)度是不同的。根據(jù)指令中給出的操作數(shù)的不同形式,RISC-V指令集支持的尋址方式有:立即數(shù)尋址、寄存器尋址、寄存器間接尋址、PC相對(duì)尋址等。例如:addix9,x8,1,一個(gè)源操作數(shù)是寄存器x8,一個(gè)源操作數(shù)是立即數(shù)1,兩者相加后的結(jié)果存入目的寄存器x8中。addi是I類(lèi)型的指令,其中的立即數(shù)1的在指令格式中的長(zhǎng)度為12位,也就是imm[11:0]。RISC-V尋址方式(2)寄存器尋址寄存器尋址指令的源操作數(shù)和目的操作數(shù)都是寄存器,從寄存器讀取數(shù)據(jù),結(jié)果也存入寄存器中。(3)寄存器間接尋址寄存器間接尋址指令是以寄存器中保存的數(shù)值作為數(shù)據(jù)在內(nèi)存中的存儲(chǔ)地址,根據(jù)存儲(chǔ)地址找到對(duì)應(yīng)的存儲(chǔ)空間并讀取數(shù)據(jù),或者將數(shù)據(jù)寫(xiě)入對(duì)應(yīng)的存儲(chǔ)空間中。如果指令中帶有偏移量offset,則存儲(chǔ)地址是寄存器的值與偏移量之和。例如
swx1,1000(x2),以寄存器x2的值為基地址加上偏移量1000得到數(shù)據(jù)的存儲(chǔ)地址,將寄存器x1中的32位數(shù)值存儲(chǔ)到該地址對(duì)應(yīng)的存儲(chǔ)空間中。例如
addx9,x20,x8,一個(gè)源操作數(shù)是寄存器x20,另一個(gè)源操作數(shù)是寄存器x8,兩者相加后的結(jié)果存入目的寄存器x9中。RISC-V尋址方式程序指針寄存器PC用來(lái)指示下一條指令的地址,也就是會(huì)決定程序執(zhí)行的流程。PC相對(duì)尋址方式就是以當(dāng)前PC值為基地址,以操作數(shù)為偏移量,兩者相加后得到新的存儲(chǔ)空間地址,處理器將該地址作為下一條指令的存儲(chǔ)地址,實(shí)現(xiàn)程序流程的跳轉(zhuǎn)。RISC-V指令提供了一條PC相對(duì)尋址指令auipc:auipcrd,imm該指令先將立即數(shù)imm符號(hào)擴(kuò)展為20位,再左移12位后成為一個(gè)新的32位立即數(shù),再將當(dāng)前PC的值和32位的新立即數(shù)相加,結(jié)果存入寄存器rd中。由于生成的32位新立即數(shù)是有符號(hào)數(shù),因此該指令的尋址范圍是以當(dāng)前PC值為基地址前后2GB地址空間,即PC±2GB。(4)PC相對(duì)尋址07基礎(chǔ)指令7.1RV32I指令7.2偽指令RISC-V指令集RISC-V指令集采用模塊化的方式進(jìn)行組織,由基本指令集+擴(kuò)展指令集組成。RISC-V指令集提供了大量自定義編碼空間以支持對(duì)指令集的擴(kuò)展,從而允許開(kāi)發(fā)者根據(jù)資源、能耗、權(quán)限、實(shí)時(shí)性等不同需求,基于部分特定的模塊和擴(kuò)展指令集進(jìn)行模塊的組合,實(shí)現(xiàn)了強(qiáng)大的系統(tǒng)可定制化能力。其中RV32I是RISC-V指令架構(gòu)中的基本指令集,RISC-V指令集架構(gòu)僅僅需要RV32I,就能運(yùn)行一個(gè)完整的軟件棧,其他特殊功能的指令集在這個(gè)基本指令集上疊加。RISC-V指令集RISC-V指令架構(gòu)采用模塊化的方式進(jìn)行組織,基本指令集+擴(kuò)展指令集的方式進(jìn)行組合。RISC-V指令集架構(gòu)僅僅需要RV32I,就能運(yùn)行一個(gè)完整的軟件棧,其他特殊功能的指令集在這個(gè)基本指令集上疊加。RISC-V指令集采用固定長(zhǎng)度指令,除了“C”指令集(壓縮指令)中的指令長(zhǎng)度為16位以外,其他指令集中的指令長(zhǎng)度都是32位。RV64I和RV128I指令集中的指令長(zhǎng)度也是32位,只是擴(kuò)展了64位、128位的數(shù)據(jù)訪問(wèn)指令。32位的RISC-V架構(gòu),指令和數(shù)據(jù)尋址空間就是2的32次方,4GB空間。RISC-V指令集架構(gòu)僅支持小端模式,以簡(jiǎn)化硬件的實(shí)現(xiàn)。RV32I指令示意圖RV32I指令示意圖。從左到右連接帶下劃線的字母即可組成RV32I指令。大括號(hào){}中每一項(xiàng)都是該指令的不同變體,其中下劃線_意味著不含大括號(hào)中任意一項(xiàng)亦可組成一條指令。RV32I指令算術(shù)運(yùn)算指令RV32I指令集中只提供了基礎(chǔ)的加法add、減法運(yùn)算指令sub。01RV32I指令邏輯運(yùn)算指令RV32I指令集中提供了與and、或or、非not和異或xor運(yùn)算指令。02RV32I指令移位指令RV32I指令集中常見(jiàn)的移位指令有邏輯左移sll、邏輯右移srl、、算術(shù)右移sra。03RV32I指令比較置位指令04RV32I指令無(wú)條件跳轉(zhuǎn)指令RV32I指令集支持的無(wú)條件跳轉(zhuǎn)指令有jal和jalr兩條。05RV32I指令有條件跳轉(zhuǎn)指令06RV32I指令裝載指令裝載(load)指令是將存儲(chǔ)器中的數(shù)據(jù)或立即數(shù)裝載到寄存器中。07RV32I指令存儲(chǔ)指令存儲(chǔ)(store)指令將寄存器中的數(shù)據(jù)保存到存儲(chǔ)器中。08RV32I指令csr操作指令RISC-V指令集架構(gòu)還定義了一組控制和狀態(tài)寄存器(ControlandStatusRegister,CSR),使用特定的csr操作指令來(lái)訪問(wèn)CSR寄存器。09依賴(lài)于零寄存器x0的32條RISC-V偽指令(1)在RV32I中,那些讀取64位計(jì)數(shù)器的指令默認(rèn)讀取低32位,可通過(guò)“h”結(jié)尾的指令讀取高32位。偽指令:為了增強(qiáng)匯編語(yǔ)言程序的可讀性和編程的方便性,在匯編語(yǔ)言中常會(huì)定義一些特殊的符號(hào),表示一些處理器的特殊應(yīng)用或功能組合。偽指令也是匯編語(yǔ)言中的合法指令,它沒(méi)有機(jī)器編碼,但會(huì)被轉(zhuǎn)換為一個(gè)或多個(gè)最終執(zhí)行其功能的RISC-V機(jī)器指令。在下面列表中,展示一些偽指令及其通常的實(shí)現(xiàn)?!禦ISC-V-Reader》文檔附錄A的指令列表中也包含了偽指令。依賴(lài)于零寄存器x0的32條RISC-V偽指令(2)與零寄存器x0無(wú)關(guān)的28條RISC-V偽指令(1)與零寄存器x0無(wú)關(guān)的28條RISC-V偽指令(2)08擴(kuò)展指令8.1模塊化8.2RV32FandRV32D8.3RV32ARISC-V的模塊化RISC-V針對(duì)32位處理器的最小指令集是RV32I,也是RISC-V指令集中固定不變的部分。RISC-V針對(duì)64位處理器的最小指令集是RV64I。在RV32I和RV64I的基礎(chǔ)上,RISC-V的指令集使用模塊化的方式進(jìn)行組織,提供大量自定義編碼空間以支持對(duì)指令集的擴(kuò)展,從而允許開(kāi)發(fā)者根據(jù)資源、能耗、權(quán)限、實(shí)時(shí)性等不同需求,基于部分特定的模塊和擴(kuò)展指令集進(jìn)行模塊的組合,實(shí)現(xiàn)了強(qiáng)大的系統(tǒng)可定制化能力。RISC-VISA的C擴(kuò)展模塊RV32C
擴(kuò)展指令:RISC-VISA的D擴(kuò)展模塊RV32D擴(kuò)展指令及其格式可見(jiàn)下表:RV32FandRV32DRV32F和RV32D指令示意圖RV32ARV32A指令示意圖09RISC-V的特權(quán)模式9.1RISC-V體系結(jié)構(gòu)下的軟件棧結(jié)構(gòu)9.2RISC-V的特權(quán)模式上圖給出了RISC-V體系結(jié)構(gòu)支持的可能的軟件棧。最左邊的圖給出了一個(gè)簡(jiǎn)單的系統(tǒng),它只支持單個(gè)應(yīng)用程序運(yùn)行在一個(gè)應(yīng)用執(zhí)行環(huán)境(ApplicationExecutionEnvironment,AEE)上。這個(gè)應(yīng)用程序被編碼為與一個(gè)特定的應(yīng)用程序二進(jìn)制接口(ApplicationBinaryInterface,ABI)運(yùn)行。這個(gè)ABI包含所支持的用戶級(jí)ISA,加上一堆與AEE交互的ABI調(diào)用。ABI對(duì)應(yīng)用程序隱藏了AEE的細(xì)節(jié),使得實(shí)現(xiàn)AEE具有更大的靈活性。同樣的ABI可被直接實(shí)現(xiàn)在多個(gè)不同的主機(jī)操作系統(tǒng)上,或者被一個(gè)用戶模式下的仿真環(huán)境支持,這個(gè)仿真環(huán)境運(yùn)行在一個(gè)不同的ISA機(jī)器上。RISC-V軟件棧的可視化表示應(yīng)用應(yīng)用應(yīng)用應(yīng)用應(yīng)用應(yīng)用應(yīng)用RISC-V軟件棧的可視化表示中間的配置顯示了一個(gè)傳統(tǒng)的操作系統(tǒng)(OS),可支持多個(gè)應(yīng)用程序的多道運(yùn)行。每個(gè)應(yīng)用程序通過(guò)ABI與OS通信,OS提供了AEE。正如同應(yīng)用程序通過(guò)ABI與AEE通信一樣,RISC-V操作系統(tǒng)通過(guò)一個(gè)管理員二進(jìn)制接口(SupervisorBinaryInterface,SBI)與管理員執(zhí)行環(huán)境(SupervisorExecutionEnvironment,SEE)通信。一個(gè)SBI包含了用戶級(jí)和管理員級(jí)ISA,以及一堆BI函數(shù)調(diào)用。在所有SEE實(shí)現(xiàn)中,使用單一的SBI,允許單一的OS二進(jìn)制鏡像運(yùn)行于任何SEE之上。在低端的硬件平臺(tái)上,SEE可以只是一個(gè)簡(jiǎn)單的bootloader和BIOS類(lèi)型的IO系統(tǒng),在高端服務(wù)器上,SEE可以是一個(gè)提供hypervisor的虛擬機(jī),或者在一個(gè)體系結(jié)構(gòu)仿真環(huán)境中,SEE可以是一個(gè)運(yùn)行在主機(jī)操作系統(tǒng)上的“很薄的”轉(zhuǎn)換層。應(yīng)用應(yīng)用RISC-V軟件棧的可視化表示最右側(cè)的配置顯示了一個(gè)虛擬機(jī)監(jiān)視器配置,此處由一個(gè)單一的hypervisor支持多個(gè)多道操作系統(tǒng)。每個(gè)OS通過(guò)一個(gè)SBI與hypervisor通信,hypervisor提供了SEE。Hypervisor使用一個(gè)hypervisor二進(jìn)制接口(HypervisorBinaryInterface,HBI)與hypervisor執(zhí)行環(huán)境(HypervisorExecutionEnvironment,HEE)通信,這將把hypervisor與具體的硬件平臺(tái)細(xì)節(jié)相隔離。應(yīng)用應(yīng)用應(yīng)用應(yīng)用對(duì)于任何比裸機(jī)嵌入式平臺(tái)更復(fù)雜的東西,軟件棧都是高度分層的。像普通個(gè)人計(jì)算機(jī)這樣的復(fù)雜系統(tǒng)總是有多個(gè)程序在其上同時(shí)運(yùn)行,以“垂直”方式(操作系統(tǒng)棧)或“并行”方式(在同一操作系統(tǒng)上運(yùn)行多個(gè)應(yīng)用程序):為了確保整個(gè)系統(tǒng)的正確功能,給定的程序不應(yīng)對(duì)系統(tǒng)的其他部分,特別是系統(tǒng)的低級(jí)組件造成損害,這一點(diǎn)對(duì)計(jì)算機(jī)系統(tǒng)來(lái)說(shuō)非常重要,因此特權(quán)模式系統(tǒng)可以幫助處理這些問(wèn)題。在理想情況下,運(yùn)行在hart(硬件線程)中的任何一行代碼都應(yīng)與一個(gè)特權(quán)模式相關(guān)聯(lián),該模式編碼在CSR寄存器中,定義了其可以訪問(wèn)的資源。特權(quán)模式較高特權(quán)模式下運(yùn)行的指令可以訪問(wèn)比在較低特權(quán)模式下運(yùn)行的指令更底層的系統(tǒng)功能甚至硬件。任何時(shí)候,一個(gè)RISC-V硬件線程(hart)是運(yùn)行在某個(gè)特權(quán)級(jí)上的,這個(gè)特權(quán)級(jí)被編碼到一個(gè)或者多個(gè)CSR中的一種模式。RISC-VISA定義的模式及特權(quán)等級(jí)有:CSR不同的讀寫(xiě)訪問(wèn)權(quán)限CSR寄存器中存儲(chǔ)的信息字段所表示的CSR不同的讀寫(xiě)訪問(wèn)權(quán)限:WPRI(ReservedWritesPreserveValues,ReadIgnoreValues)在CSR中,某些讀/寫(xiě)字段是為未來(lái)發(fā)展而保留的,所以系統(tǒng)中的軟件應(yīng)當(dāng)忽略從這些字段中讀取的值(即ReadIgnoreValues),并且在向CSR其他字段寫(xiě)入數(shù)據(jù)的時(shí)候,還需要保護(hù)這些預(yù)留字段,維持字段中的值不變(即ReservedWritesPreserveValues)。為了將來(lái)的擴(kuò)展需要,如果某一個(gè)RISC-V系統(tǒng)中實(shí)現(xiàn)了包含WPRI字段的CSR讀寫(xiě)功能,則必須保持WPRI字段只讀且為0,所以在RISC-V規(guī)范有關(guān)CSR的描述中,這些字段被標(biāo)識(shí)為WPRI。特權(quán)模式M(機(jī)器)模式:M模式全稱(chēng)為Machinemode(機(jī)器模式),運(yùn)行在這個(gè)模式下的程序?yàn)樽罡邫?quán)限,它屬于RISC-V里的最高權(quán)限模式,它具有訪問(wèn)所有資源的權(quán)限,它的代碼是百分百可信的,通常運(yùn)行在這個(gè)模式下的為固件和操作系統(tǒng)內(nèi)核。S(監(jiān)管者)模式:全稱(chēng)Supervisormode,監(jiān)管者模式通常是用來(lái)運(yùn)行操作系統(tǒng)內(nèi)核,它的權(quán)限要比M模式低,它無(wú)法直接操作特殊寄存器和某些資源,但內(nèi)核通常會(huì)運(yùn)行在S和M兩個(gè)模式之間,在最初系統(tǒng)啟動(dòng)階段內(nèi)核是運(yùn)行在M模式下的,在這個(gè)模式下內(nèi)核需要初始化所有的硬件資源和進(jìn)行內(nèi)存管理等等,當(dāng)初始化完成之后會(huì)切換到S模式下,通常內(nèi)核里有一段代碼是運(yùn)行在M模式下和S模式下,M模式下的代碼為S模式下的代碼提供訪問(wèn)硬件資源的能力。而S模式下的內(nèi)核主要是為應(yīng)用程序提供系統(tǒng)調(diào)用以及上下文切換。U(用戶)模式:全稱(chēng)Usermode,用戶模式為級(jí)別最低的模式,它不能訪問(wèn)硬件資源,只能訪問(wèn)某些通用寄存器和通用指令,一般用于執(zhí)行應(yīng)用程序。這些是類(lèi)UNIX系統(tǒng)的三種標(biāo)準(zhǔn)模式。簡(jiǎn)單的嵌入式機(jī)器只有M模式,而復(fù)雜的嵌入式系統(tǒng)也有U模式,沒(méi)有S模式。特權(quán)模式H(超級(jí)管理員)模式:全稱(chēng)Hypervisormode,可用于管理跨機(jī)器的資源,或者將機(jī)器整體作為組件承擔(dān)更高級(jí)別的任務(wù)。例如,H模式可以協(xié)助實(shí)現(xiàn)一臺(tái)機(jī)器系統(tǒng)的虛擬化操作。但是目前RISC-V對(duì)虛擬化還不太完善,基本不支持,因此是作為保留。RISC-V特權(quán)ISA定義了進(jìn)一步的可選模式,即D(調(diào)試)模式。此模式具有比M模式更高的特權(quán)級(jí),具有額外的硬件訪問(wèn)權(quán)限(CSR、物理地址空間的一部分等),并且存在用于外部調(diào)試器。特權(quán)模式通過(guò)不同特權(quán)模式的組合,可設(shè)計(jì)面向不同應(yīng)用場(chǎng)景的處理器:所有硬件實(shí)現(xiàn)必須提供M-mode,因?yàn)檫@是唯一的模式,可以不受限制地訪問(wèn)整個(gè)機(jī)器。最簡(jiǎn)單的RISC-V實(shí)現(xiàn)可以僅提供M-mode,雖然這樣做不能為防止不正確的、惡意應(yīng)用代碼提供保護(hù)。許多RISC-V實(shí)現(xiàn)還支持至少一個(gè)用戶模式(U-mode),以對(duì)系統(tǒng)的其他部分進(jìn)行保護(hù),防止被應(yīng)用程序代碼破壞。管理員模式(S-mode)可被加入,以在管理員級(jí)操作系統(tǒng)和SEE、HAL之間提供隔離。Hypervisor模式(H-mode)將在一個(gè)虛擬機(jī)監(jiān)視器和HEE、運(yùn)行在機(jī)器模式的HAL之間提供隔離。10RISC-V的異常與中斷10.1異常與中斷概念10.2中斷的響應(yīng)過(guò)程和返回過(guò)程11.3機(jī)器模式異常相關(guān)的CSR寄存器11.4S(監(jiān)管者)模式下的CSR異常、中斷、自陷用以指代硬件線程(hart)正常運(yùn)行時(shí),內(nèi)部指令出現(xiàn)的異常情形。異常用以指代硬件線程(hart)因出現(xiàn)了一個(gè)外部的異步事件而導(dǎo)致的意外的(此處的意外是指,對(duì)于一個(gè)正常運(yùn)行的硬件線程hart來(lái)說(shuō),執(zhí)行內(nèi)部指令是正常行為,而外部事件則是意外行為)控制權(quán)轉(zhuǎn)移。中斷用以指代由異?;蛑袛鄬?dǎo)致的,將系統(tǒng)控制權(quán)轉(zhuǎn)移給自陷處理程序的行為。自陷異常和中斷是現(xiàn)代處理器中不可缺少的功能。當(dāng)發(fā)生異?;蛑袛鄷r(shí),處理器暫停當(dāng)前正在執(zhí)行的程序,從暫停處跳轉(zhuǎn)到異常處理程序或中斷服務(wù)程序入口,執(zhí)行處理程序。異常或中斷處理結(jié)束后,返回主程序暫停處繼續(xù)執(zhí)行往下執(zhí)行。異常(Exception)、中斷(Interrupt)和自陷(Trap):異常、中斷、自陷異常分為同步異常和異步異常兩種:(1)同步異常:是指處理器執(zhí)行某條指令而導(dǎo)致的異常,在處理完相應(yīng)的異常處理程序后,處理器才能繼續(xù)執(zhí)行。在同樣的環(huán)境下程序不管執(zhí)行多少遍,同步異常通常都能夠復(fù)現(xiàn)出來(lái)。常見(jiàn)的同步異常:從非法地址讀取指令或數(shù)據(jù),指令非法,指令地址未對(duì)齊,軟件異常,調(diào)試導(dǎo)致的異常等。(2)異步異常是指觸發(fā)原因和當(dāng)前執(zhí)行指令無(wú)關(guān)的異常。在同樣的環(huán)境下程序執(zhí)行多少,導(dǎo)致異常的原因都不同,而且發(fā)生異常時(shí)的當(dāng)前指令可能也會(huì)不一樣。最常見(jiàn)的異步異常就是外部中斷。異常不同于中斷,因?yàn)楹笳呤擒浖蛴布a(chǎn)生的異步事件,它們從執(zhí)行本身的外部停止執(zhí)行。異常和中斷都用陷阱處理。RISC-V體系架構(gòu)中也提供了異常和中斷的處理機(jī)制。異常、中斷、自陷RISC-V架構(gòu)為了使處理器能夠在等級(jí)較低的權(quán)限模式下處理異常和中斷,提供了委托機(jī)制。在機(jī)器模式下設(shè)置CSR寄存器中的中斷委托(MachineInterruptDelegation,MIDeleg)和異常委托(MachineExceptionDelegation,MEDeleg)寄存器,將一些中斷和異常委托給低權(quán)限模式處理。在被委托的低權(quán)限模式中,也可以通過(guò)軟件屏蔽被委托的中斷。在用戶模式下(U-mode),如果設(shè)置了委托模式,則可以在用戶模式(U-mode)或監(jiān)管者模式(S-mode)下處理異?;蛑袛?。如果是設(shè)置在管理員模式(S-mode)下處理,在處理完成后,處理器通過(guò)SRET(監(jiān)管者模式異常返回)指令從管理員模式返回到用戶模式(U-mode)。在用戶模式(U-mode)下,如果沒(méi)有設(shè)置異常委托或中斷委托,發(fā)生異?;蛑袛嗪螅幚砥鬓D(zhuǎn)入機(jī)器模式,響應(yīng)并處理異常事件或中斷請(qǐng)求。處理完成后,處理器通過(guò)MRET(MachineReturn機(jī)器模式異常返回)指令從機(jī)器模式返回到用戶模式。機(jī)器模式(M-mode)是RISC-V架構(gòu)處理器必須具備的權(quán)限模式,所以在默認(rèn)情況下RISC-V架構(gòu)處理器會(huì)在機(jī)器模式中處理異常事件和中斷事件請(qǐng)求,執(zhí)行異常處理或中斷服務(wù)程序。異常和中斷響應(yīng)過(guò)程(2)根據(jù)異?;蛑袛囝?lèi)型設(shè)置mcasue寄存器。(4)保存異常發(fā)生前的中斷狀態(tài),即把mstatus寄存器的MIE字段保存到MPIE字段。(6)設(shè)置mstatus寄存器的MIE字段為0,關(guān)閉中斷使能。(8)根據(jù)mtvec寄存器的值設(shè)置PC,跳轉(zhuǎn)到異常向量表對(duì)應(yīng)位置。(1)保存PC值到mepc寄存器中,即保存返回地址。(3)將發(fā)生異常時(shí)的錯(cuò)誤指令編碼或存儲(chǔ)器訪問(wèn)的地址值保存到mtval寄存器。(5)保存異常發(fā)生前的處理器工作模式到mstatus寄存器的MPP字段。(7)設(shè)置處理器為機(jī)器模式。0102030405060708當(dāng)異常或中斷發(fā)生時(shí),默認(rèn)情況下都在機(jī)器模式下處理,處理器自動(dòng)完成以下操作:異常和中斷響應(yīng)過(guò)程根據(jù)異常向量表獲取到異常處理程序或中斷服務(wù)程序的入口地址后,執(zhí)行異常處理程序或中斷服務(wù)程序,完成后處理器會(huì)恢復(fù)異?;蛑袛喟l(fā)生前的工作模式,返回被暫停的程序繼續(xù)執(zhí)行。
返回的具體過(guò)程如下:01把mstatus寄存器MPIE字段的值設(shè)置到MIE字段,恢復(fù)異常發(fā)生前的中斷使能狀態(tài)。02根據(jù)保存在mstatus寄存器的MPP字段的處理器工作模式,把處理器恢復(fù)為異常發(fā)生前的工作模式。03把mepc寄存器中的值設(shè)置到PC寄存器中,返回被暫停的程序處。RV32權(quán)限模式和異常機(jī)器模式是RISC-V架構(gòu)處理器必須具備的權(quán)限模式,所以在默認(rèn)情況下RISC-V架構(gòu)處理器會(huì)在機(jī)器模式中處理異常事件和中斷事件請(qǐng)求,執(zhí)行異常處理或中斷服務(wù)程序。在用戶模式下,如果設(shè)置了委托模式,則可以在用戶模式或管理員模式下處理異?;蛑袛唷H绻窃O(shè)置在管理員模式下處理,在處理完成后,處理器通過(guò)SRET(管理員模式異常返回)指令從管理員模式返回到用戶模式。在用戶模式下,如果沒(méi)有設(shè)置異常委托或中斷委托,發(fā)生異常或中斷后,處理器轉(zhuǎn)入機(jī)器模式,響應(yīng)并處理異常事件或中斷請(qǐng)求。處理完成后,處理器通過(guò)MRET(MachineReturn機(jī)器模式異常返回)指令從機(jī)器模式返回到用戶模式。RISC-V架構(gòu)為了使處理器能夠在等級(jí)較低的權(quán)限模式下處理異常和中斷,提供了委托機(jī)制。在機(jī)器模式下設(shè)置CSR寄存器中的中斷委托(MachineInterruptDelegation,MIDmideleg)和異常委托(MachineExceptionDelegation,MEDmedeleg)寄存器,將一些中斷和異常委托給低權(quán)限模式處理。在被委托的低權(quán)限模式中,也可以通過(guò)軟件屏蔽被委托的中斷。機(jī)器模式異常相關(guān)的CSR寄存器與機(jī)器模式有關(guān)的異常寄存器主要有mstatus、mie、mip、mtvec、mcause、medeleg、mideleg、mepc、mtval。1mstatus寄存器:記錄處理器內(nèi)核當(dāng)前的運(yùn)行狀態(tài),如表2-18所示。機(jī)器模式異常相關(guān)的CSR寄存器(2)mie寄存器:用來(lái)開(kāi)關(guān)各種中斷使能,如表2-19所示2機(jī)器模式異常相關(guān)的CSR寄存器(3)mip寄存器:記錄各種中斷請(qǐng)求狀態(tài),如表2-20所示3機(jī)器模式異常相關(guān)的CSR寄存器(4)mtvec寄存器:記錄異常向量表基地址,設(shè)置向量支持模式,如表2-21所示。4機(jī)器模式異常相關(guān)的CSR寄存器mcause寄存器:保存發(fā)生異常的原因,用異常編碼表示。Bit[30:0]是ExceptionCode字段(異常編碼);Bit[31]是Interrupt字段,1表示是中斷,0表示是同步異常。5機(jī)器模式異常相關(guān)的CSR寄存器mideleg寄存器和medeleg寄存器:中斷委托寄存器和異常委托寄存器。在機(jī)器模式下,可將各種中斷或異常委托給管理員模式或用戶模式處理。在管理員模式下,可將各種中斷或異常委托給用戶模式處理。mepc寄存器:用于保存進(jìn)入異常前的PC的值,即當(dāng)前程序的停止地址,以作為異常返回地址。mtval寄存器:用于保存進(jìn)入異常前的錯(cuò)誤指令的編碼值或存儲(chǔ)器訪問(wèn)的地址值。678RV32I指令csr操作指令RISC-V指令集架構(gòu)還定義了一組控制和狀態(tài)寄存器(ControlandStatusRegister,CSR),使用特定的csr操作指令來(lái)訪問(wèn)CSR寄存器。9虛擬內(nèi)存是對(duì)物理內(nèi)存的一種抽象。它通過(guò)將虛擬地址映射到硬件組件的各種物理地址空間,使內(nèi)存空間在應(yīng)用程序看來(lái)是簡(jiǎn)單且統(tǒng)一的。
S模式下的代碼執(zhí)行,通常是指由操作系統(tǒng)執(zhí)行,操作系統(tǒng)可以訪問(wèn)除M模式之外的所有CSR。監(jiān)管者軟件層背后的設(shè)計(jì)理念是提供一個(gè)干凈的虛擬內(nèi)存(virtualmemory)。應(yīng)用程序只能看到虛擬內(nèi)存地址被劃分成所謂的4KB大小的頁(yè)(常規(guī)長(zhǎng)度的連續(xù)內(nèi)存部分):在監(jiān)管者級(jí)別虛擬地址通過(guò)查詢稱(chēng)為頁(yè)表的內(nèi)存管理數(shù)據(jù)結(jié)構(gòu)被轉(zhuǎn)換為物理內(nèi)存地址,頁(yè)表包含了對(duì)應(yīng)的4KB大小的物理內(nèi)存段的映射。S(監(jiān)管者)模式下的CSRS(監(jiān)管者)模式下的CSRsstatus,sip,sie,scause的工作方式與機(jī)器模式ISA中的mstatus、mip、mie非常相似。sepc和stval的作用相同,只是它們包含虛擬內(nèi)存地址而不是物理內(nèi)存地址。satp:“SupervisorAddressTranslationandProtection”寄存器沒(méi)有對(duì)應(yīng)的機(jī)器模式CSR,因?yàn)樗糜趦?nèi)存地址轉(zhuǎn)換。當(dāng)操作系統(tǒng)改變執(zhí)行進(jìn)程時(shí),例如上下文切換,satp寄存器將被寫(xiě)入。該寄存器包含三個(gè)WARL字段,與執(zhí)行內(nèi)存地址轉(zhuǎn)換算法的信息相關(guān):MODE字段根據(jù)特權(quán)規(guī)范文檔的表4.4描述了基于頁(yè)的虛擬尋址類(lèi)型和寬度。ASID“AddressSpaceIDentifier”(地址空間標(biāo)識(shí)符)字段以寬松的術(shù)語(yǔ)描述了正在使用內(nèi)存頁(yè)面的進(jìn)程,它用于降低保護(hù)內(nèi)存免受錯(cuò)誤進(jìn)程影響的難度,而在地址轉(zhuǎn)換過(guò)程中并不具有直接意義。PPN“PhysicalPageNumber”(物理頁(yè)碼)字段就是監(jiān)管者級(jí)物理地址除以4KB,用于標(biāo)識(shí)物理內(nèi)存中對(duì)應(yīng)的頁(yè)。S(監(jiān)管者)模式下的CSR實(shí)際的內(nèi)存地址轉(zhuǎn)換算法根據(jù)MODE字段所標(biāo)識(shí)的虛擬內(nèi)存系統(tǒng)而變化,虛擬內(nèi)存系統(tǒng)的內(nèi)容不在本章的范圍之內(nèi),下面提供了一個(gè)一般性的總結(jié)以供參考:遍歷頁(yè)表,直到找到一個(gè)“葉”頁(yè)表項(xiàng)(PTE),這意味著它是一個(gè)指向?qū)嶋H物理內(nèi)存的指針(而不是指向頁(yè)表的另一層)如果內(nèi)存請(qǐng)求被允許(通過(guò)比較PTE的相關(guān)位與mstatusCSR中的相關(guān)位得出),則計(jì)算物理地址(具體公式在特權(quán)規(guī)范文檔的第4.3.2節(jié)中)S(監(jiān)管者)模式下的CSR就像在機(jī)器級(jí)ISA中一樣,監(jiān)管者級(jí)ISA也定義了一些特權(quán)指令:SRET“SmodeReturn”I型格式指令,在S模式下處理異常后返回到原程序。SFENCE.VMAasidvaddr“SupervisorFence”R型格式指令的工作方式與其他fence指令類(lèi)似,即要求在它之前的內(nèi)存操作必須在它之后的操作開(kāi)始執(zhí)行之前完成,不同之處在于它的目標(biāo)是隱式讀取和寫(xiě)入內(nèi)存中的內(nèi)存管理數(shù)據(jù)結(jié)構(gòu)(例如頁(yè)表,發(fā)生在特權(quán)級(jí)別執(zhí)行其他指令期間)。該指令使用rs1字段對(duì)虛擬地址進(jìn)行編碼,并在該地址上對(duì)讀取和寫(xiě)入排序(如果rs1==0,則對(duì)所有虛擬地址進(jìn)行排序),使用rs2字段編碼ASID以選擇要排序的地址空間(如果rs2==0,則對(duì)所有地址空間進(jìn)行排序)。請(qǐng)注意,此指令不會(huì)影響顯式內(nèi)存操作。S模式下的RISC-V中斷處理無(wú)論位于何種特權(quán)模式,所有異常都默認(rèn)將控制權(quán)轉(zhuǎn)移到M模式的異常處理程序。但Unix系統(tǒng)中大多數(shù)異常都應(yīng)發(fā)送給S模式下的操作系統(tǒng)。RISC-V通過(guò)異常委托機(jī)制,可以使在S模式下產(chǎn)生的異常,委托給S模式進(jìn)行處理,而不必切換到M模式進(jìn)行處理,其中S模式也有自己中斷處理時(shí)所用到的寄存器:sepc、stvec、scause、sscratch、stval和sstatus。發(fā)生異常的指令的PC被存入sepc,且PC被設(shè)置為stvec。scause根據(jù)異常類(lèi)型設(shè)置,stval被設(shè)置成出錯(cuò)的地址或者其它特定異常的信息字。把sstatusCSR中的SIE置零,屏蔽中斷,且SIE之前的值被保存在SPIE中。發(fā)生例外時(shí)的權(quán)限模式被保存在sstatus的SPP域,然后設(shè)置當(dāng)前模式為S模式11RISC-V匯編語(yǔ)言概述11.1匯編語(yǔ)言的處理過(guò)程11.2匯編語(yǔ)言的組成匯編語(yǔ)言程序處理過(guò)程上圖是匯編語(yǔ)言源程序翻譯成可執(zhí)行程序的步驟。匯編語(yǔ)言程序處理過(guò)程使用文本編輯器,用匯編語(yǔ)言指令和偽指令編寫(xiě)源程序,在Unix/Linux系統(tǒng)中,匯編語(yǔ)言源程序文件以.s作為后綴名。鏈接器的工作可以分為兩個(gè)部分:根據(jù)對(duì)象文件中的全局標(biāo)簽銜接不同的二進(jìn)制文件中的指令塊;將程序中的指令和數(shù)據(jù)段映射到相應(yīng)的存儲(chǔ)空間,即分配內(nèi)存地址及其范圍。生成的可執(zhí)行程序文件被存儲(chǔ)在計(jì)算機(jī)的存儲(chǔ)設(shè)備上。在運(yùn)行時(shí),由加載器將該可執(zhí)行文件加載到內(nèi)存中,并跳轉(zhuǎn)到程序的起始地址。匯編器將匯編語(yǔ)言翻譯成處理器能夠理解的二進(jìn)制指令,把匯編語(yǔ)言源程序文件轉(zhuǎn)換成后綴名為.o的二進(jìn)制對(duì)象文件。鏈接器把各個(gè)二進(jìn)制的對(duì)象文件和二進(jìn)制庫(kù)文件等模塊“拼接”起來(lái),生產(chǎn)后綴名為.out的可執(zhí)行程序文件。匯編器在RISC-V調(diào)用約定中的作用1.將參數(shù)存放到函數(shù)可訪問(wèn)的位置;2.跳轉(zhuǎn)到函數(shù)入口(使用RV32I的jal指令);3.獲取函數(shù)所需局部存儲(chǔ)資源,按需保存寄存器;4.執(zhí)行函數(shù)功能;5.將返回值存放到調(diào)用者可訪問(wèn)的位置,恢復(fù)寄存器,釋放局部存儲(chǔ)資源;6.由于程序可從多處調(diào)用函數(shù),故需將控制權(quán)返回到調(diào)用點(diǎn)(使用ret指令)。函數(shù)調(diào)用過(guò)程通常分為6個(gè)階段:為提升性能,應(yīng)盡量將變量存放在寄存器而不是內(nèi)存中,但同時(shí)也要避免因保存和恢復(fù)寄存器而頻繁訪問(wèn)內(nèi)存。幸運(yùn)的是,RISC-V有足夠的寄存器兼顧兩者:既能將操作數(shù)存放在寄存器,還能減少保存和恢復(fù)它們的次數(shù)。關(guān)鍵在于,一些寄存器不保證其值在函數(shù)調(diào)用前后保持一致,稱(chēng)為臨時(shí)寄存器;另一些能保證,稱(chēng)為保存寄存器。不再調(diào)用其他函數(shù)的函數(shù)稱(chēng)為葉子函數(shù)。當(dāng)一個(gè)葉子函數(shù)只有少量參數(shù)和局部變量時(shí),可將其分配到寄存器,無(wú)需分配到內(nèi)存。大部分函數(shù)調(diào)用均如此,此時(shí)程序無(wú)需將寄存器保存到內(nèi)存。RISC-V整數(shù)和浮點(diǎn)寄存器的匯編助記符RISC-V有足夠的寄存器供ABI分配給過(guò)程自由使用,在其不產(chǎn)生其他調(diào)用時(shí)無(wú)需保存和恢復(fù)。過(guò)程調(diào)用前后保持不變的寄存器也稱(chēng)被調(diào)用者保存寄存器,反之則稱(chēng)調(diào)用者保存寄存器。圖中頂部為高地址,底部為低地址。在RISC-V軟件約定中,棧指針(sp)從bffffff0hex開(kāi)始向下方的靜態(tài)數(shù)據(jù)區(qū)生長(zhǎng);代碼從00010000hex開(kāi)始,包含靜態(tài)鏈接庫(kù);代碼區(qū)上方是靜態(tài)數(shù)據(jù)區(qū),本例假設(shè)從10000000hex開(kāi)始;靜態(tài)數(shù)據(jù)區(qū)上方是動(dòng)態(tài)數(shù)據(jù)區(qū),在C語(yǔ)言中通過(guò)malloc()分配,稱(chēng)為堆(heap),它向上方的棧區(qū)生長(zhǎng),還包含動(dòng)態(tài)鏈接庫(kù)。鏈接器鏈接器需要根據(jù)圖中地址(為例)調(diào)整所有目標(biāo)文件中指令的程序地址和數(shù)據(jù)地址。圖RV32I程序和數(shù)據(jù)的內(nèi)存分配匯編器與鏈接器匯編器向簡(jiǎn)潔的RISC-VISA增加了60條偽指令,在不增加硬件開(kāi)銷(xiāo)的同時(shí)令RISC-V代碼更易于讀寫(xiě)。只需將一個(gè)RISC-V寄存器專(zhuān)門(mén)用作0,即可實(shí)現(xiàn)上述許多有用的操作。裝入高位立即數(shù)(lui)和PC加高位立即數(shù)(auipc)這兩條指令簡(jiǎn)化了編譯器和鏈接器調(diào)整外部數(shù)據(jù)和函數(shù)地址的工作,PC相對(duì)分支指令讓鏈接器更容易處理位置無(wú)關(guān)代碼。大量的寄存器減少了寄存器保存和恢復(fù)的次數(shù),這樣的調(diào)用約定加速了函數(shù)調(diào)用和返回。RISC-V匯編語(yǔ)言語(yǔ)法RISC-V的匯編語(yǔ)法遵循其他其他處理器的典型匯編語(yǔ)言規(guī)則,支持如指令和標(biāo)簽等基本元素,以及指定存儲(chǔ)需求的指示符和方法。通常,匯編源文件由一系列代碼塊組成,每個(gè)代碼塊指定其內(nèi)存節(jié)和存儲(chǔ)需求。根據(jù)ABI規(guī)范,舉例函數(shù)入口和出口的標(biāo)準(zhǔn)RV32I代碼。函數(shù)的準(zhǔn)備階段如下:entry_label:addisp,sp,-framesize#調(diào)整棧指針(sp寄存器)來(lái)分配棧幀
swra,framesize-4(sp)#保存返回地址(ra寄存器)#按需保存其他寄存器...#函數(shù)體若寄存器無(wú)法容納過(guò)多參數(shù)和局部變量,準(zhǔn)備階段會(huì)在棧上為函數(shù)棧幀分配空間。當(dāng)函數(shù)任務(wù)完成后,其結(jié)束階段將釋放棧幀并返回調(diào)用點(diǎn):
#按需恢復(fù)其他寄存器
lwra,framesize-4(sp)#恢復(fù)返回地址寄存器addisp,sp,framesize#釋放棧幀空間
ret#返回調(diào)用點(diǎn)RISC-V匯編語(yǔ)言組成匯編語(yǔ)言程序由匯編命令和指令語(yǔ)句組成。010203匯編命令通常在匯編語(yǔ)言源程序的起始部分,聲明源程序中的標(biāo)簽和段的屬性。匯編語(yǔ)言指令語(yǔ)句是匯編語(yǔ)言程序的基本單位,由標(biāo)簽label、操作符operation、操作數(shù)operands和注釋comment等4部分組成:[label:]operation[operands][;comment]標(biāo)簽是當(dāng)前指令的位置表示符號(hào),常用作匯編語(yǔ)言程序中子程序或跳轉(zhuǎn)的目標(biāo),它是可選項(xiàng)。操作符可以使RISC-V指令、偽指令或宏等。操作數(shù)是指令執(zhí)行所需的參數(shù),可以是符號(hào)、常量、或者由符號(hào)和常量組成的表達(dá)式。注釋是為了解釋語(yǔ)句或程序功能添加的信息,對(duì)程序沒(méi)有影響,僅僅起到注解的作用,以“;”或“#”作為分隔,它是可選項(xiàng)。依賴(lài)于零寄存器x0的32條RISC-V偽指令(1)在RV32I中,那些讀取64位計(jì)數(shù)器的指令默認(rèn)讀取低32位,可通過(guò)“h”結(jié)尾的指令讀取高32位。依賴(lài)于零寄存器x0的32條RISC-V偽指令(2)與零寄存器x0無(wú)關(guān)的28條RISC-V偽指令(1)與零寄存器x0無(wú)關(guān)的28條RISC-V偽指令(2)指示符常用的RISC-V匯編器指示符。.text——進(jìn)入代碼節(jié)。.align2——后續(xù)代碼按22字節(jié)對(duì)齊。.globlmain——聲明全局符號(hào)“main”。.section.rodata——進(jìn)入只讀數(shù)據(jù)節(jié)。.balign4——數(shù)據(jù)節(jié)按4字節(jié)對(duì)齊。string"Hello,%s!\n"——?jiǎng)?chuàng)建以空字符結(jié)尾的字符串。.string"world"——?jiǎng)?chuàng)建以空字符結(jié)尾的字符串。12案例分析Helloworld代碼對(duì)比不同ISA匯編語(yǔ)言的對(duì)比-準(zhǔn)備工作:C語(yǔ)言實(shí)現(xiàn)的插入排序插入排序在不同ISA下生成的指令數(shù)和代碼大小插入排序的RV32I代碼從左到右依次是十六進(jìn)制地址、十六進(jìn)制機(jī)器語(yǔ)言代碼、匯編語(yǔ)言指令和注釋。RV32I通過(guò)兩個(gè)寄存器指向a[j]和a[j-1]。RV32I有充足的寄存器,其中一些是ABI專(zhuān)門(mén)為過(guò)程調(diào)用分配的。與其他ISA不同,RV32I無(wú)需保存和恢復(fù)這些寄存器。雖然RV32I的代碼大小比x86-32大,但能通過(guò)可選的RV32C擴(kuò)展縮小該差距。同時(shí),RV32I使用比較-分支指令可節(jié)省ARM-32和x86-32所需的3條比較指令插入排序的ARM-32代碼從左到右依次是十六進(jìn)制地址、十六進(jìn)制機(jī)器語(yǔ)言代碼、匯編語(yǔ)言指令和注釋。由于寄存器較少,代碼需要將兩個(gè)寄存器和返回地址保存到棧中供后續(xù)使用。代碼采用的尋址方式將i和j展開(kāi)為字節(jié)地址。鑒于分支跳轉(zhuǎn)有可能在ARM-32和Thumb-2間切換,在保存返回地址前,需通過(guò)bxcs將其最低位置為0。條件碼節(jié)省了遞減j后的一條比較指令,但其
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 銀行公司黨員活動(dòng)管理辦法
- 公安輔警招聘面試模擬試題與答案解析高潛力
- 監(jiān)獄特警建設(shè)規(guī)劃方案(3篇)
- 2025-2030 年資金募集呼吁 Call for Capitalisation 2025-2030 - Call for GFCR capitalisation 2025-2030
- 基層農(nóng)業(yè)執(zhí)法培訓(xùn)方案(3篇)
- 稅務(wù)局會(huì)計(jì)講解
- 委托執(zhí)法簽約儀式方案(3篇)
- 產(chǎn)品與活動(dòng)策劃方案(3篇)
- 巷道施工永久支護(hù)方案(3篇)
- 小區(qū)停水降壓措施方案(3篇)
- 水果聯(lián)營(yíng)合同協(xié)議
- 2024智能船舶規(guī)范
- 資料員筆試試題及答案
- 幼兒園晨間活動(dòng)教研培訓(xùn)
- 2025農(nóng)村土地墓地買(mǎi)賣(mài)合同
- 建筑施工現(xiàn)場(chǎng)消防安全培訓(xùn)課件
- 中小企業(yè)數(shù)字化轉(zhuǎn)型路徑分析
- 勞務(wù)派遣員工離職協(xié)議書(shū) (2024年版)
- 升學(xué)宴會(huì)模板
- 2024至2030年中國(guó)聚脲涂料行業(yè)市場(chǎng)發(fā)展調(diào)研及投資前景分析報(bào)告
- DB11∕T 420-2019 電梯安裝、改造、重大修理和維護(hù)保養(yǎng)自檢規(guī)則
評(píng)論
0/150
提交評(píng)論