日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

RISC-V指令系统

發布時間:2024/3/12 windows 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RISC-V指令系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.介紹

指令系統:計算機語言中的單詞成為指令,而這個詞匯表就是指令系統。

指令集架構(ISA)

????????x86:傳統pc市場的主流,善于處理大數據。

????????ARM:移動端設備(手機)市場,處理快數據為主。

????????RISC-V:當需要同時兼顧數據傳輸速度和傳輸量時,RISC-V更有優勢。

更重要的是RISC-V是開源的。

二.計算機硬件的操作

主要包括:算術運算、邏輯運算、數據傳輸、移位操作、條件分支、無條件跳轉。

數據存儲模式:大端存儲,小端存儲。

大端:高位字節排放在內存的低地址端,低位字節排放在內存的高地址端。

小端:低位字節排放在內存的低地址端,高位字節排放在內存的高地址端。

設計原則:簡單源于規整、優秀的設計需要適當的折中、更少則更快(寄存器數量太多可能會增加時鐘周期)。


三.計算機中的指令表示

RISC-V常見指令表示:R型,I型,S型,B型,J型指令

R型:一般用于寄存器-寄存器操作。

I型:一般用于立即數訪問和load操作。

S型:用于訪存store操作。

B型:用于條件跳轉操作。

J型:用于無條件操作。


R型:一般用于寄存器-寄存器操作。

funct7(7bit)rs2(5bit)rs1(5bit)funct3(3bit)rd(5bit)opcode(7bit)

funct7:操作碼字段。

funct3:操作碼字段。

rs2:第二個源操作數寄存器。

rs1:第一個源操作數寄存器。

rd:目的操作數寄存器,存放操作結果。

opcode:(操作碼)指令的基本操作。

下面以add x9,x20,x21為例介紹。

00000001010110100000010010110011

01001:9? ? ? ? 10100:20? ? ? ? 10101:21

通過funct7,funct3,opcode來識別是一個R型加法指令

將x20寄存器中的值加上x21寄存器中的值相加的結果存放到x9寄存器中。


I型:一般用于短立即數和訪存操作

immediate(12bit)rs1(5bit)funct3(3bit)rd(5bit)opcode(7bit)

注意:計算機中是以補碼形式存儲immediate;12位立即數。立即數范圍-2^11到((2^11)-1)(-2048到2047)

下面以lb?x9,64(x22)介紹

lb x9,64(x22)

000001000000

10110

000

01001

0000011

?000001000000 :64? ? ? ? 10110:22? ? ? ? 01001:9

解釋:將rs1地址偏移立即數位空間中的值存儲到rd所指的寄存器空間中。


S型:用于訪存store操作

immediate[11:5](7bit)rs2(5bit)rs1(5bit)funct3(3bit)immediate[4:0](5bit)opcode(7bit)

個人理解這里的立即數為何這樣存儲:為了規整,將原本的rd用來存儲立即數的低5位。

下面以sb x5,40(x6)介紹

sb x5,40(x6)

0000001

00101

00110

000

01000

0100011

000000101000:40? ? ? ? 00101:5? ? ? ? 00110:6

解釋:將rs2寄存器中的值存儲到rs1寄存器偏移立即數位地址中去。


B型:有條件分支

immediate[12,[10:5]](7bit)rs2(5bit)rs1(5bit)funct3(3bit)immediate[[4:1],11](5bit)opcode(7bit)

注意:13位立即數,末尾始終為0;

B型立即數格式(末尾時鐘為零)
imm[12]imm[11]imm[10:5]imm[4:1]0

下面以beq x5,x6,100為例

beq x5,x6,100

0000011

00110

00101

000

00100

1100011

代碼中整理出的立即數
0000001100100

? ? ? ?注意在使用b型指令時,代碼末尾別忘了補個0(或者獲取的立即數別忘了左移一位)。解釋:如果rs1和rs2寄存器中的值相等,則pc跳轉到pc+immediate位置去,這是要重建流水線的。


J型:無條件跳轉

immediate[20,[10:1],11,[19:12]]

(20bit)

rd

(5bit)

opcode

(7bit

J型立即數(20位)

immediate[20] immediate[19:12] immediate[11] immediate[10:1] 0

下面以jal x1,100為例

jal x1,100

00000110010000000000

00001

1101111

代碼中立即數
000000000000001100100

? ? ? ? 寫代碼時,末尾補0別忘了

解釋:將pc+4存儲到rd寄存器中,同時pc跳轉到pc+立即數位置去。


U型:格式和B型類似,20位大立即數操作

immediate[31:12]rdopcode

vfd

與J型區別在于立即數放的位置

下面以lui x1,0xf0000為例

lui x1,0xf0000

11110000000000000000

00001

0110111

解釋:rd寄存器存儲立即數? x1=0xf0000;


常見操作及其指令

1、算術運算指令

包括addi,slti,sltiu,add,sub,slt,sltu。

slt比較指令 指令后邊加i 一般表示是指令中有立即數,而u表示有無符號。

immediate[11:0]rs1000rd0010011addi(I型)
immediate[11:0]rs1010rd0010011slti(I型)
immediate[11:0]rs1011rd0010011sltiu(I型)
0000000rs2rs1000rd0110011add(R型)
0100000rs2rs1000rd0110011sub(R型)
0000000rs2rs1010rd0110011slt(R型)
0000000rs2rs1011rd0110011sltu(R型)

2、移位指令

包括slli,srli,srai,sll,srl,sra。

注意立即數移位指令中立即數(shamt)的范圍:(這里立即數是5位的立即數)具體如下表:

0000000shamtrs1001rd0010011slli(I型)
0000000shamtrs1101rd0010011srli(I型)
0100000shamtrs1101rd0010011srai(I型)
0000000rs2rs1001rd0110011sll(R型)
0000000rs2rs1101rd0110011srl(R型)
0100000rs2rs1101rd0110011sral(R型)

注意邏輯右移和算術右移是由區別的。

邏輯右移:數據向右移立即數位,空位填0。

算術右移:數據向右移立即數位,空位填最高位(符號位)。

為了區別這兩個機器碼的第30位用來作為判斷。具體仔細觀察上表。

3、邏輯操作指令

包括xori ,ori,andi,xor,or,and。

imm[11:0]rs1100rd0010011xori(I型)
imm[11:0]rs1110rd0010011ori(I型)
imm[11:0]rs1111rd0010011andi(I型)
0000000rs2rs1100rd0110011xor(R型)
0000000rs2rs1110rd0110011or(R型)
0000000rs2rs1111rd0110011and(R型)

小總結:算術運算,邏輯運算,移位運算這些基本運算指令一般都為R型或者I型指令

4、加載存儲指令

包括lb,ln,lw,lbu,lhu,sb,sh,sw。

作用就是將數據從寄存器中取出來,或者存儲到寄存器中去,不同在于每次取出多少(半字,字等)。

imm[11:0]rs1000rd0000011lb(I型)
imm[11:0]rs1001rd0000011lh(I型)
imm[11:0]rs1010rd0000011lw(I型)
imm[11:0]rs1100rd0000011lbu(I型)
imm[11:0]rs1101rd0000011lhu(I型)
imm[11:5]rs2rs1000imm[4:0]0100011sb(S型)
imm[11:5]rs2rs1001imm[4:0]0100011sh(S型)
imm[11:5]rs2rs1010imm[4:0]0100011sw(S型)

5、控制轉移指令

主要是一些跳轉指令:beg,bne,blt,bge,bltu,bgeu,jalr,jal。

imm[12]imm[10:5]rs2rs1000imm[4:1]imm[11]1100011beq(B型)
imm[12]imm[10:5]rs2rs1001imm[4:1]imm[11]1100011bne(B型)
imm[12]imm[10:5]rs2rs1100imm[4:1]imm[11]1100011blt(B型)
imm[12]imm[10:5]rs2rs1101imm[4:1]imm[11]1100011bge(B型)
imm[12]imm[10:5]rs2rs1110imm[4:1]imm[11]1100011bltu(B型)
imm[12]imm[10:5]rs2rs1111imm[4:1]imm[11]1100011bgeu(B型)
imm[11:0]rs1000rd1100011jalr(I型)
imm[20]imm[10:1]imm[11]imm[19:12]rd1100011jal(J型)

注意上述立即數存儲方式,在上面的B型指令講解中有提到。

總結

資源里有我使用FPGA寫的一個基于RISC-V的單周期CPU。目前不具備流水線,后續準備寫一個5級流水的單周期處理器,同樣會發布到博客上。希望大家評論給出意見。

總結

以上是生活随笔為你收集整理的RISC-V指令系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。