[컴퓨터구조] RISC-V Instructions (2)
이번 포스팅에서는 RISC-V의 다양한 Instruction이 어떻게 32bit 길이의 비트열로 인코딩되는지 알아보겠다.
RISC-V에는 이러한 인코딩 format이 6가지 존재한다.
RISC-V Instruction Formats
- R-Type (Register)
- I-Type (Immediate)
- S-Type (Store)
- SB-Type (Branch)
- U-Type (Upper Immediate)
- UJ-Type (Jump)
위 그림에서 Format들의 구체적인 구조를 볼 수 있다.
모든 Format에는 공통적으로 instruction의 종류를 나타내는 opcode가 들어간다. funct3와 funct7에 해당하는 영역은 opcode와 함께 세부 instruction의 종류를 타나낸다.
rs1과 rs2는 source register 1, 2를 의미하며, rd는 destination register을 의미한다. 그리고 imm12 및 imm20는 immediate value를 나타낸다.
R-Type은 두 source register의 값을 입력으로 받고 rd에 출력값을 저장하는 instruction들에 해당한다. add, sub, sra, xor 등이 R-Type으로 인코딩된다.
I-Type은 source register 하나와 immediate value 하나를 입력으로 받는 instruction들에 해당한다. addi, xori ld, lw 등이 I-Type으로 인코딩된다.
S-Type은 레지스터 값을 메모리에 저장하는 sd, sw, sh, sb를 인코딩한다.
U-Type은 긴 immediate value가 필요한, lui와 같은 instruction을 인코딩한다.
SB-Type와 UJ-Type은 각각 S-Type, U-Type과 정보의 양과 종류가 동일하지만, immediate value의 비트 배치가 다르다. 이러한 배치는 해당하는 instruction의 기능을 하드웨어에서 구현하는 것과 관련이 있다고 한다.
SB-Type은 blt, beq와 같은 branch instruction을 인코딩하며, UJ-Type은 immediate value로 jal을 인코딩한다.
References
- D. Patterson, J. Hennessy (2021). Computer Organization and Design: RISC-V edition (2nd ed). Morgan Kaufmann. pp.66-178