RISC-V๋ ๋ช ๋ น์ด์ ๊ธธ์ด๋ฅผ 32๋นํธ๋ก ๊ณ ์ ํ์ฌ ํ๋์จ์ด๋ฅผ ๊ฐ๋จํ๊ฒ ๋ง๋ค์์ผ๋, ๋ช ๋ น์ด ๋ด์ 32๋นํธ ์ด์์ ์์๋ ์ฃผ์๋ฅผ ํ์ํ ์ ์์ด ๋ถํธํ ์ ๋ ์์ต๋๋ค.
์ด๋ฒ์๋ ์ด๋ฌํ ๊ธด ์์ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ผ๋ฐ์ ์ธ ํด๋ฒ๊ณผ,
๋ถ๊ธฐ ๋ช ๋ น์ด์์ ์ฌ์ฉ๋๋ ๋ช ๋ น์ด ์ฃผ์์ ์ต์ ํ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
๐ง ํฐ ์์น ํผ์ฐ์ฐ์
ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ๋ ์์๋ ๋์ฒด๋ก ํฌ๊ธฐ๊ฐ ์์ผ๋ฏ๋ก, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ 12๋นํธ ๋ด๋ก ํํ์ด ๊ฐ๋ฅํฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๋ ์์ผ๋ฏ๋ก ๋ ํฐ ์์๋ฅผ ๋ค๋ฃฐ ์ ์์ด์ผ ํฉ๋๋ค.
์ด๋ฅผ ์ํด RISC-V๋ ๋ ์ง์คํฐ์ ๋นํธ 12๋ฒ์งธ์๋ฆฌ๋ถํฐ 31๋ฒ์งธ ์๋ฆฌ๊น์ง์ 20๋นํธ ์์๊ฐ์ ๋ฃ๋ lui(load upper immediate) ๋ช ๋ น์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋จ์ ํ์ 12๋นํธ ๊ณต๊ฐ์ 0์ผ๋ก ์ฑ์์ง๋๋ค.
(64๋นํธ ๋ ์ง์คํฐ ๊ธฐ์ค ๋จ์ ์์ 32๋นํธ ๊ณต๊ฐ์ ๋ถํธํ์ฅ์ ์งํํฉ๋๋ค.
์ฆ MSB๊ฐ 1์ธ ๊ฒฝ์ฐ 1๋ก ์ฑ์์ง๋ฉฐ, 0์ธ ๊ฒฝ์ฐ 0์ผ๋ก ์ฑ์์ง๋๋ค.)
ํด๋น ๋ช ๋ น์ด๋ฅผ ํตํด ๋ช ๋ น์ด 2๊ฐ๋ก 32๋นํธ ์์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
๋ค๋ฅธ ๋ช ๋ น์ด ํ์์ 20๋นํธ ์์๋ฅผ ํํํ ์ ์์ผ๋ฏ๋ก, lui ๋ช ๋ น์ด๋ U-format์ด๋ผ๋ ๋ช ๋ น์ด ํ์์ ์ฌ์ฉํฉ๋๋ค.
0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 |
๋ถํธ ํ์ฅ์ด ์ผ์ด๋๋ ๊ณต๊ฐ [32~63] | lui ๋ช ๋ น์ด๊ฐ ์์๋ฅผ ํ ๋นํ๋ ๊ณต๊ฐ [12~31] | 0์ผ๋ก ์ฑ์์ง๋ ๊ณต๊ฐ[11~0] |
โญ๏ธ 32๋นํธ ์์๋ฅผ ๋ง๋๋ ๋ฒ
lui ๋ช ๋ น์ด๋ฅผ ํตํด ์ด๋ ํ ๋ ์ง์คํฐ์ 12~31๋นํธ ์๋ฆฌ๋ฅผ ์ฑ์๋๋ค.
์ดํ ํด๋น ๋ ์ง์คํฐ์ addi ์ฐ์ฐ์ ํตํด 12๋นํธ ์์๋ฅผ ๋ํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ ์ง์คํฐ x19์ ์๋ 32๋นํธ ์์๋ฅผ ์ฑ์ฐ๋ RISC-V ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
$00000000 00111101 0000$$0101 00000000$
๋จผ์ lui ๋ช ๋ น์ด๋ฅผ ํตํด x19 ๋ ์ง์คํฐ์ ๋นํธ 12๋ฒ์งธ๋ถํฐ 31๋ฒ์งธ ์๋ฆฌ๊น์ง๋ฅผ ์ฑ์๋๋ค.
์ด๋ 12~31์ ๊ฐ์ ์ญ์ง์ 976์ ํด๋นํฉ๋๋ค.
lui x19, 976 // 976 = 0000 0000 0011 1101 0000
์ด ๋ช ๋ น์ด๊ฐ ์คํ๋ ์ดํ x19์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$00000000 00111101 0000$$0000 00000000$
์ด์ ๋๋จธ์ง ํ์ 12๋นํธ๋ฅผ ์ฑ์๋๋ค.
์ด๋ ํด๋นํ๋ ๊ฐ์ ์ญ์ง์๋ก 1280์ ๋๋ค.
addi x19, x19, 1280 // 1280 = 0000 0101 0000 0000
์ด ๋ช ๋ น์ด๊ฐ ์คํ๋ ์ดํ x19์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ์ํ๋ ์์๋ฅผ ์ป์ด๋ธ ๊ฒ์ ์ ์ ์์ต๋๋ค.
$00000000 00111101 0000$$0101 00000000$
โญ๏ธ 32๋นํธ ์์๋ฅผ ๋ง๋๋ ๋ฒ - addi ๊ฐ ์์๋ฅผ ๋ํ๋ ๊ฒฝ์ฐ
์ ์์ ์์๋ addi๋ฅผ ํตํด ๋ํด์ง๋ ์์(1280)์ ๋นํธ 11์ด 0์ด๊ธฐ ๋๋ฌธ์ ๋ณ ๋ฌธ์ ๊ฐ ์์ด ๋ํด์ง ์ ์์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ํด์ง๋ ์์์ MSB๊ฐ 1์ธ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
12๋นํธ immediate ๊ฐ์ ๋ถํธํ์ฅ๋๊ธฐ ๋๋ฌธ์ด ํด๋น ์์๋ ์์๋ก ์ทจ๊ธ๋ฉ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ lui๋ฅผ ํตํด ์ ์ฌํ๋ ์์์ 1๋ง ๋ ๋ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
12๋นํธ immediate์ ์์๋นํธ๊ฐ ๋ชจ๋ 1111...๋ก ์ฑ์์ง๋ฏ๋ก, ์ด๋ lui ์ ์ฅ์์๋ -1์ด ๋ํด์ง ๊ฒ์ด๋ผ ๋ณผ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ 1์ ๋ํด์ค๋ค๋ฉด ์ค๋ฅ๋ฅผ ๋ฐ๋ก์ก์ ์ ์์ต๋๋ค.
๐ง U-format
Immediate[31:12] | rd | opcode |
20 bits | 5 bits | 7 bits |
๐ง ๋ถ๊ธฐ ๋ช ๋ น์์์ ์ฃผ์์ง์
๋ถ๊ธฐ ๋ช ๋ น์ด๋ 12๋นํธ ์์๊ฐ ์๋ ๋ช ๋ น์ด ํ์์ ์ฌ์ฉํฉ๋๋ค.
์ด ํ์์ -4096๊ณผ 4096 ์ฌ์ด ๋ถ๊ธฐ ์ฃผ์๋ฅผ ํ์ํ ์ ์๋๋ฐ, 2์ ๋ฐฐ์์ด์ด์ผ ํฉ๋๋ค.
์ด์ ๋ ๋ค์์ ๋ค์ ์ดํด๋ณด๊ฒ ์ง๋ง, ์๋ฌดํผ ์ง์ ์ฃผ์๋ก ๋ถ๊ธฐํ๋ ๊ฒ๋ง ๊ฐ๋ฅํฉ๋๋ค.
SB-format์ 7๋นํธ์ opcode์,
3๋นํธ์ ๊ธฐ๋ฅ ์ฝ๋,
5๋นํธ์ ๋ ์ง์คํฐ ํผ์ฐ์ฐ์ 2๊ฐ(rs1, rs2),
12๋นํธ ์ฃผ์ ์์น๊ฐ์ผ๋ก ๊ตฌ์ฑ๋์์์ ํ์ธํ์ต๋๋ค.
์ฃผ์๋ ํน์ดํ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋๋ฐ, ์ด๋ ๋ฐ์ดํฐํจ์ค ์ค๊ณ๋ฅผ ๊ฐ๋จํ ๋ง๋ค์ด์ฃผ์ง๋ง, ์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค.
๋ฌด์กฐ๊ฑด ๋ถ๊ธฐ ๋ช ๋ น์ด์ธ jal(jump and link) ๋ช ๋ น์ด๋ 20๋นํธ ์์๊ฐ ์๋ ๋ช ๋ น์ด ํ์์ ์ฌ์ฉํฉ๋๋ค.
์ด๋ ์์์ ์ดํด๋ณธ U-format๊ณผ ๊ต์ฅํ ํก์ฌํ์ง๋ง, immediate์ ์๋ฏธ๊ฐ ์ฃผ์๋ฅผ ์๋ฏธํ๋ ๊ฒ์ด๋ฏ๋ก, U-format๊ณผ๋ ๋น์ทํ์ง๋ง ๋ค๋ฅธ ์ด๋ฆ์ธ UJ-format ์ด๋ผ ๋ถ๋ฆ ๋๋ค.
UJ-format ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Imm[20] | Imm[10 : 1] | Imm[11] | Imm[19:12] | rd | opcode |
1 bits | 10 bits | 1 bits | 8 bits | 5 bits | 7 bits |
์ ํ์์ ํตํด $-2^{20} $~ $2^{20}-2$ ๋ฒ์์ ์ฃผ์๋ฅผ ํํํ ์ ์์ต๋๋ค.
(์์์ ์ธ๊ธํ์๋ ๊ฒ ์ฒ๋ผ ์ฃผ์๋ ๋ฌด์กฐ๊ฑด 2์ ๋ฐฐ์์ธ ์ง์ ์ฃผ์๋ง์ ๊ฐ์ง ์ ์์ต๋๋ค.)
โญ๏ธ PC - ์๋์ฃผ์์ง์ ๋ฐฉ์ (Program Counter - relative addressing)
๋ง์ผ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฃผ์๊ฐ UJ-Format์ immediate ํ๋์ธ 20๋นํธ์ ๋ค์ด๊ฐ์ผ ํ๋ค๋ฉด ์ด๋ค ํ๋ก๊ทธ๋จ๋ $2^{20}$ ๋ณด๋ค ๋ ์ปค์ง ์ ์์ต๋๋ค.
์ด๋ ํ์ค์ ์ผ๋ก ๋๋ฌด ์์ ์์ด๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ์ง์คํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด๋ค ๋ ์ง์คํฐ๋ฅผ ์ง์ ํ์ฌ ๊ทธ ๊ฐ์ด ๋ถ๊ธฐ ๋ณ์(offset)(์ฆ immediate ๊ฐ)์ ๋ํด์ง๋๋ก ํ๋ ๊ฒ์ธ๋ฐ,
์ด๋ ๊ฒ ๊ตฌํํ๋ค๋ฉด ๋ถ๊ธฐ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ์ ๊ณ์ฐ์ ํตํด ๋ถ๊ธฐํ ์ฃผ์๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
๋ ์ง์คํฐ๊ฐ ๊ฐ์ง ๊ฐ(์ฃผ์๊ฐ) + ๋ณ์(offset)(์์ ๊ฐ)
์ด๋ ์ฌ์ฉ๋๋ ๋ ์ง์คํฐ๋ก๋ PC(Program Counter) ๋ ์ง์คํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
PC ๋ ์ง์คํฐ๋ 32๋นํธ์ ๊ฐ์ ์ ์ฅํ ์ ์์ผ๋ฏ๋ก, ์ด๋ฅผ ํตํด ํ๋ก๊ทธ๋จ์ ํฌ๊ธฐ๊ฐ $2^{32}$ ๊น์ง ์ปค์ง๋ ๊ฒ์ ํ์ฉํ๋ฉฐ, ์กฐ๊ฑด๋ถ ๋ถ๊ธฐ ์ฃผ์์ ํฌ๊ธฐ ์ ํ์ ๊ทน๋ณตํฉ๋๋ค.
PC ๋ ์ง์คํฐ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋๋ถ๋ถ์ ํ๋ก๊ทธ๋จ์์ ์กฐ๊ฑด๋ถ ๋ถ๊ธฐ๋ ์ฃผ๋ก ์ํ๋ฌธ์ด๋ if๋ฌธ์์ ์ฌ์ฉ๋๋ฉฐ, ์๋์ ์ผ๋ก ๊ฐ๊น์ด ์๋ ๋ช ๋ น์ด๋ก ๋ถ๊ธฐํ๋ ๊ฒฝํฅ์ด ํฝ๋๋ค.
PC๋ ํ ๋ช ๋ น์ด์ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ๋ถ๊ธฐ ์ฃผ์๋ฅผ ๋ํ ๋ ์ง์คํฐ๋ก PC๋ฅผ ์ ํํ๋ฉด
๋ถ๊ธฐ(branch) ์์๋ ํ ์ฃผ์์์ $\pm 2^{10}$ ์๋( 4๋ฐ์ดํธ ) ์ด๋ด๋ก,
์ ํ(jump) ์์๋ ํ ์ฃผ์์์ ์ $\pm 2^{18}$ ์๋ ์ด๋ด๋ก ์ด๋ํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ PC ๋ ์ง์คํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณ์๋ฅผ ๋ํด ๋ถ๊ธฐํ๋ ์ฃผ์๋ฅผ ์ง์ ํ๋ ๋ฐฉ์์ PC-์๋์ฃผ์์ง์ ๋ฐฉ์์ด๋ผ ๋ถ๋ฆ ๋๋ค.
ํ๋ก์์ ํธ์ถ ์์๋ $2^{18}$ ์๋๋ณด๋ค ๋ ๋จ์ด์ง ๊ณณ์ผ๋ก์ ์ ํ๋ฅผ ์คํํด์ผ ํ ์๋ ์์ต๋๋ค.
์ด๋ฐ ๊ฒฝ์ฐ๋ผ๋ฉด ์ด์ ์์ ์์ 32๋นํธ ์์๋ฅผ ๋ํ๋ ๊ฒ๊ณผ ๊ฐ์ด, ๋ช ๋ น์ด ๋๊ฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์์ 32๋นํธ ์ฃผ์๋ก ์ ํ๋ฅผ ํ ์๋ ์์ต๋๋ค.
๋ค์์ ๊ทธ ์์์ ๋๋ค.
lui x19, 0x003D0
jalr x0, 0x500(x19)
์ด๋ 0x003D0500 ์ผ๋ก ๋ถ๊ธฐ๋ฅผ ์ํํฉ๋๋ค.
๐ง ๋ถ๊ธฐ ์ฃผ์๊ฐ 2์ ๋ฐฐ์(์ง์)์ฌ์ผ ํ๋ ์ด์
RISC-V ๋ช ๋ น์ด์ ๊ธธ์ด๋ ํญ์ 4๋ฐ์ดํธ์ด๋ฏ๋ก, RISC-V ๋ถ๊ธฐ ๋ช ๋ น์ด๊ฐ ๋ถ๊ธฐ ๋ช ๋ น์ด์ ๋ชฉ์ ์ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐ์ดํธ ์๊ฐ ์๋ ์๋ ์๋ก ํ์ํ PC- ์๋์ฃผ์๋ฅผ ์ฌ์ฉํ๋๋ก ์ค๊ณํ์๋ค๋ฉด, ๋ ๋จผ ๊ฑฐ๋ฆฌ๊น์ง ๋ถ๊ธฐํ ์ ์์์ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ RISC-V ์ค๊ณ์๋ค์ 2๋ฐ์ดํธ ๊ธธ์ด์ ๋ช ๋ น์ด๋ ์ง์ํ ์ ์๋๋ก ํ๊ธธ ์ํ๊ธฐ ๋๋ฌธ์,
๋ถ๊ธฐ ๋ช ๋ น์ด๊ฐ ๋ถ๊ธฐ์ ๋ชฉ์ ์ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ํํ์๋(2๋ฐ์ดํธ) ๊ฐ์๋ก ๋ํ๋ด๋๋ก ํ์์ต๋๋ค.
๋ฐ๋ผ์ jal ๋ช ๋ น์ด์ 20๋นํธ immediate ํ๋๋ $\pm 2^{19}$ ํํ์๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ธ์ฝ๋ฉํ ์ ์์ต๋๋ค.
ํํ์๋ ๋จ์์ด๋ฏ๋ก LSB๋ ํญ์ 0์ด๋ฉฐ, 20๋นํธ๋ก ๋ํ๋ด๋ ์ฃผ์๋ ๋ค์๊ณผ ๊ฐ์์ง๋๋ค
[๋ถํธ๋นํธ] | 000 0000 0000 0000 0000 | (0) (์๋ต) |
๋ถํธ๋นํธ๋ฅผ ์ ์ธํ๋ฉด $2^{18}$ ํ์ | ํํ์๋ ๋ช ๋ น์ด๋ ์ง์ํด์ผ ํ๋ฏ๋ก ์ฃผ์๋ 2์ ๋ฐฐ์ |
๋ง์ฐฌ๊ฐ์ง๋ก ์กฐ๊ฑด๋ถ ๋ถ๊ธฐ ๋ช ๋ น์ด์ 12๋นํธ ํ๋๋ ํํ์๋ ์ฃผ์์ ๋๋ค.