[MIPS] RTL 이란?
RTL은
Register Transfer Language의 줄임말로써,
Register와 register 간에 데이터가 이동하는 흐름 방향을 자세하게 보여줄 수 있는 수준의 언어입니다.
예제를 살펴보겠습니다.
① add operation
op code | rs | rt | rd | shamt | function code |
add rd, rs, rt
↓↓↓ RTL Description ↓↓↓
IR ← mem[PC]; # Fetch instruction from memory
R[rd] ← R[rs] + R[rt]; # ADD operation
PC ← PC + 4; # Calculate next address
② sub operation
op code | rs | rt | rd | shamt | function code |
sub rd, rs, rt
↓↓↓ RTL Description ↓↓↓
IR ← mem[PC]; # Fetch instruction from memory
R[rd] ← R[rs] + ~R[rt] + 1; # SUB operation
PC ← PC + 4; # Calculate next address
~는 invet를 의미하고, +1은 2' complement를 의미합니다.
③ lw operation
op code | rs | rt | immediate |
lw rt, rs, imm16
↓↓↓ RTL Description ↓↓↓
IR ← mem[PC]; # Fetch instruction from memory
Addr ← R[rs] + SignExt(imm 16); # Compute memory address
R[rt] ← Mem[Addr]; # Load data into register
PC ← PC + 4; # Calculate next address
SignExt은 sign bit을 기준으로 빈 공간을 채우는 것을 의미하는데,
Sign bit이 1이면 1로, sign bit이 0이면 0으로 채웁니다.
④ sw operation
op code | rs | rt | immediate |
sw rt, rs, imm16
↓↓↓ RTL Description ↓↓↓
IR ← mem[PC]; # Fetch instruction from memory
Addr ← R[rs] + SignExt(imm 16); # Compute memory address
Mem[Addr] ← R[rt]; # Store data into memory
PC ← PC + 4; # Calculate next address
⑤ beq operation
op code | rs | rt | immediate |
beq rt, rs, imm16
↓↓↓ RTL Description ↓↓↓
IR ← mem[PC]; # Fetch instruction from memory
Cond ← R[rs] + ~R[rt] + 1; # Compute conditonal Cond
PC ← Cond ? PC + 4; # Fall through if non-zero Cond : PC + 4 + (SignExt(imm 16) << 2;
# Branch if zero Cond
rt와 rs가 같으면 zero가 Cond에 들어가고, 다르면 non-zero가 Cond에 들어갑니다.
◡̈