๐ง ๋ช ๋ น์ด ํ์ (Instruction Format)
๋ช ๋ น์ด๋ ๋ช ๋ น ์ฝ๋์ ํผ์ฐ์ฐ์๋ก ์ด๋ฃจ์ด์ง๋๋ค.
๋ช ๋ น์ด๋ค์ ์ด์ง์๋ก ์ธ์ฝ๋ฉ๋๊ธฐ ๋๋ฌธ์, ๋ช ๋ น์ด์ ๊ฐ ๋ถ๋ถ์ ์ซ์๋ก ๋ณผ ์ ์์ต๋๋ค.
๋ค์ ์์ ๋ฅผ ํตํด ์ข ๋ ์์ธํ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ฎ๐จ ์์
์๋ ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด์ RISC-V ์ธ์ด ๋ฒ์ ์ ์ญ์ง์์ ์ด์ง์๋ก ํํํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
add x9, x20, x21
์ญ์ง์ ํํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
0 | 21 | 20 | 0 | 9 | 51 |
๋ช ๋ น์ด์ ๊ฐ ๋ถ๋ถ์ ํ๋(Field)๋ผ ๋ถ๋ฆ ๋๋ค.
์์์ ์ฒซ ๋ฒ์งธ, ๋ค ๋ฒ์งธ, ์ฌ์ฏ ๋ฒ์งธ ํ๋(0, 0, 51 ๋ถ๋ถ)๋ RISC-V ์ปดํจํฐ์๊ฒ ์ด ๋ช ๋ น์ด๋ ๋ง์ ์ ์ํํ๋ค๊ณ ์๋ ค์ฃผ๋ ๋ถ๋ถ์ ๋๋ค.
๋ ๋ฒ์งธ ํ๋๋ ๋ง์ ์ ์ฌ์ฉํ ๋ ๋ฒ์งธ ํผ์ฐ์ฐ์ ๋ ์ง์คํฐ์ ๋ฒํธ( 21 = x21 ),
์ธ ๋ฒ์งธ ํ๋๋ ๋ง์ ์ ์ฌ์ฉํ ์ฒซ ๋ฒ์งธ ํผ์ฐ์ฐ์ ๋ ์ง์คํฐ์ ๋ฒํธ( 20 = x20 ),
๋ค์ฏ ๋ฒ์งธ ํ๋๋ ๊ณ์ฐ ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ๋ ๋ ์ง์คํฐ์ ๋ฒํธ( 9 = x9 )๋ฅผ ๋ํ๋ ๋๋ค.
์ด ๋ช ๋ น์ด์ ๊ฐ ํ๋ ๊ฐ์ ์ด์ง์๋ก ํ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
0000000 | 10101 | 10100 | 000 | 01001 | 0110011 |
์ ์์ ์์ ๋ณด์ธ ๋ ์ด์์์ ๋ช ๋ น์ด ํ์(instruction format)์ด๋ผ ํฉ๋๋ค.
๋ชจ๋ RISC-V ๋ช ๋ น์ด์ ๊ธธ์ด๋ ์์ธ ์์ด ์๋ ๊ธธ์ด์ธ 32๋นํธ์ ๋๋ค.
๐ง RISC-V ๋ช ๋ น์ด์ ํ๋
RISC-V ๋ช ๋ น์ด์ ๊ฐ ํ๋์๋ ๋ค์๊ณผ ๊ฐ์ ์ด๋ฆ์ด ๋ถ์ด์์ต๋๋ค.
funct7 | rs2 | rs1 | funct3 | rd | opcode |
7 bits | 5 bits | 5 bits | 3 bits | 5 bits | 7 bits |
๊ฐ ์ด๋ฆ์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
opcode (7 bits) : ๋ช ๋ น์ด๊ฐ ์คํํ ์ฐ์ฐ์ ์ข ๋ฅ. ์ฐ์ฐ์๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
rd (5 bits) : ๋ชฉ์ ์ง(destination) ๋ ์ง์คํฐ. ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ๋ฉ๋๋ค.
funct3 (3 bits) : ์ถ๊ฐ opcode ํ๋์ ๋๋ค.
rs1 (5 bits) : ์ฒซ ๋ฒ์งธ ๊ทผ์์ง(source) ํผ์ฐ์ฐ์ ๋ ์ง์คํฐ.
rs2 (5 bits) : ๋ ๋ฒ์งธ ๊ทผ์์ง(source) ํผ์ฐ์ฐ์ ๋ ์ง์คํฐ.
funct7 (7 bits) : ์ถ๊ฐ opcode ํ๋์ ๋๋ค.
์ ํํ๋ณด๋ค ํ๋ ๊ธธ์ด๊ฐ ๋ ๊ธธ์ด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด lw(load word) ๋ช ๋ น์ด๋ ๋ ์ง์คํฐ ํ๋ 2๊ฐ์, ์์ ํ๋ ํ๋๊ฐ ํ์ํฉ๋๋ค.
๋ง์ฝ ์์ 5๋นํธ ํ๋ ์ค ํ๋๋ฅผ ์์๋ฅผ ์ ์ฅํ๋๋ฐ ์ด๋ค๋ฉด $2^5 = 32$ ๋ณด๋ค ์์ ๊ฐ๋ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ ๋๋ฌด ์์ ์์ด๋ฏ๋ก ์ด๋ณด๋ค ๋ ํฐ ํ๋๋ฅผ ์ํฉ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ค ๋๋ฌธ์ ๋ชจ๋ ๋ช ๋ น์ด์ ๊ธธ์ด๋ฅผ ๊ฐ๊ฒ ํ๊ณ ์ถ์ ์๊ฐ๊ณผ,
๋ช ๋ น์ด ํ์์ ํ ๊ฐ์ง๋ก ํต์ผํ๊ณ ์ถ์ ์๊ฐ ์ฌ์ด์์ ์ถฉ๋์ด ์๊น๋๋ค.
RISC-V ์ค๊ณ์๋ค์ด ํํ ์ ์ถฉ์์ ๋ชจ๋ ๋ช ๋ น์ด์ ๊ธธ์ด๋ฅผ ๊ฐ๊ฒ(32bit ) ํ๋, ๋ช ๋ น์ด ์ข ๋ฅ์ ๋ฐ๋ผ ํ์์ ๋ค๋ฅด๊ฒ ํ๋ ๊ฒ์ด์์ต๋๋ค.
๐ง Instruction Format ์ข ๋ฅ
Instrction Format์ ์ข ๋ฅ๋ก๋ R-format, I-format, S-format ๋ฑ๋ฑ์ด ์์ต๋๋ค.
์ฐ์ ์ 3๊ฐ์ง ์ข ๋ฅ๋ฅผ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
โญ๏ธ R - format
funct7 | rs2 | rs1 | funct3 | rd | opcode |
7 bits | 5 bits | 5 bits | 3 bits | 5 bits | 7 bits |
โญ๏ธ I - format
immediate[11 : 0] | rs1 | funct3 | rd | opcode | |
12 bits | 5 bits | 3 bits | 5 bits | 7 bits |
โญ๏ธ S- format
immediate [11 : 5] |
rs2 | rs1 | funct3 | immediate [4 : 0] |
opcode |
7 bits | 5 bits | 5 bits | 3 bits | 5 bits | 7 bits |
์ด์ ๊ฐ๊ฐ์ ํํ์ ๋ํด ์์ธํ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
โญ๏ธ R - format
funct7 | rs2 | rs1 | funct3 | rd | opcode |
7 bits | 5 bits | 5 bits | 3 bits | 5 bits | 7 bits |
R์ Register๋ฅผ ๋ปํฉ๋๋ค.
add, sub ๋ฑ์ ๋ช ๋ น์ด๊ฐ ํด๋น ํ์์ ์ฌ์ฉํฉ๋๋ค.
opcode (7 bits) : ๋ช ๋ น์ด๊ฐ ์คํํ ์ฐ์ฐ์ ์ข ๋ฅ. ์ฐ์ฐ์๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
rd (5 bits) : ๋ชฉ์ ์ง(destination) ๋ ์ง์คํฐ. ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ๋ฉ๋๋ค.
funct3 (3 bits) : ์ถ๊ฐ opcode ํ๋์ ๋๋ค.
rs1 (5 bits) : ์ฒซ ๋ฒ์งธ ๊ทผ์์ง(source) ํผ์ฐ์ฐ์ ๋ ์ง์คํฐ.
rs2 (5 bits) : ๋ ๋ฒ์งธ ๊ทผ์์ง(source) ํผ์ฐ์ฐ์ ๋ ์ง์คํฐ.
funct7 (7 bits) : ์ถ๊ฐ opcode ํ๋์ ๋๋ค.
์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
add x9 x20 x21
์ ๋ช ๋ น์ด๋ ์๋์ ๊ฐ์ด ์ธ์ฝ๋ฉ๋ฉ๋๋ค.
0 | 21 | 20 | 0 | 9 | 51 |
0000000 | 10101 | 10100 | 000 | 01001 | 0110011 |
$$0000 \;\; 0001\;\; 0101\;\; 1010\;\; 0000\;\; 0100\;\; 1011\;\; 0011_2 = 015A04B3_{16}$$
โญ๏ธ I - format
immediate[11 : 0] | rs1 | funct3 | rd | opcode | |
12 bits | 5 bits | 3 bits | 5 bits | 7 bits |
addi ์ฒ๋ผ ์์ ํผ์ฐ์ฐ์ ํ๋๋ฅผ ๊ฐ๋ ์ฐ์ ๋ช ๋ น์ด, ํน์ ์ ์ฌ ๋ช ๋ น์ด์์ ์ฌ์ฉ๋ฉ๋๋ค.
addi, lw, ld ๋ฑ์ ๋ช ๋ น์ด๊ฐ ํด๋น ํ์์ ์ฌ์ฉํฉ๋๋ค.
rs1 (5 bits) : ์ฒซ ๋ฒ์งธ ๊ทผ์์ง(source) ํผ์ฐ์ฐ์ ๋ ์ง์คํฐ ๋๋ ๋ฒ ์ด์ค (์ฃผ์) ๋ ์ง์คํฐ(base address register).
immediate (12 bits) : ์์ ํผ์ฐ์ฐ์ ๋๋ ๋ฒ ์ด์ค ๋ ์ง์คํฐ์ ๋ํด์ง ๋ณ์(offset).
์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
addi x9, x9, 1
์ ๋ช ๋ น์ด๋ ์๋์ ๊ฐ์ด ์ธ์ฝ๋ฉ๋ฉ๋๋ค.
1 | 9 | 0 | 9 | 19 |
000000000001 | 10100 | 000 | 01001 | 0010011 |
ld x9, 64(x22)
์ ๋ช ๋ น์ด๋ ์๋์ ๊ฐ์ด ์ธ์ฝ๋ฉ๋ฉ๋๋ค.
64 | 22 | 3 | 9 | 3 |
000001000000 | 10110 | 011 | 01001 | 0000011 |
โญ๏ธ S- format
immediate [11 : 5] |
rs2 | rs1 | funct3 | immediate [4: 0] |
opcode |
7 bits | 5 bits | 5 bits | 3 bits | 5 bits | 7 bits |
S๋ store๋ฅผ ๋ปํ๋ฉฐ, ์ ์ฅ์ ์ฌ์ฉ๋๋ ํํ์ ๋๋ค.
sw, sd ๋ฑ์ ๋ช ๋ น์ด๊ฐ ํด๋น ํ์์ ์ฌ์ฉํฉ๋๋ค.
rs1 (5 bits) : base address register
rs2 (5 bits) : ์ ์ฅํ ๊ฐ์ ๊ฐ์ง ๊ทผ์์ง(source) ํผ์ฐ์ฐ์ ๋ ์ง์คํฐ.
immediate (7 + 5 bits) : ๋ฒ ์ด์ค ๋ ์ง์คํฐ์ ๋ํด์ง ๋ณ์(offset)
immediate๋ฅผ ์์ ๊ฐ์ด ๋ถ๋ฆฌํ ์ด์ ๋ ๋ชจ๋ ๋ช ๋ น์ด ํ์์์ rs1๊ณผ rs2 ํ๋์ ์์น๋ฅผ ๊ฐ๊ฒ ์ ์งํ๊ธฐ ์ํจ์ ๋๋ค.
๋ช ๋ น์ด ํ์์ ๊ฐ๋ฅํ ํ ๋น์ทํ๊ฒ ์ ์งํ๋ ๊ฒ์ด ํ๋์จ์ด ๋ณต์ก๋๋ฅผ ๋ฎ์ถ์ด์ค๋๋ค.
์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
sd x9, 64(x22)
์ ๋ช ๋ น์ด๋ ์๋์ ๊ฐ์ด ์ธ์ฝ๋ฉ๋ฉ๋๋ค.
2 | 9 | 22 | 011 | 0 | 35 |
0000010 | 10100 | 10110 | 3 | 00000 | 0100011 |
๋ช ๋ น์ด ํ์์ opcode ํ๋์ ๊ฐ์ ๋ณด๋ฉด ์ ์ ์์ต๋๋ค.
โญ๏ธ ์ ๋ฆฌ
R - format
funct7 | rs2 | rs1 | funct3 | rd | opcode |
7 bits | 5 bits | 5 bits | 3 bits | 5 bits | 7 bits |
I - format
immediate[11 : 0] | rs1 | funct3 | rd | opcode | |
12 bits | 5 bits | 3 bits | 5 bits | 7 bits |
S- format
immediate [11 : 5] |
rs2 | rs1 | funct3 | immediate [4 : 0] |
opcode |
7 bits | 5 bits | 5 bits | 3 bits | 5 bits | 7 bits |
์ 3๊ฐ์ง ํ์์ด ์ด๋ฒ์ ์ดํด๋ณธ RISC-V ๋ช ๋ น์ด ํ์์ ๋๋ค.
R-ํ์ ๋ช ๋ น์ด๋ ๊ทผ์์ง ๋ ์ง์คํฐ ํผ์ฐ์ฐ์ 2๊ฐ์, ๋ชฉ์ ์ง ๋ ์ง์คํฐ ํผ์ฐ์ฐ์ ํ๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
I-ํ์ ๋ช ๋ น์ด๋ ๊ทผ์์ง ๋ ์ง์คํฐ ํผ์ฐ์ฐ์ 1๊ฐ ๋์ , 12๋นํธ์ ์์น(immediate) ํ๋๊ฐ ์์ต๋๋ค.
S-ํ์ ๋ช ๋ น์ด๋ ๊ทผ์์ง ๋ ์ง์คํฐ ํผ์ฐ์ฐ์ 2๊ฐ์, 12๋นํธ(7 + 5 ๋นํธ)์ ์์น(immediate) ํ๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.