精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RISC-V指令集架構特點

strongerHuang ? 來源:漫談嵌入式 ? 作者:漫談嵌入式 ? 2022-10-14 09:08 ? 次閱讀

RISC-V是當下熱門的技術,值得大家學習,這里分享一份關于RISC-V指令的內容給大家。

1. 指令集

1.1 指令集

指令集是一個CPU的基石,要實現CPU 計算和控制功能,就必須定義好一系列與硬件電路相匹配的指令系統.

指令就是我們交代CPU 要執行的操作,指令集就可以簡單理解為指令的集合。我們把cpu 能夠識別的指令匯總在一起就構成了一個指令集。

不同的CPU 有不同的指令集,根據他們的繁簡程度可以分為兩種:復雜指令集CISC 和精簡指令集 RISC

1.2 指令集架構

指令架構(Instruction Set Architecture, 縮寫為ISA),是軟件和硬件的接口,不同的應用需求,會有不同的指令架構。要設計一款CPU 指令體系就是設計的出發點。

2. RISC-V 指令集架構

RISC-V 指令有以下特點:

完全開放

指令簡單

模塊化設計,易于擴展

名稱 類別 說明
RV32I 基礎指令 整數指令:包含算法、分支、邏輯、訪存指令,有32個32位寄存器。能尋址32位地址空間
RV64I 基礎指令 整數指令:包含算法、分支、邏輯、訪存指令,有32個64位寄存器。能尋址64位地址空間
RV128I 基礎指令 整數指令:包含算法、分支、邏輯、訪存指令,有32個128位寄存器。能尋址128位地址空間
RV32E 基礎指令 與RV32I一樣,只不過只使用前16個(0~15)32位寄存器
M 擴展指令 包含乘法、除法、取模求余指令
F 擴展指令 單精度浮點指令
D 擴展指令 雙精度浮點指令
Q 擴展指令 四倍精度浮點指令
A 擴展指令 原子操作指令:比如比較并交換,讀改寫等指令
C 擴展指令 壓縮指令:單指令長度為16位,主要用于改善程序大小
P 擴展指令 單指令多數據(Packed-SIMD)指令
B 擴展指令 位操作指令
H 擴展指令 支持(Hypervisor)管理指令
J 擴展指令 支持動態翻譯語言指令
L 擴展指令 十進制浮點指令
N 擴展指令 用戶中斷指令
G 通用指令 包含I、M、A、F、D 指令

要滿足現在操作系統和應用程序的基本運行,RV32G指令集或者RV64G指令集就夠了。RV32G和RV64G指令集只有寄存器位寬和尋址大小不同。這些指令按照功能可以分為如下幾類:

整數運算指令:算術、邏輯、比較等基礎運算功能。

分支轉移指令:實現條件轉移、無條件轉移操作

加載存儲指令:實現字節、半字(half word)、字(word)、雙字(RV64I)的加載,存儲操作,采用的都是寄存器相對尋址方式

控制與狀態寄存器訪問指令:實現對系統控制與系統狀態寄存器的原子讀-寫、原子讀-修改、原子讀-清零等操作

系統調用指令:實現系統調用功能。

原子指令:用于各種同步鎖

單雙浮點指令:實現浮點運算操作

從上表我們可以看到,RISC-V 指令集具有模塊化特點。這就允許我們根據自己的需求,選擇一個基礎指令集,加上若干個擴展指令集靈活搭配,就可以得到我們想要的指令集架構,進而根據這樣的指令架構,設計出貼合我們需求的CPU.

作為初學者,我們了解RISC-V 的核心即可。它的最核心部分是一個基礎指令集,叫做RV32I.

RV32I 包含的指令是固定不變的,這為編譯器設計人員,操作系統開發人員和匯編語言程序員提供了穩定的基礎框架。

RV32I 指令集:

ea8e1f4e-4b57-11ed-a3b6-dac502259ad0.png

RV32I 指令集如圖所示,把帶下劃線的字母從左至右連接組合就是組成了RV32I指令。{}表示集合中垂直方向的每個項目指令不同變體。變體用下劃線字母或者下劃線表示表示,如果大括號里面只有下劃線,則表示對此變體不需要用字母表示

我們結合具體例子來看:下圖表示了bge、blt、bgeu、bltu四個指令。

eabbf810-4b57-11ed-a3b6-dac502259ad0.png

3. 指令格式

下圖是RISC-V 指令格式,從下圖可以看到RSIC-V共六種指令格式。

eac6b0b6-4b57-11ed-a3b6-dac502259ad0.png

opcode :指令操作碼

imm:代碼立即數

func3和funct7:代表指令對應的功能

rs1:源寄存器1

rs2:源寄存器2

rd:目標寄存器(RSIC-V 一個指令可以提供三個寄存器操作)

六種指令格式作用如下:

序號 指令類型 作用
1 R 型指令 用于寄存器和寄存器操作
2 I 型指令 用于短立即數和內存載入指令load操作
3 S 型指令 用于內存存儲store操作
4 B 型指令 用于有條件跳轉操作
5 U 型指令 用于長立即數操作
6 J 型指令 用于無條件跳轉操作

4.寄存器

在RISC-V 的規范里面定義了32 個通用寄存器。其中31個是常規寄存器,1個恒為0值的x0寄存器。

0值寄存器是為了滿足匯編語言程序員和編譯器編寫者的使用需要,他們可以使用x0寄存器作為操作數,來完成功能相同的操作。

addix0,x0,0;0=0+0,相當于nop空指令

RSIC-V 寄存器說明

寄存器 ABI 名稱 說明
x0 zero 0值寄存器,硬編碼為0,寫入數據忽略,讀取數據為0
x1 ra 用于返回地址(return address)
x2 sp 用于棧指針(stack pointer)
x3 gp 用于通用指針 (global pointer)
x4 tp 用于線程指針 (thread pointer)
x5 t0 用于存放臨時數據或者備用鏈接寄存器
x6~x7 t1~t2 用于存放臨時數據寄存器
x8 s0/fp 需要保存的寄存器或者幀指針寄存器
x9 s1 需要保存的寄存器
x10~x11 a0~a1 函數傳遞參數寄存器或者函數返回值寄存器
x12~x17 a2~a7 函數傳遞參數寄存器
x18~x27 s2-s11 需要保存的寄存器
x28~x31 t3~t6 用于存放臨時數據寄存器

5. RV32I 指令解讀

5.1 算術與邏輯指令

在RV32I 中包括算術指令(add/sub)、數值比較指令(slt)、邏輯指令(and/or/xor)以及移位指令(sll/srl/sra)這幾種指令。

這些指令和其他指令集差不多,它們從寄存器讀取兩個32位的值,并將32位運算結果再寫回到目標寄存器。

I型指令:立即數算術運算

eae265e0-4b57-11ed-a3b6-dac502259ad0.png

R型指令:寄存器與寄存器操作指令

eaf0a150-4b57-11ed-a3b6-dac502259ad0.png

需要指出的是,在寄存器與寄存器操作的算術指令中。必須要有減法指令。這和立即數操作指令不同。

5.2 Load 和 Store 指令

在RISC-V 指令集中,對內存的讀寫只能通過LOAD 和 STORE 指令實現。而其他的指令只能以寄存器為操作對象。

eb031f92-4b57-11ed-a3b6-dac502259ad0.png

如上圖所示,load 和 store 的尋址模式只能是符號擴展12位的立即數,加上基地址寄存器得到訪存的存儲器地址。因為沒有了復雜的內存尋址方式,這讓CPU 流水線可以對數據沖突提前做出判斷,并通過流水線各級轉送加以處理,而不需要加入空操作(NOP),極大的提高了代碼的執行效率。

5.3 分支跳轉指令

5.3.1 有條件的分支跳轉

RV32I 中的條件跳轉就是通過比較兩個寄存器的值,進行分支跳轉:

beq:相等

bne:不相等

bge/bgeu:大于等于

blt/bltu:小于

eb1b37f8-4b57-11ed-a3b6-dac502259ad0.png

5.3.2 無條件的分支跳轉

無條件跳轉指令可以細分為直接跳轉和間接跳轉。直接跳轉指令JAL 如下圖所示:

eb4474a6-4b57-11ed-a3b6-dac502259ad0.png

JAL 指令執行過程是這樣的。它會把20位立即數做符號位擴展。并左移一位,產生一個32位符號數。然后,將該32位符號數和PC相加來產生目標地址(這樣,JAL 可以作為短跳轉指令,跳至PC+1MB的地址范圍內)

同時JAL 會把緊隨其后的那條指令地址,存入目標寄存器中。這樣,如果目標寄存器是零,則JAL就等同GOTO指令;如果目標寄存器不為零,JAL可以實現函數調用功能。

間接跳轉直接JALR如下:

eb4474a6-4b57-11ed-a3b6-dac502259ad0.png

JALR指令會把12位立即數和源寄存器相加,并把相加結果末位清零,作為新的跳轉地址。同時和JAL指令一樣,也會把緊隨其后的那條指令地址,存入目標寄存器中。

5.4 其他指令

除了內存地址空間和通用寄存器地址空間外,RISC-V 還定義了一個獨立的控制和狀態寄存器地址空間(Control Status Register)每個處理器實現的CSR會因設計目標不同而有差異,但是這些CSR的訪問方式卻是一樣的,訪問這些CSR指令定義在了用戶指令集中(Zicsr指令集擴展)

eb59ec28-4b57-11ed-a3b6-dac502259ad0.png

有了上圖這些CSR 指令,能夠讓我們輕松的訪問一些程序性能計數器。這些計數器包括系統時間、時間周期以及執行的指令數目。

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10824

    瀏覽量

    211133
  • 接口
    +關注

    關注

    33

    文章

    8496

    瀏覽量

    150834
  • 指令集
    +關注

    關注

    0

    文章

    222

    瀏覽量

    23363
  • RISC-V
    +關注

    關注

    44

    文章

    2228

    瀏覽量

    46025

原文標題:RISC-V 指令詳解

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    正式的RISC-V基礎指令集架構與特權架構規范來了,RISC-V基金會已正式批準

    根據RISC-V基金會官網發布的公告,RISC-V 基金會宣布了批準RISC-V 基礎指令集架構與特權
    的頭像 發表于 07-11 10:46 ?9829次閱讀

    淺談RISC-V指令集架構的來龍去脈

    最近和幾個行業內的朋友聊天,聊到了近兩年比較火的AI人工智能,并向我推薦了一款目前在小范圍內比較火的國產處理器,我查了一下該處理器是采用的開源RISC-V指令集架構。曾有人將RISC-V
    的頭像 發表于 01-24 17:42 ?6272次閱讀

    RISC-V開放架構設計之道|閱讀體驗】RISC-V基礎整數指令集

    第2章 RV32I:RISC-V基礎整數指令集 本章重點講解構成RISC-V基礎整數指令集的基本指令
    發表于 01-31 21:10

    RISC--V架構特點

    RISC--V架構特點 RISC-V架構RISC-V
    發表于 05-24 08:01

    RISC-V指令集特點總結

    開源 定義:RISC-V 是完全開源的指令集架構(ISA),意味著任何人都可以查看、使用、修改以及分發其設計,而無需支付版權費用。 優勢:這種開源特性促進了全球性的創新和合作。 社區化 定義
    發表于 08-30 22:05

    RISC-V和arm指令集的對比分析

    的市場占有率。同時,ARM架構也在服務器領域得到應用,尤其是在低功耗、高性能的服務器中。 四、指令集特點 RISC-VRISC-V
    發表于 09-28 11:05

    RISC-V指令集位寬的幾點學習心得

    ,實際上,RISC-V指令集的位寬具有更大的靈活性。 RISC-V指令集的位寬多樣性 RISC-V是一種基于精簡
    發表于 10-31 22:05

    RISC-V架構簡介

    【摘要】 本文首先對RISC-V架構做了簡要的介紹,在此基礎上實現了LiteOS在RISC-V架構上的適配過程的具體步驟,希望對你有所幫助。1 R
    發表于 07-28 07:46

    什么是RISC-VRISC-V指令具有哪些特點應用?

    什么是RISC-VRISC-V指令具有哪些特點應用?自己怎么才能設計出設計一套指令集
    發表于 10-14 09:05

    RISC-V指令集架構微控制器相關知識

    本系列痞子衡給大家介紹的是RISC-V指令集架構微控制器相關知識。  RISC-V指令集最早要追溯到2010年,是加州大學伯克利分校的一個研
    發表于 12-16 06:24

    RISC-V指令集的起源與發展歷史

    壓力。RISC-V 開源指令集的出現,引起了產業界的廣泛關注,科技巨頭很看重指令集架構(CPU ISA)的開放性,各大公司正在積極尋找ARM之外的第二選擇,
    發表于 05-02 09:07 ?7773次閱讀
    <b class='flag-5'>RISC-V</b><b class='flag-5'>指令集</b>的起源與發展歷史

    risc-v中國峰會直播:如何優化RISC-V指令集架構的代碼密度?

    第一屆中國峰會在上海舉辦,以下是小編整理的部分risc-v峰會的內容。主要介紹了影響代碼密度的因素以及如何優化RISC-V指令集架構的代碼密度?感興趣的小伙伴可以詳細了解一下。
    的頭像 發表于 06-23 12:12 ?3081次閱讀
    <b class='flag-5'>risc-v</b>中國峰會直播:如何優化<b class='flag-5'>RISC-V</b><b class='flag-5'>指令集</b><b class='flag-5'>架構</b>的代碼密度?

    簡單講講RISC-V指令集CPU的參數

    本次CPU采用32位RISC-V指令集架構(一代是自己瞎編指令集)。指令集就是程序指令的集合,指
    的頭像 發表于 08-07 14:55 ?3588次閱讀
    簡單講講<b class='flag-5'>RISC-V</b><b class='flag-5'>指令集</b>CPU的參數

    基于精簡指令集RISC-V內核的單片機

    RISC-V就不必多說了,詳細大家都了解。它是一個基于精簡指令集的開源指令集架構。與主流的主流的架構為x86與ARM
    的頭像 發表于 10-17 16:49 ?2215次閱讀

    一個基于精簡指令集原則的開源指令集架構RISC-V

    我們可以基于x86/ARM/ RISC-V指令集,進行處理器微架構設計和實現形成源代碼,并通過流片最終形成芯片產品。
    發表于 01-30 16:28 ?2820次閱讀