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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

RISC-V指令系统

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

一.介紹

指令系統(tǒng):計(jì)算機(jī)語言中的單詞成為指令,而這個詞匯表就是指令系統(tǒng)。

指令集架構(gòu)(ISA)

????????x86:傳統(tǒng)pc市場的主流,善于處理大數(shù)據(jù)。

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

????????RISC-V:當(dāng)需要同時兼顧數(shù)據(jù)傳輸速度和傳輸量時,RISC-V更有優(yōu)勢。

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

二.計(jì)算機(jī)硬件的操作

主要包括:算術(shù)運(yùn)算、邏輯運(yùn)算、數(shù)據(jù)傳輸、移位操作、條件分支、無條件跳轉(zhuǎn)。

數(shù)據(jù)存儲模式:大端存儲,小端存儲。

大端:高位字節(jié)排放在內(nèi)存的低地址端,低位字節(jié)排放在內(nèi)存的高地址端。

小端:低位字節(jié)排放在內(nèi)存的低地址端,高位字節(jié)排放在內(nèi)存的高地址端。

設(shè)計(jì)原則:簡單源于規(guī)整、優(yōu)秀的設(shè)計(jì)需要適當(dāng)?shù)恼壑小⒏賱t更快(寄存器數(shù)量太多可能會增加時鐘周期)。


三.計(jì)算機(jī)中的指令表示

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

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

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

S型:用于訪存store操作。

B型:用于條件跳轉(zhuǎn)操作。

J型:用于無條件操作。


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

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

funct7:操作碼字段。

funct3:操作碼字段。

rs2:第二個源操作數(shù)寄存器。

rs1:第一個源操作數(shù)寄存器。

rd:目的操作數(shù)寄存器,存放操作結(jié)果。

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

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

00000001010110100000010010110011

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

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

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


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

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

注意:計(jì)算機(jī)中是以補(bǔ)碼形式存儲immediate;12位立即數(shù)。立即數(shù)范圍-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地址偏移立即數(shù)位空間中的值存儲到rd所指的寄存器空間中。


S型:用于訪存store操作

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

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

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

sb x5,40(x6)

0000001

00101

00110

000

01000

0100011

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

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


B型:有條件分支

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

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

B型立即數(shù)格式(末尾時鐘為零)
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

代碼中整理出的立即數(shù)
0000001100100

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


J型:無條件跳轉(zhuǎn)

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

(20bit)

rd

(5bit)

opcode

(7bit

J型立即數(shù)(20位)

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

下面以jal x1,100為例

jal x1,100

00000110010000000000

00001

1101111

代碼中立即數(shù)
000000000000001100100

? ? ? ? 寫代碼時,末尾補(bǔ)0別忘了

解釋:將pc+4存儲到rd寄存器中,同時pc跳轉(zhuǎn)到pc+立即數(shù)位置去。


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

immediate[31:12]rdopcode

vfd

與J型區(qū)別在于立即數(shù)放的位置

下面以lui x1,0xf0000為例

lui x1,0xf0000

11110000000000000000

00001

0110111

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


常見操作及其指令

1、算術(shù)運(yùn)算指令

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

slt比較指令 指令后邊加i 一般表示是指令中有立即數(shù),而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。

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

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

注意邏輯右移和算術(shù)右移是由區(qū)別的。

邏輯右移:數(shù)據(jù)向右移立即數(shù)位,空位填0。

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

為了區(qū)別這兩個機(jī)器碼的第30位用來作為判斷。具體仔細(xì)觀察上表。

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型)

小總結(jié):算術(shù)運(yùn)算,邏輯運(yùn)算,移位運(yùn)算這些基本運(yùn)算指令一般都為R型或者I型指令

4、加載存儲指令

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

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

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、控制轉(zhuǎn)移指令

主要是一些跳轉(zhuǎn)指令: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型)

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

總結(jié)

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。