RISC-V開源指令集的指南(收藏)


RISC-V 是一個最新的,清晰的,簡約的,開源的 ISA,它以過去 ISA 所犯過的錯誤為鑒。RISC-V 架構師的目標是讓它在從最小的到最快的所有計算設備上都能有效工作。遵循馮諾依曼 70 年前的建議,這個 ISA 強調簡潔性來保證它的低成本,同時有著大量的寄存器和透明的指令執(zhí)行速度,從而幫助編譯器和匯編語言程序員將實際的重要問題轉換為適當?shù)母咝Тa。
下載鏈接:
RISC-V(“RISC five”)的目標是成為一個通用的指令集架構(ISA):
它要能適應包括從最袖珍的嵌入式控制器,到最快的高性能計算機等各種規(guī)模的處理器。
它應該能兼容各種流行的軟件棧和編程語言。
它應該適應所有實現(xiàn)技術,包括現(xiàn)場可編程門陣列(FPGA)、專用集成電路(ASIC)、全定制芯片,甚至未來的設備技術。
它應該對所有微體系結構樣式都有效:例如微編碼或硬連線控制;順序或亂序執(zhí)行流水線; 單發(fā)射或超標量等等。
它應該支持廣泛的專業(yè)化,成為定制加速器的基礎,因為隨著摩爾定律的消退,加速器的重要性日益提高。
它應該是穩(wěn)定的,基礎的指令集架構不應該改變。更重要的是,它不能像以前的專有指令集架構一樣被棄用,例如AMD Am29000、Digital Alpha、Digital VAX、Hewlett Packard PA-RISC、Intel i860、Intel i960、Motorola 88000、以及Zilog Z8000。
RISC-V的不同尋常不僅在于它是一個最近誕生的指令集架構(它誕生于最近十年,而大多數(shù)其他指令集都誕生于20世紀70到80年代),而且在于它是一個開源的指令集架構。與幾乎所有的舊架構不同,它的未來不受任何單一公司的浮沉或一時興起的決定的影響(這一點讓許多過去的指令集架構都遭了殃)。
它屬于一個開放的,非營利性質的基金會。RISC-V基金會的目標是保持RISC-V的穩(wěn)定性,僅僅出于技術原因緩慢而謹慎地發(fā)展它,并力圖讓它之于硬件如同Linux之于操作系統(tǒng)一樣受歡迎。
計算機體系結構的傳統(tǒng)方法是增量ISA,新處理器不僅必須實現(xiàn)新的ISA擴展,還必須實現(xiàn)過去的所有擴展。目的是為了保持向后的二進制兼容性,這樣幾十年前程序的二進制版本仍然可以在最新的處理器上正確運行。這一要求與來自于同時發(fā)布新指令和新處理器的營銷上的誘惑共同導致了ISA的體量隨時間大幅增長。例如,圖1.2顯示了當今主導ISA80x86的指令數(shù)量增長過程。這個指令集架構的歷史可以追溯到1978年,在它的漫長生涯中,它平均每個月增加了大約三條指令。

這個傳統(tǒng)意味著x86-32(我們用它表示32位地址版本的x86)的每個實現(xiàn)必須實現(xiàn)過去的擴展中的錯誤設計,即便它們不再有意義。例如,圖1.3描述了x86的ASCII Adjust afterAddition(aaa)指令,該指令早已失效。

作為一個類比,假設一家餐館只提供固定價格的餐點,最初只是一頓包含漢堡和奶昔的小餐。隨著時間的推移,它會加入薯條,然后是冰淇淋圣代,然后是沙拉,餡餅,葡萄酒,素食意大利面,牛排,啤酒,無窮無盡,直到它成為一頓大餐。食客可以在那家餐廳找到他們過去吃過的東西,盡管總的來說這樣做可能沒什么意義。這樣做的壞處是,用餐者為每次晚餐支付的宴會費用不斷增加。
RISC-V的不同尋常之處,除了在于它是最近誕生的和開源的以外,還在于:和幾乎所有以往的ISA不同,它是模塊化的。它的核心是一個名為RV32I的基礎ISA,運行一個完整的軟件棧。
RV32I是固定的,永遠不會改變。這為編譯器編寫者,操作系統(tǒng)開發(fā)人員和匯編語言程序員提供了穩(wěn)定的目標。模塊化來源于可選的標準擴展,根據應用程序的需要,硬件可以包含或不包含這些擴展。這種模塊化特性使得RISC-V具有了袖珍化、低能耗的特點,而這對于嵌入式應用可能至關重要。RISC-V編譯器得知當前硬件包含哪些擴展后,便可以生成當前硬件條件下的最佳代碼。慣例是把代表擴展的字母附加到指令集名稱之后作為指示。例如,RV32IMFD將乘法(RV32M),單精度浮點(RV32F)和雙精度浮點(RV32D)的擴展添加到了基礎指令集(RV32I)中。
在介紹 RISC-V 這個 ISA 之前,了解計算機架構師在設計 ISA 時的基本原則和必須做出的權衡是有用的。如下的列表列出了七種衡量標準。頁邊放置了對應的七個圖標,以突出顯示 RISC-V 在隨后章節(jié)中應對它們的實例。

成本(美元硬幣)
簡潔性(輪子)
性能(速度計)
架構和具體實現(xiàn)的分離(分開的兩個半圓)提升空間(手風琴) 程序大?。ㄏ鄬Φ膲浩戎粭l線的兩個箭頭) 易于編程/編譯/鏈接(兒童積木“像 ABC 一樣簡單”)
《RISC-V手冊開源指令集指南》本書假設您在 RISC-V 之前已經了解過其他指令集。如果沒有,請查看我們基于RISC-V 的相關入門架構書。
第二章介紹了 RV32I,它是 RISC-V 固定不變的基礎整數(shù)指令集,是 RISC-V 的核心內容。
第三章解釋了第二章中沒有介紹的其余 RISC-V 匯編語言內容,包括調用約定和一些用于鏈接的巧妙技巧。匯編語言包括所有符合規(guī)則的 RISC-V 指令和一些 RISC-V 指令集外的有用指令。這些偽指令是實際指令的巧妙變體,它們簡化了編寫匯編語言程序的過程,同時避免了使 ISA 復雜化。
接下來的三章闡述了 RISC-V 的標準擴展。當它們添加到 RIV32I 中的時候,我們統(tǒng)稱RV32G(G 代表一般):
第四章:乘法和除法(RV32M)?
第五章:浮點操作(RV32F 和 RV32D)?
第六章:原子操作(RV32A) 第 3 頁和第 4 頁的 RISC-V“參考卡”是本書中所有 RISC-V 指令(RV32G,RV64G 和RV32 / 64V)的摘要。
第七章介紹了可選的壓縮擴展 RV32C,它是 RISC-V 優(yōu)雅性的一個絕佳例子。通過把16 位指令限制為現(xiàn)有 32 位 RV32G 指令的短版本,它們幾乎是沒有代價的。匯編程序可以選擇指令大小,這使得匯編語言程序員和編譯器忘記 RV32C。將 16 位 RV32C 指令轉換成32 位 RV32G 指令的硬件解碼器只需要 400 個門,這即使在最簡單的 RISC-V 實現(xiàn)中也只占百分之幾。
第八章介紹了向量擴展 RV32V。當與眾多強大的單指令多數(shù)據(SIMD)指令(ARM-32,MIPS-32,x86-32)相比時,向量指令成為了 ISA 優(yōu)雅性的另一個例證。實際上,圖1.2 中添加到 x86-32 的數(shù)百條指令都是 SIMD,還有數(shù)百條指令即將問世。RV32V 甚至比大多數(shù)向量 ISA 更簡單,因為它通過向量寄存器指定數(shù)據類型和長度,而不是將這兩者嵌入到操作碼中。RV32V 也許是大家從傳統(tǒng)的基于 SIMD 的 ISA 轉到 RISC-V 的最為可能的原因。
第九章展示了 RV64G,它是 RISC-V 的 64 位地址版本。正如該章節(jié)所說的那樣,RISC-V 的架構師只需要拓寬寄存器,并加入一些字、雙字或長版的 RV32G 指令,就可以把地址從 32 位擴展為 64 位。
第十章介紹了系統(tǒng)指令,說明了 RISC-V 如何處理分頁以及機器、用戶和監(jiān)管者權限模式。
最后一章簡要介紹了 RISC-V 基金會目前正在考慮增加的其它擴展。每一章都會包含一個用 RISC- V 匯編語言寫成的程序,這是為了展示那一章所述的指令的用法,這樣有助于匯編語言程序員學習 RISC-V 匯編。有時,我們還會列出用 ARM,MIPS 和 x86 寫成的同樣的程序,從而突出 RISC-V 在簡潔性,以及成本、功耗、性能方面的優(yōu)勢。
RISC-V技術合集:
本號資料全部上傳至知識星球,更多內容請登錄智能計算芯知識(知識星球)星球下載全部資料。

免責申明:本號聚焦相關技術分享,內容觀點不代表本號立場,可追溯內容均注明來源,發(fā)布文章若存在版權等問題,請留言聯(lián)系刪除,謝謝。
電子書<服務器基礎知識全解(終極版)>更新完畢,知識點深度講解,提供182頁完整版下載。
獲取方式:點擊“閱讀原文”即可查看PPT可編輯版本和PDF閱讀版本詳情。
溫馨提示:
請搜索“AI_Architect”或“掃碼”關注公眾號實時掌握深度技術分享,點擊“閱讀原文”獲取更多原創(chuàng)技術干貨。

