goood設(shè)計(jì)網(wǎng)站俄羅斯搜索引擎yandex
1. RISC-V指令集介紹
RISC-V 念作 “risk-five”,代表著 Berkeley 所研發(fā)的第五代精簡(jiǎn)指令集。
該項(xiàng)目 2010 年始于加州大學(xué)伯克利(Berkeley)分校,希望選擇一款 ISA用于科研和教學(xué)。經(jīng)過(guò)前期多年的研究和選型,最終決定放棄使用現(xiàn)成的X86 和 ARM 等 ISA,而是自己從頭研發(fā)一款:
- List itemX86:太復(fù)雜,IP 問(wèn)題
- List itemARM:一樣的復(fù)雜,而且在 2010 年之前還不支持 64 位,以及同樣的 IP 問(wèn)題。
2. 模塊化ISA
指令集分為基本部分和擴(kuò)展部分,基本部分的指令集所有硬件實(shí)現(xiàn)都必須有這一部分實(shí)現(xiàn),而擴(kuò)展部分則是可選的。擴(kuò)展部分又分為標(biāo)準(zhǔn)擴(kuò)展和非標(biāo)準(zhǔn)擴(kuò)展。例如,乘除法、單雙精度的浮點(diǎn)、原子操作就在標(biāo)準(zhǔn)擴(kuò)展子集中。
由 1 個(gè)基本整數(shù)指令集 + 多個(gè)可選的擴(kuò)展指令集組成?;A(chǔ)指令集是固定的,永遠(yuǎn)不會(huì)改變。
RISC ISA = 1個(gè)基本整數(shù)指令集 + 多個(gè)可選的擴(kuò)展指令集。
“I” 基本整數(shù)集,其中包含整數(shù)的基本計(jì)算、Load/Store和控制流,所有的硬件實(shí)現(xiàn)都必須包含這一部分。
?“M” 標(biāo)準(zhǔn)整數(shù)乘除法擴(kuò)展集,增加了整數(shù)寄存器中的乘除法指令。
?“A” 標(biāo)準(zhǔn)操作原子擴(kuò)展集,增加對(duì)儲(chǔ)存器的原子讀、寫(xiě)、修改和處理器間的同步。
?“F” 標(biāo)準(zhǔn)單精度浮點(diǎn)擴(kuò)展集,增加了浮點(diǎn)寄存器、計(jì)算指令、L/S指令。
?“D” 標(biāo)準(zhǔn)雙精度擴(kuò)展集,擴(kuò)展雙精度浮點(diǎn)寄存器,雙精度計(jì)算指令、L/S指令。
?I+M+F+A+D 被縮寫(xiě)為 “G” ,共同組成通用的標(biāo)量指令。
在后續(xù)ISA的版本迭代過(guò)程中,RV32G和RV64G總是保持不變。
RISC-V指令集架構(gòu)和X86/ARM相比,一大優(yōu)勢(shì)就是支持模塊化
RISC-V 指令集架構(gòu)一改傳統(tǒng)增量 ISA 模式,采用模塊化 ISA 模式,它被定義為基本的整數(shù)指令集架構(gòu),以及幾個(gè)標(biāo)準(zhǔn)的擴(kuò)展子集,可以自定義指令擴(kuò)展,如下表所示。
它的核心為RV32I的基礎(chǔ)整數(shù)指令集,RV32I 是固定的,并保持永遠(yuǎn)不變,而其擴(kuò)展是可選擇進(jìn)行實(shí)現(xiàn)的。這為編譯器、匯編器和操作系統(tǒng)開(kāi)發(fā)人員提供了穩(wěn)定的研發(fā)目標(biāo)。其擴(kuò)展包括 M、F、D、A、G、C、V等,開(kāi)發(fā)人員根據(jù)實(shí)際的應(yīng)用程序,硬件設(shè)計(jì)可以選擇是否實(shí)現(xiàn)這些擴(kuò)展。這種模塊化特性解決了以往指令集增量 ISA 模式和兼容性帶來(lái)的弊端,并且使得 RISC-V 具有了小型化、低功耗的特點(diǎn),這對(duì)于嵌入式應(yīng)用至關(guān)重要的。
3. RV32I:32個(gè)通用寄存器+1個(gè)PC寄存器
3.1 通用寄存器的介紹
risc-v 有32個(gè)通用寄存器(簡(jiǎn)寫(xiě) reg),標(biāo)號(hào)為x0 - x31,每個(gè)通用寄存器都有各自的用途。
例如 x2是作為sp棧指針、a0 a1用來(lái)保存函數(shù)參數(shù)或返回值。x0寄存器被硬連線為0,就是個(gè)0值寄存器。
ABI名稱(chēng)相當(dāng)于這些通用寄存器的別名,在RISC-V匯編當(dāng)中,都使用ABI名稱(chēng)來(lái)代表這些寄存器。
對(duì)于有別名的寄存器,優(yōu)先使用別名,更達(dá)意,更好記。
3.2 為啥通用寄存器只有32個(gè)?
寄存器的運(yùn)算和讀取速度是最快的,太少了顯然不好,但事實(shí)證明,寄存器數(shù)目如果太多了會(huì)導(dǎo)致訪問(wèn)寄存器的速度下降,也會(huì)造成速度下降。32個(gè)寄存器是risc-v設(shè)計(jì)者、實(shí)踐者的選擇。
4. RISCV-CRS寄存器
用戶級(jí)的CSR指令只能訪問(wèn)少數(shù)幾個(gè)只讀寄存器。