CISC VS RISC
- CISC (Complex Instruction Set Computer)
- ํ๋์ instruction์ด ์ฌ๋ฌ๊ฐ์ง ๋ณต์กํ ์์ ์ ํจ ex. move in x86
- instruction์ ๊ธธ์ด๊ฐ ๊ฐ๋ณ์
- ex. x86(Intel, AMD), Motorola 68k
- RISC (Reduced Instruction Set Computer)
- ๊ฐ instruction์ด ํ๋์ ์์(unit) ์์ ๋ง ํจ. ex. add, lw, sw, beq
- instruction์ ๊ธธ์ด๊ฐ ๊ณ ์ ๋จ
- Load/Store Architecture
- ex. RISC-V, ARM, MIPS
์ฌ์ค ์ด ๊ทธ๋ฆผ์ด ์ ์ฌ๊ธฐ ๊ทธ๋ ค์ ธ ์๋์ง ํ๋๋ฐ ์ผ๋จ ์์ผ๋๊น ์ค๋ช ์ ํด๋ณด๋๋ก ํ์ฃ
์๋ฅผ ๋ค์ด COPY๋ผ๋ ๋ช
๋ น์ ์ํํ๋ค๊ณ ์น์. hello๋ผ๋ ๋ฌธ์์ด์ ๋ณต์ฌํ๋ ค๊ณ ํ๋ค.
hello๋ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ 100๋ฒ์ง๋ถํฐ 104๋ฒ์ง์ ์ ์ฅ๋์ด ์๊ณ , ์ฐ๋ฆฐ 200๋ฒ์ง๋ถํฐ 204๋ฒ์ง๊น์ง๋ก ๋ณต์ฌํ๋ ค ํ๋ค.
CPU์ source index๋ 100, destination index๋ 200, ๊ทธ๋ฆฌ๊ณ ์ฎ๊ฒจ์ผ ํ ๊ฐ์๊ฐ 5์ด๋ฏ๋ก count 5๋ก ์์ํ๋ค.
100๋ฒ์ง์ ์๋ h๋ฅผ 200 ๋ฒ์ง์ ์ ์ฅํ๊ณ , count 1 ๊ฐ์, DI์ SI๋ 1 ์ฆ๊ฐ์ํจ๋ค.
count๊ฐ 0์ด ๋ ๋๊น์ง ๋ฐ๋ณตํ๋ฉด ๋!
RISC-V ISA
: RISC-V๋ ISAs์ ๊ด๋ จ๋ ์ ํ๊ตฐ(?) ์
- RV32I : 32-bit architecture, base instruction set for Integer
- RV64I : 64-bit architecture, base instruction set for Integer
- RV32E : Subset of RV32I for small microcontrollers
- RV128I : 128-bit architecture
โช M extension: Integer multiplication and division instructions
โช A extension: Atomic instructions
โช F extension: Single-precision floating-point instructions
โช D extension: Double-precision floating-point instructions
โช Q extension: Quad-precision floating-point instructions
โช C extension: Compressed instructions
Instructions
CPU์ ํ์ํ instructions ์ ๋ญ๊ฐ ์๋์ง ์์๋ณด๋๋ก ํฉ์๋ค!
instruction์๋ ํฌ๊ฒ ์ธ ๊ฐ์ง ๋ถ๋ฅ๊ฐ ์์.
- Data processing instructions (Arithmetic and Logical)
- Memory access instructions (Load/Store)
- Branch instructions
์ด๋ฒ ํฌ์คํ ์์๋ ์๋ง 1๋ฒ๋ง ๋ค๋ฃฐ ๊ฒ ๊ฐ๋น
์ฐธ๊ณ
CPU๊ฐ 1GHz ๋ผ๊ณ ํ๋ฉด 10^9 Hz ์ด๊ณ , 1์ด์ 10^9 ๋ฒ์ ๊ธฐ๋ณธ ์ฐ์ฐ(+, -, *, /) ์ ํ ์ ์๋ค๋ ๊ฒ.
์ด๋ฌํ instruction ๋ค์ด ์กด์ฌํ๋ค.
A memory hierarchy
higher level ์ผ ์๋ก ์๋๋ ๋ ๋น ๋ฅด์ง๋ง ๋น์ฉ์ด ํจ์ฌ ๋น์ธ๊ณ , lower level ์ผ ์๋ก ์ผ ๋์ ์๋๊ฐ ๋๋ฆฌ๋ค
Overview of CPU Operation
add x5, x6, x7 # x5 = x6 + x7
์ด๋ ๊ฒ ์๊ธด instruction์ด ์์ ๋, x6, x7 ์ source operand๊ฐ ๋๋ฉฐ, x5๊ฐ destination์ด ๋๋ค.
(# ์ดํ๋ ์ฃผ์์)
์ฐ์ ๋ช
๋ น์ ํผ์ฐ์ฐ์(operand)๋ ๋ ์ง์คํฐ๋ผ๊ณ ๋ถ๋ฆฌ๋ CPU ๋ด๋ถ์ ํน์ ํ ์์น๋, instructions์ immediate field ์์ ๋ถ๋ฌ์จ๋ค.
(๋ท ๋ถ๋ถ ์์์ผ ์ดํด๊ฐ)
Register์ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ณผ ์ ์์!!
(Cash๋ ๋ณผ ์ ์์)
RISC-V์๋ 32๊ฐ์ 32bit register๋ก ๊ตฌ์ฑ๋ ๋ ์ง์คํฐ ํ์ผ์ด ์๋ค ใ ใ
RV32I Register File
1. ๋ ์ง์คํฐ๋ flip-flops์ผ๋ก ๊ตฌ์ฑ๋๋ค.
(32-bit register๋ 32๊ฐ์ flip-flops์ด ํ์ํจ)
2. CPU ๋ด๋ถ์ architectural register๋ค์ ์งํฉ์ register file์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ๋ ์ง์คํฐ ํ์ผ์ flip-flops์ด๋ SRAM์ผ๋ก ๊ตฌ์ฑ๋๋ค
- RV32I ๋ ์ง์คํฐ ํ์ผ์ 32๊ฐ์ 32-bit registers๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
(๋ ๊ฐ์ read ports์ ํ ๊ฐ์ write port) - ๋ ์ง์คํฐ ํ์ผ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ ์บ์์ ์ ๊ทผํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋น ๋ฆ.
์๋๋ฉด ๋ ์ง์คํฐ ์๊ฐ ๋งค์ฐ ์ ํ๋์ด ์๊ณ , CPU ๋ด๋ถ์ ์๊ธฐ ๋๋ฌธ! - ๊ทธ๋์ ์ปดํ์ผ๋ฌ๋ high-level code๋ฅผ assembly code๋ก ๋ฒ์ญํ ๋ ๋ ์ง์คํฐ ํ์ผ์ ์ฌ์ฉํ๋ ค๊ณ ํจ.
(๋ ์ง์คํฐ ํ์ผ์ flip-flop ์ผ๋ก ๊ตฌํํด๋์ ๊ฒ์ด ํผํผํฐ์ ์์ผ๋ ์ฐธ๊ณ ๋ง ํ์)
RISC-V Instruction Formats
Instruction Categories
- Arithmetic and Logical(Integer)
- Load/Store
- Jump and Branch
4๊ฐ์ instruction formats ๋ชจ๋ 32 bits ์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋๋ค.
RISC-V Instruction Fields
32 bit๋ก ๊ตฌ์ฑ๋๋ instruction์๋ ๋ค์๊ณผ ๊ฐ์ field๋ค์ด ์๋ค.
- opcode, funct7, funct3 ์ ์ด๋ค operation์ ์ํํด์ผ ํ๋์ง ๋ช ์ํ๋ค. ์ด ์ ์ ํฉ์ณ์ ์ด 2^17 = 128*1024 ๊ฐ์ ๊ฐ๊ธฐ ๋ค๋ฅธ operations์ ์ํํ ์ ์๋ค.
- rs1 ์ ์ฒซ๋ฒ์งธ source operand์ register ์ฃผ์๋ผ๊ณ ๋ณด๋ฉด ๋จ
- rs2 ๋ ๋น์ฐํ ๋ ๋ฒ์งธ source operand ์ register ์ฃผ์
- rd๋ destination operand์ register
* ์ฐธ๊ณ : encoding space๋ฅผ ๋ฌด์กฐ๊ฑด ์ ๋ถ ๋ค ์ฌ์ฉํ๋ ๊ฒ์ ์๋.
RV32I Arithmetic Instructions (add, sub, addi)
1. add
- R-Type instruction
add rd, rs1, rs2
ex.add t0, s1, s2 # t0 <= s1 + s2
rd = t0, rs1 = s1, rs2 = s2
- opcode : add ๊ฐ ์ ์ฅ๋ 51๋ฒ์ง
- rs1๊ณผ rs2๋ s1, s2์ด๋ฏ๋ก ์ด๋ค์ด ์ ์ฅ๋ ๊ณณ์ ๋ ์ง์คํฐ์ 9๋ฒ์ง์ 18๋ฒ์ง
- rd ์ญ์ t0๊ฐ ์ ์ฅ๋ ๊ณณ์ 5๋ฒ์ง
- ์ด ์ซ์๋ฅผ binary๋ก ํํํ๋ฉด
funct7 : 0000000 (7bit)
rs2 : 10010 (5bit)
rs1 : 01001 (5bit)
funct3 : 000 (3bit)
rd : 00101 (5bit)
opcode : 0110011 (7bit)
4๊ฐ์ฉ ๋์ด์ 16์ง์๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋!
2. sub
- R-Type instruction
sub rd, rs1, rs2
ex.sub t2, s3, s4 # t2 <= s3 + s4
rd = t2, rs1 = s3, rs2 = s4'
Immediate ๋ ?
- R-format instruction์ ๊ฒฝ์ฐ ๋ ์ง์คํฐ์์ 3๊ฐ์ ํผ์ฐ์ฐ์๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์ค์ง๋ง,
I-format instruction์ ๊ฒฝ์ฐ, ํ ๊ฐ์ ํผ์ฐ์ฐ์๋ฅผ instruction ์๊ธฐ ์์ ์๊ฒ ์ ์ฅํ ์ ์์ - ๊ทธ ๊ฐ์ immediates๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์? ๋ฐ๋ก instructions์์ ๋ฐ๋ก! ์ ๊ทผ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ!
register๋ memory access๋ฅผ ํ์๋ก ํ์ง ์๋๋ค. - 12 bit์ immediate field๋ 2์ ๋ณด์๋ฅผ ํ์ฉํ ๊ฒฝ์ฐ -2^11 ~ +2^11-1 ์ ๋ฒ์๊น์ง ์ ์ฅ ๊ฐ๋ฅํ๋ค.
- ์ปดํจํฐ ์ฐ์ ์ ํ๋์จ์ด ์ค๊ณ์์ 2์ ๋ณด์๋ฅผ ํ์ฉํจ์ผ๋ก์จ, unsigned number์ signed number์ ๋ง์ ๋บ์ ์ ํธ๋ฆฌํ๊ณ ๊ฐ๋จํ๊ฒ ํ ์ ์์!
2์ ๋ณด์
n-bit number N ์ด ์ด์ง์๋ก ์ฃผ์ด์ก์ ๋, N์ 2์ ๋ณด์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋๋ค.
2^n - N for N != 0
0 for N = 0
ex. 4 bit ์ผ ๋, 3์ 4'b0011์ด๊ณ ์ด์ 2์ ๋ณด์๋ 3: 2^4-3 = 4'b1101
์ข ๋ ์ฝ๊ฒ ์ค๋ช ํ์๋ฉด
2์ง์์์ 0,1์ ๋ค์ง์ด์ฃผ๊ณ 1์ ๋ํด์ฃผ๋ฉด ๋๋ค.
'''''
4
= 0000 0100
-> 1111 1011
+1
= 1111 1100 = -4
N bit ๋ก ๋ํ๋ผ ์ ์๋ ๋ฒ์๋
- Unsigned : [ 0, 2^N-1 ]
- Sign/Magnitude : [ -(2^(N-1) -1), 2^(N-1) -1]
- 2์ ๋ณด์ : [ -2^(N-1) , 2^(N-1) -1]
๋ง์ฝ 12 bit๋ผ๋ฉด
- Unsigned : 0~4095
- Sign/Magnitude : -2047 ~ +2047
- 2์ ๋ณด์ : -2048 ~ +2047
์ ๋ฒ์๋ฅผ ๋ํ๋ผ ์ ์๋ค!
๊ทธ๋ฆฌ๊ณ ์ด๋ค ์ซ์๊ฐ +์ธ์ง -์ธ์ง๋ int๋ก ์ ์ธํ๋์ง unsigned๋ก ์ ์ธํ๋์ง ๋ด์ ํ๋ก๊ทธ๋๋จธ์ ํด์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
3. addi
- I-Type instruction
addi rd, rs1, imm12
ex.addi t0, s3, -12 # t0 <= s3 + (-12)
rd = t0, rs1 = s3, imm12 = -12
- imm12 ์ ํ ๋น๋ bit๋ ์ด 12 bit
- ๋ฐ๋ผ์ ๋ค๋ฅธ ํผ์ฐ์ฐ์(32 bit)์ ๋ง์ถ๋ ค๋ฉด 20bit๋ฅผ ๋ฌด์ธ๊ฐ๋ก ์ฑ์์ผ ํจ. ์ด ๋ ๋์ค๋ ๊ฐ๋ ์ด extension
- zero-ext : ์๋ฃํ์ ํ์ฅ ์ ๋น์๋ ๋ถ๋ถ์ 0์ผ๋ก ์ฑ์ด๋ค
- sign-ext : ์๋ฃํ์ ํ์ฅ ์ ๋น์๋ ๋ถ๋ถ์ MSB(๊ฐ์ฅ ์ผ์ชฝ์ ๋นํธ)๋ก ์ฑ์ด๋ค.
add, sub ์ฒ๋ผ arith inst ์๋ SE ๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๊ณ ,
andi ์ ๊ฐ์ logical inst ์๋ ZE๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
RV32I Logical Instructions (and, or, xor, andi, ori, xori)
-> logical instructions์ 2๊ฐ์ source operands์ ๋ํด bit-by-bit ์ฐ์ฐ ์ํ ํ destination register์ ๊ฐ์ ์ฐ๋ ๊ฒ.
1. AND Instruction
-> bits masking ์ ์ ์ฉํจ(์ผ๋ถ ๋นํธ๋ง ์ด๋ฆฌ๊ณ , ๋๋จธ์ง ์น 0์ผ๋ก ์ด๊ธฐํ)
2. OR Instruction
-> bits combine์ ์ ์ฉํจ (๋ช ๋นํธ๋ฅผ 1๋ก ์ค์ ํ๊ณ , ๋๋จธ์ง๋ ๊ทธ๋๋ก ๋๋ค)
3. XOR Instruction
-> bits๋ฅผ invert(reverse)ํ๊ฑฐ๋ 0์ผ๋ก ์ด๊ธฐํ ํ ๋ ์ ์ฉํจ
์ฒซ ๋ฒ์งธ ๊ฒฝ์ฐ ๋นํธ๋ฅผ 1111...๊ณผ xorํ๋ฉด ๋นํธ๊ฐ ๋ค์งํ๊ณ
์๋์ ๊ฒฝ์ฐ ๊ฐ์ ๋นํธ๋ฅผ xorํ๋ฉด 0์ผ๋ก ์ด๊ธฐํ๋๋ค.
์ ์ธ ๊ฐ์ง ๋ชจ๋ R-Type Instruction
4. andi, ori, xori
- I-Type instruction
- immediates in these are sign-extended
- (๋ญ์ฌ ์์์ ze ์ฃผ๋ก ์ด๋ค๋งค ๋ญ์ฌ)
Revisiting Basic Shifting
one left shift = 2๋ฐฐ
one right shift = 1/2 ๋ฐฐ
1. Revisiting Logical Shift
- Logical shift left
- MSB : shifted out
- LSB : shifted in with a 0
- ex) 1100 1011 << 1 = 100 1011 0
1100 1011 << 3 = 0 1011 000
- Logical shift right
- MSB : shifted in with a 0
- LSB : shifted out
- ex) 1100 1011 >> 1 = 0 110 0101
1100 1011 >> 3 = 000 1 1001
Logical shifts๋ unsigned integer๋ฅผ 2์ ์ ๊ณฑ์๋ก ๋๋๊ฑฐ๋, 2์ ์ ๊ณฑ์๋ฅผ ๊ณฑํ ๋ ํธ๋ฆฌํ๋ค.
(( logical shift right๋ ๋๋ ์ integer ๊ฐ ์๋๋ฉด ๋ฒ๋ฆผํ๋ค))
2. Revisiting Arithmetic Shift
- Arithmetic shift left
- MSB : shifted out, ๊ทธ๋ฌ๋ overflow/underflow๋ฅผ ์กฐ์ฌํ ๊ฒ
- LSB : shifted in with a 0
- ex) 1100 <<< 1 = 100 0
1100 <<< 3 = 0 000 (incorrect!) => underflow
- Arithmetic shift right
- MSB : Retain its sign bit (๋ฐ๋ฆฐ ๋ถ๋ถ์ ๊ฐ์ฅ ์ผ์ชฝ ๋นํธ ์ด์ด์ ํ์ฅํด์ฃผ๊ธฐ)
- LSB : Shifted out
- ex) 1100 >>> 1 = 1 110 (retain sign bit)
1100 >>> 3 = 111 1
((๋ง์ฐฌ๊ฐ์ง๋ก ๋๋ ์ integer๊ฐ ์๋๋ฉด ๋ฒ๋ฆฐ๋ค))
RV32I Shift Instructions (sll, srl, sra, slli, srli, srai)
-> Shift-left operation์ 2์ ์ ๊ณฑ์๋ก ๊ณฑํ๊ธฐ
-> Shift-right operation์ 2์ ์ ๊ณฑ์๋ก ๋๋๊ธฐ
1. sll, srl, sra
- R type instructions
- sll rd, rs1, rs2[4:0] : shift left logical
- srl rd, rs1, rs2[4:0] : shift right logical
- sla rd, rs1, rs2[4:0] : shift right arithmetic (sign-extension)
๋ค์๊ณผ ๊ฐ์ด ์ด๋ค
2. slli, srli, srai
- Specialization of I type
- shift rs1 by up to 31 bits (5-bit shamt field)
- slli rd, rs1, shamt : shift left logical
- srli rd, rs1, shamt : shift right logical
- srai rd, rs1, shamt : shift right arithmetic (sign-extension)
'๐ก๐ธ๐ธ๐ถ5: ๐ฆ๐๐๐๐ถ ๐ฐ๐๐พ๐ > Computer Architecture(COSE222)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ปดํจํฐ๊ตฌ์กฐ] CH4. RISC-V & RISC-V Instruction #3 (0) | 2021.10.16 |
---|---|
[์ปดํจํฐ๊ตฌ์กฐ] CH4. RISC-V & RISC-V Instruction #2 (0) | 2021.10.13 |
[์ปดํจํฐ๊ตฌ์กฐ] CH3. Performance (0) | 2021.10.09 |
[์ปดํจํฐ๊ตฌ์กฐ] CH2. Instructions and High-level to Machine Code (0) | 2021.10.08 |
[์ปดํจํฐ๊ตฌ์กฐ] CH1. Computer and Technology (0) | 2021.10.08 |