CPU and Memory
1. ์ CPU๊ฐ memory์ ์ ๊ทผํด์ผ ํ๋๊ฐ!
- ์ฒ์์ ๋ชจ๋ ์ฝ๋์ ๋ฐ์ดํฐ๋ค์ด ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด ์๋ค
- CPU๋ ์ด ํ๋ก๊ทธ๋จ์ ์คํ์ํค๊ธฐ ์ํด์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ access(read/write) ํด์ผ ํ๋ค.
- ์ ๋ฆฌํ์๋ฉด access ํ๋ ๋ชฉ์ ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ ์ด์ ๊ฐ ์๋ค.
- Instruciton read : CPU๊ฐ memory๋ก ๋ถํฐ instructions์ ์ฝ๋๋ค
- Data read/write : CPU๊ฐ memory๋ก ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋, memory์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค.
2. Instruction Access(Read)
CPU๋ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์์ instruction ์ ์ด๋ป๊ฒ ์ฝ์ด๋ค์ด๋๊ฐ
- ๋ชจ๋ CPU๋ ํ์ฌ ์คํ์ค์ธ instruction์ ์์น, ์ฃผ์๋ฅผ ๊ณ์ ์ถ์ ํ๋ ํน๋ณํ register๊ฐ ์๋ต๋๋ค!
- ๊ทธ์ ์ด๋ฆ์ ๋ฐ๋ก๋ฐ๋ก Program Counter(PC)
(x86 ์์๋ง ์์ธ์ ์ผ๋ก IP(instruction pointer) ๋ผ๋ ๋จ์ด๋ฅผ ์ - RISC-V ์ญ์ CPU ์์ PC๋ผ๊ณ ๋ถ๋ฆฌ๋ 32-bit์ ํน๋ณํ ๋ ์ง์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ๊ทธ์ ์ด๋ฆ์ ๋ฐ๋ก๋ฐ๋ก Program Counter(PC)
- PC๋ resetํ ๋๋ง๋ค ๋ฏธ๋ฆฌ ์ง์ ๋ ์ฃผ์๋ก ์ด๊ธฐํ๋๋ค.
- x86์ ์ฒซ๋ฒ์งธ instruction์ ์์น๊ฐ 0xFFFF_FFF0์
- ARM์ 0x0000_0000
- RISC-V๋ ๊ตฌํํ๋ ์ฌ๋์ด ์ ์ํจ ; ์ฐ๋ฆฐ PC๋ฅผ 0x0000_0000์ผ๋ก ์ธํ ํ ๊ฒ!
- PC๋ instruction์ด ํ๋์ฉ ์คํ๋ ๋๋ง๋ค update ๋๋ค.
- PC๊ฐ 0x0000 ๋ถํฐ 4์ฉ ์ฆ๊ฐํด๊ฐ๋ฉฐ memory์ instruction์ ์ฐจ๋ก๋๋ก ์ฝ์ด๋๊ฐ๋ค.
3. Data Read/Write
- Main Memory ์์ ์ฝ๋์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด์๋ค.
EX) int a, b, c; int dummy[100]; - CPU๋ ์ ํ๋ ๊ฐ์์ ๋ ์ง์คํฐ๋ง์ ๊ฐ์ง๊ณ ์๋ค.
- RV32I์ ๊ฒฝ์ฐ 32๊ฐ์ ๋ ์ง์คํฐ๊ฐ ์๋ค
- ๋ฐ๋ผ์ CPU๋ ์ด๋ ์ ๋ ์ ํด์ง ์๋ง ๋ ์ง์คํฐ์ ์ฆ์ ์ ์ฅํ ์ ์๋ค.
- ๋ฐ๋ผ์ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ ์ง์คํฐ์์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฏ๋ก,
CPU๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ ์ง์คํฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ instruction์ ์ ๊ณตํด์ผ ํ๋ค.
4. Word
- ์ด๋ค ํน์ ํ ์ปดํจํฐ ๋์์ธ์ ์ํด ์ฌ์ฉ๋๋ ํ๋์ ๋ฐ์ดํฐ์ ๋จ์
- word๋ ํ ๋ฒ์ ํจ๊ป ์ฒ๋ฆฌ๋๋, ์ด๋ค ๊ณ ์ ๋ ํฌ๊ธฐ์ bit๋ค์ ๊ทธ๋ฃน์ด๋ค.
- ์ด word์ ํฌ๊ธฐ, ์ฆ bits์ ๊ฐ์๋ ์ปดํจํฐ ๊ตฌ์กฐ๋ง๋ค ๋ค๋ฅด๋ค.
- word์ ํฌ๊ธฐ๋ ์ปดํจํฐ์ ๊ตฌ์กฐ์ ์๋์ ์์ด์ ๋ง์ ๋ถ๋ถ์ ๋ฐ์๋๋ค.
- ๋ณดํต ์ปดํจํฐ์ ์๋ ๋ ์ง์คํฐ์ ํฌ๊ธฐ๋ word์ ํฌ๊ธฐ์
- ํ์ฌ ์ปดํจํฐ์ word ํฌ๊ธฐ๋ ์ผ๋ฐ์ ์ผ๋ก 32bit ๋๋ 64bit!!
- RV32I์ ๊ฒฝ์ฐ word ํฌ๊ธฐ๊ฐ 32bits! (4bytes)
- x86 ์ ๊ฒฝ์ฐ 64-bit CPU ๊ธฐ๋ฐ ์ปดํจํฐ์์๋ ๋ถ๊ตฌํ๊ณ , word ํฌ๊ธฐ๋ ํธํ์ฑ ๋ฌธ์ ๋๋ฌธ์ ์ฌ์ ํ 16-bit๋ฅผ ์ฌ์ฉํ๋ค.
- Alignment Restriction : ๋จ์ด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ํญ์ natural word boundaries ์์ ์์ด์ผ ํจ (RV32I์ ๊ฒฝ์ฐ 4์ ๋ฐฐ์)
- ์๋ฅผ ๋ค์ด ๋จ์ด์ ์ ๊ทผํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ด๋ค๋ฉด 0x0000_0000, 0x0000_1004 ๊ฐ์ด 4์ ๋ฐฐ์์ฌ์ผ ์ ์์ ์ธ ์ ๊ทผ ๊ฐ๋ฅ
Memory Address
- ๊ธฐ๋ณธ์ ์ผ๋ก CPU๋ byte ๋จ์๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค (bit ๋จ์ ์ ๊ทผ์ ์๋จ) = load byte = lb instruction
- ๊ทธ๋ฆฌ๊ณ ํ ๋จ์ด๊ฐ 4byte์ -> ๋จ์ด์ ์ฃผ์๋ฅผ 2์ง์๋ก ๋ณํํ ๋ค ์ค๋ฅธ์ชฝ์ผ๋ก 2๋ฒ shift ํด์ฃผ๋ฉด ๋ช ๋ฒ์งธ ๋จ์ด์ธ์ง ์ ์ ์์!
(์๋, ์ ๋นํธ shift = ๋๋๊ธฐ 4์) - bit ๋จ์๋ก ์ ๊ทผํ๊ณ ์ถ๋ค๋ฉด byte ๋ฅผ ์ฝ์ด์ and operation ํ๊ธฐ
Memory Access Instruction
1. lw (= load words)
: memory๋ก๋ถํฐ 32bit word๋ฅผ ์ฝ์ด์ register๋ก loads
- I type instruction
lw rd, address
lw t0, 24(s3)
#t0 <= [s3 + 24]
#s3๋ memory์ ์ฃผ์๊ฐ
๋ง์ฝ s3 = 0x0000_0094 ์๋ค๋ฉด
s3 + 24 = 0x0000_00ac
( ์ด ๋์ ๊ณ์ฐ์ ALU์์ ์์์ ํด์ค )
๊ทธ๋ผ ์ด์ CPU์์ address bus๋ก 0x0000_00ac๋ฅผ memory์ ๋ณด๋ด๊ณ ,
0x0000_00ac ์ฃผ์๊ฐ์ ์๋ ๋จ์ด๋ฅผ ์ฝ์ด์ Data bus์ ๋ด์ CPU์ ๋ค์ ๋๋ ค๋ณด๋ธ๋ค
๊ทธ๋ผ ์ด ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋จ์ด๋ฅผ CPU๊ฐ ๋ฐ์์ t0 ๋ ์ง์คํฐ์ ์ ์ฅํ๋ ๊ฒ!
- ์ฌ๊ธฐ์ s3๊ฐ base, 24๊ฐ offset ์ธ๋ฐ, ์ด offset์ -2048 ๋ถํฐ +2047 ๊น์ง ๊ฐ๋ฅํ๋ค. (12-bit 2's complement)
2. sw (= store words)
: register์ ์๋ ๋จ์ด๋ฅผ main memory์ store (write)
- S type instruction
sw rs2, address
sw t2, 8(s3)
# [s3 + 8] <= t2
#lw๋ ๋ฐ๋
Byte, Half-word Load/Store
ํ ๋ฒ์ word๋จ์๊ฐ ์๋ byte๋ half-word ๋จ์๋ก load๋ store์ ํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ instruction์ด ์๋ค.
lb : load byte
lh : load half-words (16bit)
lbu : load byte unsigned number
lhu : load half-words unsigned number
sb : store byte
sh : store half-words
3. lb
: memory์ ์๋ ํ byte(=8bit)๋ฅผ register๋ก load
- I type instruction
lb rd, address
lb t0, 1(s3)
# t0 <= [s3 + 1]
์ ๊น!!!!
register์ 32 bit์์ ๊ทธ๋ผ 4 bit๋ง ๊ฐ์ ธ์ค๋ฉด ์์ ์ด๋กํด??!!?!
๊ทธ๋ด ๋ ์ฐ๋๊ฒ ๋ฐ๋ก Sign-extended
๋งจ ์ผ ์ชฝ bit(MSB ; Most Significant Bit) ๋ฅผ ์์ผ๋ก ์ญ ํ์ฅํด์ ๋ ์ง์คํฐ์ ๋ถ์ฌ๋ฃ์ด์ค๋ค.
์ฆ ๋ ์ง์คํฐ ๋งจ ์ค๋ฅธ์ชฝ์ (LSB ; Least Significant Bit) ๊ฐ์ ธ์ค๊ณ ์ ํ๋ byte๋ฅผ ๋ฃ๊ณ ๊ทธ ์์ ๋น๋ ๋ถ๋ถ์
Sign-extended ํด์ ์ฑ์์ฃผ๋ ๊ฒ!
์ด sign-extended๋ฅผ ์จ์ผ ์์๋ค๋ ๊ทธ๋๋ก ๋ณด์กด๋๋ค.
ex) FF(= 1111 1111)๋ ์์ FFFFFF๋ฅผ ์ถ๊ฐํด๋ ์ฌ์ ํ -1 !
02๋ ์์ 000000๋ฅผ ์ถ๊ฐํด๋ ์ฌ์ ํ 2 !
๋ง์ฝ Sign-extended๋ฅผ ์ฐ๊ณ ์ถ์ง ์๋ค๋ฉด lbu ์ฐ๋ฉด ๋จ!
์๋ zero extended๋ฅผ ์
์์์ unsigned๋ก ์๊ฐํ๊ณ ํ์
ํจ
ex) FF = 000000FF = 255
4. sb
: register์ ์๋ ํ byte(=8bit)๋ฅผ register์ writes
- S type instruction
sb rs2, address
sb t0, -7(s3)
# [s3 + (-7)] <= t0[7:0]
sb๋ ๋ ์ง์คํฐ์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ LSB๋ก๋ถํฐ ๊ฐ์ ๊ฐ์ ธ์ memory์ ์ด๋ค.
- ๋ฉ๋ชจ๋ฆฌ์ ๋จ์ด์ ๋ค๋ฅธ bits๋ค์ ๊ฑด๋ค์ง ์๋๋ค !! (no sign extension!)
- ์ -7์ imm ๋๊ฐ์ ๋๋ ์ ์ ์ฅํ๋๊ฐ๋ ๊ทธ๋ฅ ํ์์ ๋ง์ถ๊ธฐ ์ํจ์ด์๋... ์ค๊น ๊ธฐ์ต์ด ์๋
5. lui(Load Upper Immediate), auipc(Add Upper Immediate to PC)
- U type instruction
lui๋ ๋ค์ ์ค๋ 24bit ์ซ์๋ฅผ register์ ์ ์ฅํ๋ ๊ฒ
auipc๋ ํ์ฌ ๋ณด๊ณ ์๋ instruction์ ์ฃผ์(=PC)๋ก ๋ถํฐ ์์๋งํผ ๋ํ ์ซ์๋ฅผ ์ ์ฅํ๋ ๊ฒ
lui rd, imm20
# rd = {imm20, 12'b0}
auipc rd,imm20
# rd = PC + {imm20, 12'b0}
lui ์ auipc๋ Not LSB!! ์๋ ์ค๋ฅธ์ชฝ์ ๋ถ์ฌ๋ฃ์ง ์๊ณ ์ผ์ชฝ์ ๋ถ์ฌ๋ฃ์ ๋ค์ ์ค๋ฅธ์ชฝ์ 0์ผ๋ก ์ฑ์์ค๋ค.
ex) lui t0, 0x12345
-> t0 : 0x12345 | 0x000
auipc t0, 0x12345
-> t0 : (ํ์ฌ PC) + 0x1234_5000
32 bit ์์๋ฅผ register์ ๋ถ๋ฌ์ค๋ ค๋ฉด ?
- lw instruction ์ฌ์ฉ
- lui + addi instruction ์ฌ์ฉ
lui t0, 0x12345
addi t0, t0, 0x678
6. Pseudo Instructions
- RISC-V๋ ์ค์ ๋ก ์๋ ๋ช ๋ น์ด๋ ์๋์ง๋ง ๊ทธ๋ฐ ๋ช ๋ น์ด๋ค์ ๋ช ๊ฐ์ฉ ๋ฌถ์ด์ ํ ๋ฒ์ ํธํ๊ฒ ์ธ ์ ์๊ฒ ์ ์ํ Pseudo instructions์ ์ ๊ณตํ๋ค!
- li : 32bit ์์๋ฅผ s0 ๋ ์ง์คํฐ์ load
- la : op1์ ์ฃผ์๊ฐ์ s0 ๋ ์ง์คํฐ์ load
- mv : s1 ๊ฐ์ s2์ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ (์ฎ๊ธฐ๊ธฐ)
- nop : ๋ง๊ทธ๋๋ก ์๋ฌด๊ฒ๋ ์ํ๋.. (์ ์๋๊ฑธ๊น)
'๐ก๐ธ๐ธ๐ถ5: ๐ฆ๐๐๐๐ถ ๐ฐ๐๐พ๐ > Computer Architecture(COSE222)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ปดํจํฐ๊ตฌ์กฐ] CH4. RISC-V & RISC-V Instruction #3 (0) | 2021.10.16 |
---|---|
[์ปดํจํฐ๊ตฌ์กฐ] CH4. RISC-V & RISC-V Instruction #1 (0) | 2021.10.09 |
[์ปดํจํฐ๊ตฌ์กฐ] 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 |