1.概述以及RISC-V的歷史
國產(chǎn)處理器芯片起步較晚,從2013年至今,集成電路每年的進(jìn)口額均超過了 2000 億美元。RISC-V和AI(人工智能)芯片是我國最有希望突破的領(lǐng)域之一。RISC-V使用的領(lǐng)域還是對于生態(tài)依賴比較小的嵌入式系統(tǒng)或者新興的IoT(物聯(lián)網(wǎng))、邊緣計算、人工智能領(lǐng)域,但RISC-V得到了產(chǎn)業(yè)界和社區(qū)的廣泛支持,同時,現(xiàn)在很多企業(yè)開始對 RISC-V 重視,所以說RISC-V 應(yīng)用前景會非常樂觀。
CPU 支持的所有指令和指令的字節(jié)級編碼就是這個 CPU 的指令集架構(gòu)(InstructionSet Architecture,ISA),指令集在計算機(jī)軟件和硬件之間搭起了一座橋梁。不同的 CPU 家族,例如 86、PowerPC 和 ARM,都有不同的 ISA。RISC-VISA 開源,更確切地講是它的指令集規(guī)范和標(biāo)準(zhǔn)開源。
RISC-V 起源于加州大學(xué)伯克利分校。在 2010 年夏季,KrsteAsanovic 教授帶領(lǐng)他的兩個學(xué)生 Andrew Waterman 和 Yunsup Lee 啟動了一個3個月的項目,目標(biāo)是針對 x86 和ARM 指令集架構(gòu)復(fù)雜和需要IP 授權(quán)的問題,開發(fā)一個簡化和開放的指令集架構(gòu)。RISC-V基金會創(chuàng)建于2015 年,是一家非營利組織?;饡聲钤缬?Bluespec、Google、Microsemi、NVIDIA、NXP、UC Berkeley、Western Digital 七家單位組成,目前的主席是 Krste Asanovi 教授。
成員單位現(xiàn)在已經(jīng)比較多了:
基金會為核心芯片架構(gòu)制定標(biāo)準(zhǔn)和建立生態(tài),標(biāo)準(zhǔn)公開免費(fèi)下載?;饡煜掠谐^ 1 000 家成員,包括高通、NXP、阿里巴巴和華為等。RISC-V 基金會成員可以使用 RISC-V 商標(biāo)。RISC-V 指令集架構(gòu)采用開源BSD 授權(quán),任何企業(yè)、高校和個人都可以遵循RISC-V 架構(gòu)指南設(shè)計自己的 CPU.秉承開放、中立的宗旨,RISC-V 基金會總部從美國遷往瑞士,并于 2020年3月完成在瑞士的注冊,更名為 RISC-V 國際基金會(RISC-V International Association)。近日,基金會 CEO Calista Redmond 撰文 RISC-VCatalyst for ChangRISC-V,文章指出,RISC-V 標(biāo)準(zhǔn)是免費(fèi)和開放的,沒有任何一個實體可以控制RISC-V 技術(shù)。企業(yè)、學(xué)術(shù)界和機(jī)構(gòu)都可以自由地在 RISC-V 指令集架構(gòu)上進(jìn)行創(chuàng)新,共同推動計算前沿技術(shù)的迅速發(fā)展。
自RISC-V 架構(gòu)誕生以來,市場上已有數(shù)十個版本的 RISC-V 內(nèi)核和SoC芯片它們中的一部分是開源免費(fèi)的,而商業(yè)公司開發(fā)的 RISC-V 處理器內(nèi)核和平臺是需要商業(yè)授權(quán)的。某些商業(yè)公司開發(fā)用于內(nèi)部使用的 RISC-V 內(nèi)核,但也可以開源運(yùn)作。西部數(shù)據(jù)的 SweRV架構(gòu)(RV32IMC)是 RISC-V內(nèi)核處理器的典型代表,它是一個32 bit 順序執(zhí)行指令架構(gòu),具有雙向超標(biāo)量設(shè)計和9 級流水線,采用 28 nm 工藝技術(shù)實現(xiàn),運(yùn)行頻率高達(dá) 1.8 GHz,可提供 4.9 CoreMark/MHz 的性能,略高于ARM的 Cortex A15,已經(jīng)在西部數(shù)據(jù)的 SSD和 HDD 控制器上使用,SweRV項目是一個開源項目(Chip Alliance)典型的開源 RISC-V 內(nèi)核有 Rocket Core,它是加州大學(xué)伯克利分校開發(fā)的一個經(jīng)典的 RV64 設(shè)計。伯克利分校還開發(fā)了一個 BOOM Core,它與 Rocket Core不同的是面向更高的性能。蘇黎世理工大學(xué)(ETH Zurich)開發(fā)的 Zero-riscy,是經(jīng)典的RV32 設(shè)計。蘇黎世理工大學(xué)還開發(fā)了另外一款 RISC-V R15CY Core,可配置成RV32E,面向的是超低功耗、超小芯片面積的應(yīng)用場景。由 Clifford Wolf 開發(fā)的RISC-V Core-Pico RV32,其內(nèi)核重點在于追求面積和 CPU頻率的優(yōu)化。
開源的 RISC-V 內(nèi)核非常適用于研究和教學(xué),但用于商業(yè)芯片設(shè)計還有許多工作要做。SiFive(美國賽防科技)由 Yunsup Lee 創(chuàng)立,他也是 RISC-V 的創(chuàng)始人之一。2017 年 SiFive公司發(fā)布首個 RISC-V 內(nèi)核SOC平臺家族,以及相關(guān)支持軟件和開發(fā)板。在這些芯片中,包括采用 28 nm 制造技術(shù),支持 Linux 操作系統(tǒng)的64位多核CPUU500,以及采用 180 nm 制造技術(shù)的多外設(shè)低成本IOT 處理器內(nèi)核 E300。
2.RISC-V指令集特點
RISC-V指令集是基于精簡指令集計算原理建立的開放指令集架構(gòu)(ISA),RISC-V是在指令集不斷發(fā)展和成熟的基礎(chǔ)上建立的全新指令。RISC-V ISA可以免費(fèi)使用,允許任何人設(shè)計、制造和銷售 RISC-V 芯片和軟件。
RISC-V(讀音“risk-five”)是一個新的指令集體系結(jié)構(gòu)(ISA),它最初用于支持計算機(jī)體系結(jié)構(gòu)研究和教學(xué),但現(xiàn)在我們希望它也成為一個對于工業(yè)實現(xiàn)來說標(biāo)準(zhǔn)、免費(fèi)、開放的 體系結(jié)構(gòu)。RISC-V官方定義 RISC-V 的目的包括:
一個完全開放的 ISA,能夠自由地提供給學(xué)術(shù)界和工業(yè)界使用。
一個真正的 ISA,能夠適合直接在硬件上實現(xiàn),而不僅僅是適用于模擬或者二進(jìn)制 翻譯。
一個避免對某一種微體系結(jié)構(gòu)風(fēng)格(例如微編碼、按序、去耦合、亂序等)或者實現(xiàn)技術(shù)(例如全定制、ASIC、FPGA)“過度體系結(jié)構(gòu)化(over-architecting)”的 ISA, 但是也能夠非常高效地利用任何一種技術(shù)實現(xiàn)。
包含一個小的基本整數(shù) ISA(可以作為一個定制的加速器的基礎(chǔ)或者作為教學(xué)用途) 和多個可選的標(biāo)準(zhǔn)擴(kuò)展的 ISA,可以支持通用的軟件開發(fā)。
支持修訂的 2008 IEEE-754浮點標(biāo)準(zhǔn)[10]。
ISA 支持豐富的用戶級 ISA 擴(kuò)展和各種特殊的變種。
對應(yīng)用程序、操作系統(tǒng)內(nèi)核、硬件實現(xiàn)的32 位、64 位地址空間變種。
ISA 支持高度并行的多核、眾核實現(xiàn),包括異構(gòu)多處理器等。
可選的變長指令,以支持?jǐn)U展可用的指令編碼空間、支持一個可選的密集指令編碼,以提高性能、靜態(tài)代碼大小和能耗效率。
一個可完全虛擬化的 ISA,以簡化虛擬機(jī)監(jiān)督管理器(Hypervisor)的開發(fā)。
ISA 支持新的管理員級(supervisor-level)和虛擬機(jī)監(jiān)督管理級(hypervisor-level) ISA 設(shè)計。
3.關(guān)于RISC-V的V
RISC-V 這個名字,代表了 UCBerkeley 大學(xué)設(shè)計的第五代主要的 RISC ISA(前 四個是 RISC-I[18]、RISC-II[11]、SOAR[27]和SPUR[14])。羅馬數(shù)字“V”也暗示 了“變種(Variations)”和“向量(Vectors)”,以支持各種體系結(jié)構(gòu)研究,包括各種數(shù)據(jù)并行加速器,也是這個 ISA 設(shè)計的明確目標(biāo)。
4、發(fā)明者為什么要開發(fā)一個新的ISA
關(guān)于為什么要有RISC-V,發(fā)明者這么說:
硬件上實現(xiàn)一些研究思想特別感興趣(自從這個規(guī)范的第一個版本發(fā)布之后,我們已經(jīng)完成了 11 塊不同的 RISC-V 硅片的制造),在課堂上提供給學(xué)生真實 的實現(xiàn)(在 Berkeley,RISC-V 處理器的 RTL設(shè)計代碼已經(jīng)用于多個本科生、研 究生的課程)。在我們當(dāng)前的研究中,由于傳統(tǒng)晶體管不斷變小帶來的能耗約束,我們對特殊、異構(gòu)的加速器特別感興趣。我們需要一個高度靈活、高度可 擴(kuò)展的基本 ISA,在此基礎(chǔ)上可以構(gòu)建我們自己的研究。
我們總被問及這樣一個問題“為什么要開發(fā)一個新的ISA?”。使用一個已 有的商業(yè)化的 ISA,其顯而易見最大的優(yōu)勢在于其已經(jīng)具備了豐富和廣泛支持。
的軟件生態(tài)系統(tǒng),包括開發(fā)工具和可移植的應(yīng)用程序,而在研究和教學(xué)中,這些都是可以利用的。其他的好處包括擁有大量的文檔和教程示例。然而,我們 的經(jīng)驗證明,在科研和教學(xué)中使用商業(yè)的指令集,在實際中獲得的好處很小,而且掩蓋不了它的缺點:
l 商業(yè) ISA 都是私有的。除了 SPARC V8(它是一個開放的IEEE 標(biāo)準(zhǔn)[1]), 絕大多數(shù) ISA 的擁有者非常小心地保護(hù)他們的知識產(chǎn)權(quán),并且并不歡 迎自由實現(xiàn)的競爭實現(xiàn)。對于僅僅使用軟件模擬器來進(jìn)行學(xué)術(shù)研究和教學(xué)來說,這并不是一個問題,但是對于那些希望分享真實硬件實現(xiàn) 的科研小組來說,這就是一個大問題。對于那些被強(qiáng)迫信任僅有的幾 個商業(yè) ISA實現(xiàn),而不允許創(chuàng)建自己的全新實現(xiàn)(clean room implementation)的企業(yè)來說,這也是一個大問題。我們并不能確保 所有的 RISC-V實現(xiàn)沒有侵犯第三方專利,但是我們確保我們絕不會 起訴一個 RISC-V 的實現(xiàn)者。
商業(yè) ISA 僅僅在某個市場領(lǐng)域比較流行。當(dāng)書寫此文檔時,最顯而易 見的例子就是 ARM 體系結(jié)構(gòu)在服務(wù)器領(lǐng)域并沒有得到很好的支持, 而 Intelx86 體系結(jié)構(gòu)(或者幾乎任何一種其他的體系結(jié)構(gòu))在移動領(lǐng) 域并沒有得到很好的支持,雖然 Intel 和 ARM 正在試圖進(jìn)入對方的市 場領(lǐng)域。另外一個例子是ARC 和 Tensilica,它們提供了可擴(kuò)展的內(nèi)核, 但是只關(guān)注嵌入式市場。這種市場的劃分,使得支持某種特定商業(yè) ISA獲得的好處大大削弱,因為事實上軟件生態(tài)系統(tǒng)只存在于某個領(lǐng) 域,到了別的領(lǐng)域,必須重新構(gòu)建。
商業(yè) ISA 此起彼伏。以前基于商業(yè) ISA 構(gòu)建的研究基礎(chǔ)設(shè)施,并不流行(SPARC、MIPS),甚至不再生產(chǎn)(Alpha)。這對于一個活躍的軟件 生態(tài)系統(tǒng)來說是一個大損失,一些圍繞 ISA 和支持工具的知識產(chǎn)權(quán)問題,也使得感興趣的第三方難以繼續(xù)支持這個 ISA。一個開放的 ISA 也可能失去流行性,但是任何感興趣的人,都可以繼續(xù)使用它并研發(fā) 相應(yīng)的生態(tài)系統(tǒng)。
流行的商業(yè) ISA 是復(fù)雜的。占統(tǒng)治地位的 ISA(x86 和 ARM)若要支 持常用軟件棧和操作系統(tǒng),那么其硬件實現(xiàn)都非常復(fù)雜。更糟糕的是,幾乎所有的復(fù)雜性都來自于糟糕的、或者至少是過時的ISA設(shè)計考慮, 而不是那些真正提高效率的特性。
僅靠商業(yè) ISA 并不足以運(yùn)行應(yīng)用程序。即使我們努力實現(xiàn)了一個商業(yè) ISA,對于運(yùn)行一個現(xiàn)有的應(yīng)用程序來說,仍然是不夠的。絕大多數(shù) 應(yīng)用程序需要一個完整的ABI(application binary interface)才能運(yùn)行, 而不僅僅是用戶級 ISA。絕大多數(shù) ABI依賴于庫(libraries),而庫又 依賴于操作系統(tǒng)支持。為了運(yùn)行一個已有的操作系統(tǒng),需要實現(xiàn)管理 員級 ISA、OS需要的設(shè)備接口。這些通常并沒有很好的規(guī)范,而在實 現(xiàn)上比用戶級 ISA 具有更大的復(fù)雜性。
流行的商業(yè) ISA 不是為可擴(kuò)展性設(shè)計的。占統(tǒng)治地位的商業(yè) ISA 并沒 有為可擴(kuò)展性而進(jìn)行特殊的設(shè)計,結(jié)果就是,隨著后續(xù)指令集不斷地 增長,指令編碼的復(fù)雜度大幅度增加。而類似 Tensilica(被Cadence 公司收購)、ARC(被 Synopsys 公司收購)這樣的公司,它們圍繞 可擴(kuò)展性構(gòu)建了 ISA和工具鏈(toolchain),但是它們瞄準(zhǔn)的是嵌入 式應(yīng)用而不是通用計算系統(tǒng)。
一個修改過的商業(yè) ISA 實際上是一個新的 ISA。我們的一個主要目標(biāo)是支持體系結(jié)構(gòu)研究,包括主要的 ISA 擴(kuò)展。即使是很小的擴(kuò)展,也 減弱了使用標(biāo)準(zhǔn) ISA 而帶來的好處,因為必須修改編譯器,而應(yīng)用程序必須從源代碼進(jìn)行重新編譯,以利用這些擴(kuò)展。引入了新的體系結(jié) 構(gòu)狀態(tài)的大一些的擴(kuò)展,也需要對操作系統(tǒng)進(jìn)行修改。最終使得一個 修改的商業(yè) ISA 變成一個新的ISA,但是不得不肩負(fù)著所有基本 ISA 遺留下來的包袱。我們堅信 ISA 是整個計算系統(tǒng)中最重要的接口,沒有理由把這么重要的接口變成私有的。占統(tǒng)治地位的商業(yè) ISA 都是基于超過 30 年歷史的指令集。軟 件開發(fā)者應(yīng)當(dāng)能夠定位到一個開放標(biāo)準(zhǔn)的硬件目標(biāo)機(jī),商業(yè)處理器設(shè)計者應(yīng)當(dāng)在實現(xiàn)質(zhì)量上進(jìn)行競爭。我們并不是第一個為了適合硬件實現(xiàn)而提出開放 ISA 設(shè)計的。我們也考慮 了其他現(xiàn)有的開放 ISA 設(shè)計,其中 OpenRISC體系結(jié)構(gòu)[17]與我們的目標(biāo)最為 接近。
我們由于幾個技術(shù)原因,并不采用OpenRISC ISA:
OpenRISC 有條件碼(condition code)和分支延遲槽(branch delay slot), 這對于更高性能的實現(xiàn)來說,變得更為復(fù)雜。
OpenRISC 使用了 32 位定長指令編碼和 16 位立即數(shù),阻礙了更密集 的指令編碼,并對后續(xù) ISA 擴(kuò)展限制了空間。
OpenRISC 并不支持 2008 修訂的 IEEE-754 浮點標(biāo)準(zhǔn)。
在我們開始的時候,64 位 OpenRISC 設(shè)計并沒有完成。從零開始,我們可以設(shè)計一個符合我們所有需求的ISA,當(dāng)然,這花了比 我們在開始時預(yù)期多得多的努力?,F(xiàn)在我們在構(gòu)建 RISC-V ISA 基礎(chǔ)設(shè)施上投入了大量的精力,包括文檔、編譯器工具鏈、操作系統(tǒng)移植、參考 ISA 模擬器、 FPGA 實現(xiàn)、高效的 ASIC 實現(xiàn)、體系結(jié)構(gòu)測試套件、教學(xué)材料等。自本文檔的上一個版本以來,在學(xué)術(shù)界和工業(yè)界對此 RISC-V ISA 都有大量的吸收(uptake), 我們也創(chuàng)建了非盈利的 RISC-V基金會來保護(hù)和推進(jìn)這個標(biāo)準(zhǔn)。RISC-V 基金會的 網(wǎng)址在 http://riscv.org,包含了基金會成員最新的信息和各種各樣使用 RISC-V 的開源項目。
5.RISC-V指令集的優(yōu)勢
(1)完全開源。對于 RISC-V 指令集的使用,RISC-V基金會不收取高額的授權(quán)費(fèi)。開源采用寬松的BSD 協(xié)議,企業(yè)可以完全自由免費(fèi)使用,同時也允許企業(yè)添加自有指令集,而不必開放共享,實現(xiàn)差異化發(fā)展。
(2)架構(gòu)簡單。RISC-V設(shè)。處理器領(lǐng)域,流的架構(gòu)為x8與ARM架構(gòu)。x86與ARM架構(gòu)的發(fā)展過程也伴隨了現(xiàn)代處理器架構(gòu)技術(shù)的不斷發(fā)展成熟,但作為商用的架構(gòu),為了能夠保持架構(gòu)的向后兼容性,不得不保留許多過時的定義,導(dǎo)致其指令數(shù)目多,指令冗余嚴(yán)重,文檔數(shù)量龐大,所以要在這些架構(gòu)上開發(fā)新的操作系統(tǒng)或者直接開發(fā)應(yīng)用門檻很高。而RISC-V 架構(gòu)則完全拋棄包袱,借助計算機(jī)體系結(jié)構(gòu)經(jīng)過多年的發(fā)展已經(jīng)成為比較成熟的技術(shù)的優(yōu)勢,從輕上路。RISC-V基礎(chǔ)指令集只有40多條,加上其他的模塊化擴(kuò)展指令總共也就幾十條指令。RISC-V的規(guī)范文檔僅有145頁,而特權(quán)架構(gòu)文檔的篇幅也僅為 91頁。
(3)易于移植操作系統(tǒng)?,F(xiàn)代操作系統(tǒng)都做了特權(quán)級指令和用戶級指令的分離,特權(quán)指今只能由操作系統(tǒng)調(diào)用,而用戶級指令才能在用戶模式調(diào)用,保障操作系統(tǒng)的穩(wěn)定。RISC-V提供了特權(quán)級指令和用戶級指令,同時提供了詳細(xì)的 RISC-V 特權(quán)級指令規(guī)范和 RISC-V 用戶級指令規(guī)范的詳細(xì)信息,使開發(fā)者能非常方便地移植 Linux 和 UNIX 系統(tǒng)到RISC-V平臺上。
(4)模塊化設(shè)計。RISC-V 架構(gòu)不僅短小精悍,其不同的部分還能以模塊化的方式組紗在一起,從而試圖通過一套統(tǒng)一的架構(gòu)滿足各種不同的應(yīng)用場景。用戶能夠靈活選擇不同的模塊組合,來實現(xiàn)自己定制化設(shè)備的需要,比如針對小面積低功耗嵌入式場景,用戶可以選擇RV32IC 組合的指令集,僅使用Machine Mode(機(jī)器模式);而高性能應(yīng)用操作系統(tǒng)場景則可以選擇RV32IMFDC 指令集,使用 Machine Mode(機(jī)器模式)與User Mode()戶模式)兩種模式。
(5)完整的工具鏈。對于設(shè)計CPU 來說,工具鏈?zhǔn)擒浖_發(fā)人員和 CPU 交互的窗口,若沒有工具鏈,則對軟件開發(fā)人員開發(fā)軟件要求很高,甚至軟件開發(fā)者無法讓CPU 工作起來在CPU 設(shè)計中,工具鏈的開發(fā)是一個巨大的工作。如果用RISC-V來設(shè)計芯片,芯片設(shè)計公司則不用再擔(dān)心工具鏈問題,只需專注于芯片設(shè)計,RISC-V社區(qū)已經(jīng)提供了完整的工具鏈 RISC-V 基金會持續(xù)維護(hù)該工具鏈。當(dāng)前RISC-V的支持已經(jīng)合并到主要的工具中,比如編評工具鏈 GCC、仿真工具 QEMU 等。
6、RISC-V的特點
1).沒有立即數(shù)減法
只有立即數(shù)加法指令(addi),沒有立即數(shù)減法指令(subi),那么減法怎么辦?無論是數(shù)學(xué)上還是程序上,x-y都等價于x+(-y),也就是說可以把減法變成加法,把被減數(shù)轉(zhuǎn)化成負(fù)數(shù)然后再加上減數(shù)就實現(xiàn)了和減法一樣的功能。正是基于這個原理,RISC-V只提供立即數(shù)加法,沒有提供立即數(shù)減法,如果需要立即數(shù)減法,那么就要麻煩編譯器把這個立即數(shù)轉(zhuǎn)化成負(fù)數(shù),然后繼續(xù)使用加法。這也是 RISC-V將立即數(shù)作為有符號數(shù)處理的原因。
2). x0 寄存器簡化指令集
引入x0 寄存器后,很多特殊指令只需用普通的指令加上 x0 做操作數(shù)就能解決,指令的數(shù)量大大減少,處理器的解碼電路也大大簡化。
3).?32 位常量
之前使用的ARM 處理器是將立即數(shù)表示不下的常量存到常量池,然后用PC相關(guān)的LDR指令加載到寄存器。RISC-V 的常量完全是用指令拼接,不需要 Load 指令,使用 Load 指令需要額外的訪問周期。RISC-V 單條指令可以表示 12 位的有符號常量,超過 12 位需要兩條指令來合成。其中一條指令是 lui,lui 指令加載常量的高 20 位,低 12 位可以用addi指令上去,這個過程需要編譯器算出立即數(shù)到底是什么,因為 addi 指令執(zhí)行的是有符號加法,其中的 12 位立即數(shù)會先被符號擴(kuò)展成 32 位的有符號數(shù)再參與計算。ARM 的常量加載需要8個字節(jié),一條指令加一個常量;RISC-V的常量加載也是需要8個字節(jié),兩條指令,兩者占用的程序空間一樣。
4).只有小于和大于等于
RISC-V 的比較跳轉(zhuǎn)指令只有 blt 和 bge,即只有小于和大于等于。但大于和小于等于也是需要的,RISC-V用了一個很巧妙的辦法用兩條指令實現(xiàn)了四條指令的工作,將 blt 的兩個參與比較的操作數(shù)位置換一下就有了 bgt(大于跳轉(zhuǎn)),將bge 的兩個參與比較的操作數(shù)位置換一下就有了 ble(小于或等于跳轉(zhuǎn))。
5).讓編譯器做更多工作
對 RISC 的理解是處理器盡量少做、編譯器盡量多做,這是非常有道理的,畢竟編譯的次數(shù)遠(yuǎn)少于執(zhí)行的次數(shù)。上面幾點就提到不少要讓編譯器多做的工作,又例如 B-type 是比較跳轉(zhuǎn)指令的格式,J-type 是長跳轉(zhuǎn)或函數(shù)調(diào)用指令格式,注意它們的立即數(shù)排列次序,把填充這里的立即數(shù)交給了鏈接器的工作。這樣排放偏移地址立即數(shù)是為了簡化處理器的設(shè)計,但明顯給編譯器增加了工作。
6).其他省掉的指令
很多常用的指令都被省掉了,比如nop、move、not、neg 等,但所有這些功能都還有只不過都是用其他的指令來等價實現(xiàn),比如not 指令是用xorird,rs,-1實現(xiàn)。
7、RISC-V的x0寄存器
Linux 有兩個特殊的設(shè)備:/dev/zero 和/dev/null。從/dev/zero 可以源源不斷地讀到0,往dev/null 寫的任何內(nèi)容都被丟棄。如果要創(chuàng)建一個需要填0的文件,就從dev/zero 拷貝,如
果要丟棄一些輸出,就把輸出重定向到/dev/null。RISC-V的x0寄存器就相當(dāng)于是硬件版的/dev/zero 和/dev/null的組合體。從0讀出來的總是0,往x0 寫進(jìn)去的總是被丟棄。所以 x0 提供兩種功能:一是提供常量0,在軟件編程中0可以說是最常用的常量:二是提供一個可以丟棄結(jié)果的場所。有了 x0 寄存器,很多本來需要單獨(dú)指令的操作只要在普通的指令前加上x0 就可以實現(xiàn)。
(1)nop 空指令,RISC-V沒有提供nop 指令,而是用addi x0,x0,0來實現(xiàn)空指令,這條addi 使用x0作為目標(biāo)存器,會丟棄結(jié)果,所以這條指令不會對程序狀態(tài)產(chǎn)生任何影響,和空指令是完全等價的,這就不需要單獨(dú)的空指令了。
(2)neg 取負(fù)數(shù)指令,RISC-V用 sub rd,x0,rs 來實現(xiàn),x0-rs 等價于0-rs,等價于-rs,有了x0,就可以用更普通的減法指令來實現(xiàn)取負(fù)數(shù)指令。
(3)j跳轉(zhuǎn)指令,RISC-V 沒有單獨(dú)的跳轉(zhuǎn)指令,只有jal跳轉(zhuǎn)鏈接指令,跳轉(zhuǎn)之前總是要把下一條指令的地址拷貝到寄存器,但是如果用 x0 作為jal 的操作寄存器,即把下-條指令的地址拷貝到 x0,那么效果就等價于j跳轉(zhuǎn)指令了,因為寫入 x0 的任何值都會被丟棄。
(4)beqz等于零跳轉(zhuǎn)指令等一系列和0比較的跳轉(zhuǎn)指令,程序中和0比較是相當(dāng)常見的操作,RISC-V 中和0比較的指令是普通的比較跳轉(zhuǎn)指令,是用 x0 寄存器做指令的操作數(shù)。還有很多其他這樣的指令,用普通的指令加上 x0 做操作數(shù),就實現(xiàn)了那些沒有x0 寄存器的處理器需要單獨(dú)指令或者需要組合兩條指令才能實現(xiàn)的操作。
審核編輯:湯梓紅
?
評論
查看更多