本文綜合自:汽車ECU開發(fā)和賢哥幸福婚戀課公眾號
原文鏈接:https://mp.weixin.qq.com/s/uJtEXlGj8iok0MpuvOuB6w
https://mp.weixin.qq.com/s/t0gzi9rSJE6TonmFwW3s6w
1.RISC-V概述及歷史
RISC-V 起源于加州大學(xué)伯克利分校。在 2010 年夏季,Krste Asanovic 教授帶領(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)公開免費下載?;饡煜掠谐^ 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-V Catalyst for ChangRISC-V,文章指出,RISC-V 標(biāo)準(zhǔn)是免費和開放的,沒有任何一個實體可以控制RISC-V 技術(shù)。企業(yè)、學(xué)術(shù)界和機構(gòu)都可以自由地在 RISC-V 指令集架構(gòu)上進行創(chuàng)新,共同推動計算前沿技術(shù)的迅速發(fā)展。
自RISC-V 架構(gòu)誕生以來,市場上已有數(shù)十個版本的 RISC-V 內(nèi)核和SoC芯片它們中的一部分是開源免費的,而商業(yè)公司開發(fā)的 RISC-V 處理器內(nèi)核和平臺是需要商業(yè)授權(quán)的。某些商業(yè)公司開發(fā)用于內(nèi)部使用的 RISC-V 內(nèi)核,但也可以開源運作。西部數(shù)據(jù)的 SweRV架構(gòu)(RV32IMC)是 RISC-V內(nèi)核處理器的典型代表,它是一個32 bit 順序執(zhí)行指令架構(gòu),具有雙向超標(biāo)量設(shè)計和9 級流水線,采用 28 nm 工藝技術(shù)實現(xiàn),運行頻率高達 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。
國產(chǎn)處理器芯片起步較晚,從2013年至今,集成電路每年的進口額均超過了 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)用前景會非常樂觀。
2. 什么是指令集,指令集與處理芯片之間有什么關(guān)系?RISC-V指令集的特點是什么?
處理器是一塊芯片。而芯片并不會自己工作,需要有人告訴它該做什么操作。例如告訴芯片下個操作做加法,這就是一條指令。
在人類社會中指令基本上是以語言或者聲音的形式存在,而在計算機系統(tǒng)中,指令是以二進制數(shù)存在的。一個芯片指令的合集就叫指令集。指令集規(guī)定了二進制數(shù)的格式、尋址方式、操作類型等。市面上常見的指令集有PC機常用的X86指令集、ARM的指令集等等。
一般來講,先有指令集,才會有芯片來支持指令集。所以指令集可以說是芯片的早期藍(lán)圖。指令集類似一種標(biāo)準(zhǔn),定義了芯片支持的功能。而芯片是一個實物,實現(xiàn)指令集定義的功能。所以你常聽的RISC-V處理器,實際上是支持了RISC-V指令集的處理器芯片。
CPU 支持的所有指令和指令的字節(jié)級編碼就是這個 CPU 的指令集架構(gòu)(Instruction Set Architecture,ISA),指令集在計算機軟件和硬件之間搭起了一座橋梁。不同的 CPU 家族,例如 86、PowerPC 和 ARM,都有不同的 ISA。RISC-VISA 開源,更確切地講是它的指令集規(guī)范和標(biāo)準(zhǔn)開源。
RISC-V指令集是基于精簡指令集計算原理建立的開放指令集架構(gòu)(ISA),RISC-V是在指令集不斷發(fā)展和成熟的基礎(chǔ)上建立的全新指令。RISC-V ISA可以免費使用,允許任何人設(shè)計、制造和銷售 RISC-V 芯片和軟件。
RISC-V(讀音“risk-five”)是一個新的指令集體系結(jié)構(gòu)(ISA),它最初用于支持計算機 體系結(jié)構(gòu)研究和教學(xué),但現(xiàn)在我們希望它也成為一個對于工業(yè)實現(xiàn)來說標(biāo)準(zhǔn)、免費、開放的 體系結(jié)構(gòu)。RISC-V官方定義 RISC-V 的目的包括:
一個完全開放的 ISA,能夠自由地提供給學(xué)術(shù)界和工業(yè)界使用。
一個真正的 ISA,能夠適合直接在硬件上實現(xià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)擴展的 ISA,可以支持通用的軟件開發(fā)。
支持修訂的 2008 IEEE-754浮點標(biāo)準(zhǔn)。
ISA 支持豐富的用戶級 ISA 擴展和各種特殊的變種。
對應(yīng)用程序、操作系統(tǒng)內(nèi)核、硬件實現(xiàn)的32 位、64 位地址空間變種。
ISA 支持高度并行的多核、眾核實現(xiàn),包括異構(gòu)多處理器等。
可選的變長指令,以支持?jǐn)U展可用的指令編碼空間、支持一個可選的密集指令編碼, 以提高性能、靜態(tài)代碼大小和能耗效率。
一個可完全虛擬化的 ISA,以簡化虛擬機監(jiān)督管理器(Hypervisor)的開發(fā)。
ISA 支持新的管理員級(supervisor-level)和虛擬機監(jiān)督管理級(hypervisor-level) ISA 設(shè)計。
3.關(guān)于RISC-V的V
RISC-V 這個名字,代表了 UC Berkeley 大學(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)的加速器特別感興趣。我們需要一個高度靈活、高度可 擴展的基本 ISA,在此基礎(chǔ)上可以構(gòu)建我們自己的研究。
我們總被問及這樣一個問題“為什么要開發(fā)一個新的 ISA?”。使用一個已 有的商業(yè)化的 ISA,其顯而易見最大的優(yōu)勢在于其已經(jīng)具備了豐富和廣泛支持。
的軟件生態(tài)系統(tǒng),包括開發(fā)工具和可移植的應(yīng)用程序,而在研究和教學(xué)中,這 些都是可以利用的。其他的好處包括擁有大量的文檔和教程示例。然而,我們 的經(jīng)驗證明,在科研和教學(xué)中使用商業(yè)的指令集,在實際中獲得的好處很小, 而且掩蓋不了它的缺點:
商業(yè) ISA 都是私有的。除了 SPARC V8(它是一個開放的IEEE 標(biāo)準(zhǔn)[1]), 絕大多數(shù) ISA 的擁有者非常小心地保護他們的知識產(chǎn)權(quán),并且并不歡 迎自由實現(xiàn)的競爭實現(xiàn)。對于僅僅使用軟件模擬器來進行學(xué)術(shù)研究和 教學(xué)來說,這并不是一個問題,但是對于那些希望分享真實硬件實現(xiàn) 的科研小組來說,這就是一個大問題。對于那些被強迫信任僅有的幾 個商業(yè) ISA 實現(xiàn),而不允許創(chuàng)建自己的全新實現(xiàn)(clean room implementation)的企業(yè)來說,這也是一個大問題。我們并不能確保 所有的 RISC-V 實現(xiàn)沒有侵犯第三方專利,但是我們確保我們絕不會 起訴一個 RISC-V 的實現(xiàn)者。
(1)商業(yè) ISA 僅僅在某個市場領(lǐng)域比較流行。當(dāng)書寫此文檔時,最顯而易 見的例子就是 ARM 體系結(jié)構(gòu)在服務(wù)器領(lǐng)域并沒有得到很好的支持, 而 Intel x86 體系結(jié)構(gòu)(或者幾乎任何一種其他的體系結(jié)構(gòu))在移動領(lǐng) 域并沒有得到很好的支持,雖然 Intel 和 ARM 正在試圖進入對方的市 場領(lǐng)域。另外一個例子是 ARC 和 Tensilica,它們提供了可擴展的內(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īng)用程序。即使我們努力實現(xiàn)了一個商業(yè) ISA,對于運行一個現(xiàn)有的應(yīng)用程序來說,仍然是不夠的。絕大多數(shù) 應(yīng)用程序需要一個完整的 ABI(application binary interface)才能運行, 而不僅僅是用戶級 ISA。絕大多數(shù) ABI 依賴于庫(libraries),而庫又 依賴于操作系統(tǒng)支持。為了運行一個已有的操作系統(tǒng),需要實現(xiàn)管理 員級 ISA、OS 需要的設(shè)備接口。這些通常并沒有很好的規(guī)范,而在實 現(xiàn)上比用戶級 ISA 具有更大的復(fù)雜性。
?。?)流行的商業(yè) ISA 不是為可擴展性設(shè)計的。占統(tǒng)治地位的商業(yè) ISA 并沒 有為可擴展性而進行特殊的設(shè)計,結(jié)果就是,隨著后續(xù)指令集不斷地 增長,指令編碼的復(fù)雜度大幅度增加。而類似 Tensilica(被 Cadence 公司收購)、ARC(被 Synopsys 公司收購)這樣的公司,它們圍繞 可擴展性構(gòu)建了 ISA 和工具鏈(toolchain),但是它們瞄準(zhǔn)的是嵌入 式應(yīng)用而不是通用計算系統(tǒng)。
一個修改過的商業(yè) ISA 實際上是一個新的 ISA。我們的一個主要目標(biāo) 是支持體系結(jié)構(gòu)研究,包括主要的 ISA 擴展。即使是很小的擴展,也 減弱了使用標(biāo)準(zhǔn) ISA 而帶來的好處,因為必須修改編譯器,而應(yīng)用程 序必須從源代碼進行重新編譯,以利用這些擴展。引入了新的體系結(jié) 構(gòu)狀態(tài)的大一些的擴展,也需要對操作系統(tǒng)進行修改。最終使得一個 修改的商業(yè) ISA 變成一個新的 ISA,但是不得不肩負(fù)著所有基本 ISA 遺留下來的包袱。我們堅信 ISA 是整個計算系統(tǒng)中最重要的接口,沒有理由把這么重要的接 口變成私有的。占統(tǒng)治地位的商業(yè) ISA 都是基于超過 30 年歷史的指令集。軟 件開發(fā)者應(yīng)當(dāng)能夠定位到一個開放標(biāo)準(zhǔn)的硬件目標(biāo)機,商業(yè)處理器設(shè)計者應(yīng)當(dāng) 在實現(xiàn)質(zhì)量上進行競爭。我們并不是第一個為了適合硬件實現(xiàn)而提出開放 ISA 設(shè)計的。我們也考慮 了其他現(xiàn)有的開放 ISA 設(shè)計,其中 OpenRISC 體系結(jié)構(gòu)[17]與我們的目標(biāo)最為 接近。
我們由于幾個技術(shù)原因,并不采用 OpenRISC ISA:
1、OpenRISC 有條件碼(condition code)和分支延遲槽(branch delay slot), 這對于更高性能的實現(xiàn)來說,變得更為復(fù)雜。
2、OpenRISC 使用了 32 位定長指令編碼和 16 位立即數(shù),阻礙了更密集 的指令編碼,并對后續(xù) ISA 擴展限制了空間。
3、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 基金會來保護和推進這個標(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)費。開源采用寬松的BSD 協(xié)議,企業(yè)可以完全自由免費使用,同時也允許企業(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)則完全拋棄包袱,借助計算機體系結(jié)構(gòu)經(jīng)過多年的發(fā)展已經(jīng)成為比較成熟的技術(shù)的優(yōu)勢,從輕上路。RISC-V基礎(chǔ)指令集只有40多條,加上其他的模塊化擴展指令總共也就幾十條指令。RISC-V的規(guī)范文檔僅有145頁,而特權(quán)架構(gòu)文檔的篇幅也僅為 91頁。
(3)易于移植操作系統(tǒng)。現(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(機器模式);而高性能應(yīng)用操作系統(tǒng)場景則可以選擇RV32IMFDC 指令集,使用 Machine Mode(機器模式)與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ù)維護該工具鏈。當(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ù)會先被符號擴展成 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 寫進去的總是被丟棄。所以 x0 提供兩種功能:一是提供常量0,在軟件編程中0可以說是最常用的常量:二是提供一個可以丟棄結(jié)果的場所。有了 x0 寄存器,很多本來需要單獨指令的操作只要在普通的指令前加上x0 就可以實現(xiàn)。
(1)nop 空指令,RISC-V沒有提供nop 指令,而是用addi x0,x0,0來實現(xiàn)空指令,這條addi 使用x0作為目標(biāo)存器,會丟棄結(jié)果,所以這條指令不會對程序狀態(tài)產(chǎn)生任何影響,和空指令是完全等價的,這就不需要單獨的空指令了。
(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 沒有單獨的跳轉(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 寄存器的處理器需要單獨指令或者需要組合兩條指令才能實現(xiàn)的操作。
8. 為什么RISC-V在國內(nèi)如此受關(guān)注?
RISC-V作為較新的指令集,技術(shù)上是有一定的優(yōu)勢,其實最大的原因是這個指令集是開源免費的,基于這套指令集設(shè)計的芯片無論用于科研和商業(yè)均無需給Intel和ARM上稅。目前市面上常見的指令集都是要收費的,例如華為麒麟芯片,就購買了ARM家的指令集。這些有指令集知識產(chǎn)權(quán)的公司均為國外公司,非常不利于我國實現(xiàn)關(guān)鍵芯片的自主可控。
目前,國內(nèi)外已經(jīng)有非常多的RISC-V核心RTL代碼,好多是開源的,如果你感興趣可以下載一個研究研究。如果用于商用,國內(nèi)外也有許多商業(yè)公司提供穩(wěn)定的RISC-V IP核心。例如國外的SiFive公司、Microsemi公司、國內(nèi)的阿里平頭哥、芯來科技等公司。
9.RISC-V的核心是如何與AI加速核心集成的?
從整體實現(xiàn)方式上來講,共有兩種方式可以實現(xiàn)AI加速核心與RISC-V計算核心的集成。
方法一是總線外設(shè)方案,該方案可以直接把AI加速核心當(dāng)作一個總線高速外設(shè)掛載于SOC系統(tǒng)。
方案二是RISC-V指令集獨有的辦法,擴展RISC-V核心方案。利用RISC-V指令集可擴展的特性,添加專門的AI指令,在設(shè)計微內(nèi)核時加入一個指令派送單元,將AI加速指令直接派送給AI加速核心。
實際上,由于神經(jīng)網(wǎng)絡(luò)計算的過程中幾乎不需要條件判斷等操作,規(guī)律的乘加操作占據(jù)大多數(shù)運行時間,兩種實現(xiàn)方案并無本質(zhì)差別。
擴展RISC-V核心的方案優(yōu)勢在于當(dāng)總線外設(shè)較多時,共用了微內(nèi)核資源,減少了總線開銷。而擴展RISC-V核心方案的缺點是對RISC-V編譯工具鏈要做少許修改,增加額外的工作量。