RISC-V架構指令集的手冊,目前是唯一的中文版,翻譯大作
0.png (44.37 KB, 下載次數: 344)
下載附件
2018-6-1 17:10 上傳
序言
這是描述 RISC-V 用戶級體系結構文檔的 2.1 版。注意已經凍結的基本用戶級 ISA 和 2.0版的IMAFDQ擴展從該文檔的上一個版本[30]以來并沒有發生變化,但是填充了一些規范的“空洞”以及改善了文檔。對軟件約定做了一些改變。
對注釋部分做了大量地添加和改進。
每一章有單獨的版本號。
修改了>64位的長指令編碼,以避免在非常長的指令格式里移動 rd區分符。
現在使用基本整數格式來描述 CSR 指令,引入了計數器寄存器,不同于 (以前版本)僅在后面的浮點部分(和特權體系結構手冊中)引入。
SCALL指令和 SBREAK 指令被分別重命名為 ECALL指令和EBREAK 指令。它們的編碼和功能并沒有改變。
澄清了浮點NaN 的處理,以及一個新的規定的NaN值。
澄清了浮點到整數轉換溢出時的返回值。
澄清了LR/SC 允許的成功和要求的失敗,包括在序列中使用壓縮指令。
一個新的RV32E 基本ISA提案,可減少整數寄存器數量。
修訂了調用約定。
放松了軟浮點調用約定的棧對齊,描述了 RV32E調用約定。
一個修訂的C壓縮擴展提案,版本1.9。
0.png (53.11 KB, 下載次數: 180)
下載附件
2018-6-1 17:16 上傳
22.1 到 ISA手冊 1.0 版本以前的歷史
RISC-V ISA和指令集手冊構建于幾個早期的項目。管理員級機器的幾個方面和數據手冊的整個格式,可以追溯到始于1992年的UC Berkeley和ICSI的T0(Torrent-0)向量微處理器項目。T0是一款基于MIPS-II ISA的向量處理器,其主要體系結構設計師、RTL設計師是Krste Asanović,主要的VLSI實現者是Brian Kingsbury、Bertrand Irrisou。ICSI的David Johnson是T0 ISA設計、部分管理員模式、手冊文本的主要貢獻者。John Hauser為T0 ISA設計提供了大量的反饋。
在MIT始于2000的Scale(Software-Controlled Architecture for Low Energy),是在T0項目基礎上構建的,修訂了管理員級接口,并通過丟棄分支延遲槽而脫離了MIPS標量ISA。MIT的Scale Vector-Thread處理器主要體系結構設計師是Ronny Krashinsky和Christopher Batten,而Mark Hampton負責把基于GCC的編譯器和工具移植到了Scale。 在2002年秋季學期,一個T0 MIPS標量處理器規范的修訂版本(MIPS-6371)被用于新版本的MIT 6.371 “VLSI概述”課程教學,教師是Chris Terman和Krste Asanović。 Chris Terman完成了絕大部分課程實驗的材料(課程并沒有TA!)。這個6.371課程在2005年春季,發展成為MIT的6.884“復雜數字設計”試行課程,教師是Arvind和Krste Asanović,后來發展成6.375春季正式課程。一個稱為SMIPS的簡化版Scale基于MIPS的標量ISA,被用于6.884/6.375課程。Christopher Batten作為最早的TA,圍繞SMIPS ISA開發了大量的文檔和實驗材料。這些SMIPS實驗材料被TA Yunsup Lee采用并增強, 在2009年秋季在UC Berkeley的CS250 “VLSI系統設計”課程中使用,教師是John Wawrzynek、Krste Asanović和John Lazzaro。 Marven(Malleable Array of Vector-thread ENgines)是第二代向量線程體系結構。這個設計是由Christopher Batten領導,當時他還是于2007年夏開始的UC Berkeley訪問學者。一名來自Hitachi的訪問專家Hidetaka Aoki,為早期的Marven ISA和微體系結構提供了大量的反饋。Marven結構是基于Scale結構的,但是Marven ISA更加遠離了Scale定義的MIPS ISA變種,它有一個統一的浮點和整數寄存器文件。Marven被設計用于支持備選的數據并行加速器實驗。Yunsup Lee是各種Marven向量單元的主要實現者,Rimas Avižienis是各種Marven標量單元的實現者。Yunsup Lee和Christopher Batten將GCC移植到新的Marven ISA上。Christopher Celio提供了Marven的一個傳統向量指令集(“Flood”)變種的初始定義。
基于所有前面這些項目,RISC-V ISA定義始于2010年夏。RISC-V 32位指令子集的一個初始版本被用于UC Berkeley 2010年秋的CS250“VLSI系統設計”課程,Yunsup Lee是課程的TA。RISC-V與早期受MIPS啟發的設計完全不同。John Hauser為浮點ISA定義做了貢獻。
22.2 從 ISA手冊 2.0 版本以來的歷史
首款被制造的RISC-V處理器使用Verilog書寫的,并作為Raven-1測試芯片,于2011年在ST的預先量產28nm FDSOI工藝上制造。在Krste Asanović的指導下,Yunsup Lee和Andrew Waterman研發了兩個內核,并一同被制造:1)一個具有錯誤檢測觸發器的RV64標量內核,2)一個具有64位浮點向量單元的RV64內核。最開始的微體系結構被稱為“火車失事(TrainWreck)”,主要是因為使用不成熟的設計庫在短時間內完成了設計。 接著,一個全新的、按序、去耦合RV64內核微體系結構,在Krste Asanović指導下,由Andrew Waterman、Rimas Avižienis和Yunsup Lee研發出來,繼續鐵軌模式,代號“火箭(Rocket)”,按照George Stephenson成功的蒸汽機車設計而命名。Rocket是使用Chisel語言書寫的,Chisel是由UC Berkeley開發的一種新的硬件設計語言。Rocket中的IEEE浮點單元是由John Hauser、Andrew Waterman和Brian Richards開發的。由此,Rocket被進一步修正和改進,并2次在28nm FDSOI工藝上制造(Raven-2、Raven-3),為一個光子學項目而5次在IBM 45nm SOI工藝上制造(EOS14、EOS16、EOS18、EOS20、EOS22)。現在正在做的工作就是將Rocket設計做成一個可參數化的RISC-V處理器生成器。 EOS14-EOS22芯片包含了一個早期版本的Hwacha,它是一個64位IEEE 浮點向量單元,由Yunsup Lee、Andrew Waterman、Huy Vo、Albert Ou、Quan Nguyen、Stephen Twigg在Krste Asanović的指導下研發的。EOS16-EOS22包含了具有cache一致性協議的雙核,在Krste Asanović的指導下由Henry Cook、 Andrew Waterman研發。 EOS14芯片成功地運行在1.25GHz,EOS16芯片遭受IBM pad庫的一個bug影響,EOS18和EOS20成功地運行在1.35GHz。 Raven測試芯片的貢獻者包括Yunsup Lee、Andrew Waterman、Rimas Avižienis、Brian Zimmer、Jaehwa Kwak、Ruzica Jevtić、Milovan Blagojević、Alberto Puggelli、Steven Bailey、Ben Keller、Pi-Feng Chiu、Brian Richards、Borivoje Nikolić和Krste Asanović。 EOS測試芯片的貢獻者包括Yunsup Lee、 Rimas Avižienis、 AndrewWaterman、 Henry Cook、Huy Vo、Daiwei Li、Chen Sun、Albert Ou、Quan Nguyen、Stephen Twigg、Vladimir Stojanović和Krste Asanović。 Andrew Waterman和Yunsup Lee開發了C++ ISA仿真器“Spike”,作為研發過程中的黃金模型,其名字來源于在US橫貫大陸的鐵路竣工慶典上所使用的黃金鐵道釘。Spike已經成為一個BSD開源項目。
AndrewWaterman完成了一個具有初步RISC-V壓縮指令集設計的碩士論文[28]。
完成了各種各樣的RISC-V FPGA實現,主要是Par Lab項目研究的集成演示的一部分。最新的FPGA設計具有3個cache一致性的RV64IMA處理器,運行了一個研究用的操作系統。FPGA實現的貢獻者包括Andrew Waterman、Yunsup Lee、Rimas Avižienis和Krste Asanović。 RISC-V處理器被用于UC Berkeley的數門課程。Rocket被用于2011年秋的CS250,作為課程項目的基礎,Brian Zimmer是課程TA。在2012年春本科生CS152課程上,Christopher Celio使用ChiSel語言書寫了一系列適合教學用途的RV32處理器,命名為“Sodor”,這是“托馬斯小火車”和他的小伙伴們生活的小島。這個套件包括一個微編碼內核(microcoded core)、一個非流水內核、2級流水內核、3級流水內核、5級流水內核,并在BSD授權下公開共享。這個套件于2013年春在CS152課程中得到更新和再度使用,Yunsup Lee是課程TA,2014年春Eric Love是課程TA。Christopher Celio也開發了一個亂序執行的RV64設計,稱為BOOM(Berkeley Out-of-Order Machine),并具有流水線可視化功能,被用于CS152課程。CS152課程還使用了由Andrew Waterman和Henry Cook開發的具有cache一致性版本的Rocket內核。
2013年夏,定義了RoCC(Rocket Custom Coprocessor)接口,以簡化向Rocket內核添加定制加速器的工作。在2013年秋,Rocket和RoCC接口被大量應用于CS250 VLSI課程,教師是Jonathan Bachrach,好幾個學生加速器項目是構建在RoCC接口之上的。Hwacha向量單元作為RoCC協處理器被重寫。
兩名Berkeley本科生,Quan Nguyen和Albert Ou,在2013年春,成功的將Linux移植到RISC-V上。
在2014年1月,Colin Schmidt成功的完成了RISC-V 2.0的LLVM后端。
在2014年3月,Bluespec的Darius Rad貢獻了軟浮點ABI支持的GCC移植。
我們也注意到幾個其他的RISC-V內核實現,包括一個由Tommy用Verilog書寫,一個由Rishiyur Nikhil用Bluespec書寫。
致謝
感謝Christopher F. Batten、Preston Briggs、Christopher Celio、David Chisnall、Stefan
Freudenberger、John Hauser、Ben Keller、Rishiyur Nikhil、Michael Taylor、Tommy Thorn和
Robert Watson為ISA 2.0版本規范的初稿提出意見。
2.0 版的序言
用戶指令集體系結構規范的第二個發布版本,我們試圖保持這個基本的用戶 ISA 加上通
用擴展(就是IMAFD),在未來版本中保持固定不變。從這個 ISA的 1.0 版本[29]以來,有如
下變化:
ISA 被劃分為一個整數基本內核和幾個標準擴展。
重新組織了指令格式,使得立即數編碼更加高效。
基本的ISA 被定義為擁有一個小端(little-endian)的存儲器系統,而大端、雙端作為非標準的變種。
Load-Reserved/Store-Conditional(LR/SC)指令被添加進原子指令集擴展。
AMO和LR/SC 指令可以支持釋放一致性模型(release consistency model)。
FENCE指令提供了細粒度的存儲器和 I/O序列化(orderings)。
加入了fetch-and-XOR的AMO(AMOXOR),對 AMOSWAP的編碼進行了修改,以便留出空間。
將 20 位立即數加到 PC 上的 AUIPC 指令,替換了 RDNPC 指令,AUIPC 指令只讀取當前的PC 值。這導致對位置無關代碼(position-independent code)的大量簡化。
JAL 指令現在被移動到 U 類型格式,具有一個顯示的(explicit)目標寄存器,而 J指令被 rd=x0 的 JAL 指令所代替。這個改變,消除了唯一一條需要隱式(implicit)目標寄存器的指令,并且從標準 ISA 中去掉了 J 類型指令格式。這雖然是 JAL 指令的一個附加效果,但是卻極大地減少了基本 ISA 的復雜性。
去掉了 JALR 指令的靜態提示(static hints)。對于使用標準調用約定編譯的代碼來說,這些提示和 rd、rs1寄存器是冗余的。
JALR 指令現在清除了計算出來的目標地址的最低位,以簡化硬件并允許在函數指針中存儲附加信息。
MFTX.S、MFTX.D 指令被分別命名為FMV.X.S、FMV.X.D指令,MXTF.S、MXTF.D指令被分別命名為 FMV.S.X、FMV.D.X指令。
MFFSR、 MTFSR 指令被分別命名為FRCSR、 FSCSR指令,新增了FRRM、 FSRM、
FRFLAGS和FSFLAGS指令,用于獨立地訪問fcsr寄存器的舍入模式和異常標志。
FMV.X.S、FMV.X.D 指令現在使用 rs1 作為源操作數,而不是 rs2。這樣可以簡化數據通路設計。
新增了FCLASS.S、FCLASS.D 浮點指令。
采用了一種更簡單的 NaN生成和傳播模式。
對于 RV32I,系統性能計數器被擴展成 64 位寬度,可以單獨讀取高 32 位和低 32位。
定義了規定的(Canonical)NOP 和MV指令編碼。
對于48位、64位和大于64位指令,定義了標準指令長度編碼。 新增了一個128位地址空間變種RV128 的描述。
32位基本指令格式中的大部分操作碼分配給用戶自定義的定制擴展。
一個印刷錯誤被糾正:store的源操作數來源于 rd,其實應該來源于 rs2。
0.png (95.42 KB, 下載次數: 196)
下載附件
2018-6-1 17:11 上傳
0.png (120.09 KB, 下載次數: 176)
下載附件
2018-6-1 17:11 上傳
0.png (177.19 KB, 下載次數: 179)
下載附件
2018-6-1 17:12 上傳
完整的pdf格式文檔51黑下載地址(共114頁):
51hei_riscv-spec-v2.1中文版.pdf
(3.65 MB, 下載次數: 711)
2018-6-1 17:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|