




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