• 명령어의 표현
한 명령어당 32-bit word (=4 byte) 로 인코딩 되어있다.
• RISC-Ⅴ Instruction Formats
6가지 형태가 있다.
R-type을 보면 rd = 5, rs1 = 5, rs2 = 5 bit가 할당된 것을 확인할 수 있다.
경우의 수는 2⁵ = 32가지인데 왜 32개보다 더 늘리지 않는 것일까?
만약 33가지로 늘리게 되면 각각 1 bit씩 늘어나야 한다.
결국 opcode나 funct7에서 명령어를 더 많이 배치하지 못하는 문제가 생긴다.
따라서 일반적으로 사용하는 레지스터의 개수는 32개로 고정되어 있다.
• R-Type Instructions
프로세서가 opcode(0110011)을 통해 레지스터 3개를 사용하는 R-type Instruction이라는 것을 인지할 수 있다.
• I-Type Instructions
Immediate 12 bit를 상위 bit로 사용한다.
Imm가 쓰는 명령어를 하나로 묶어둠으로써 기계가 이해해야 하는 가짓수를 줄여준다. (최적화된 설계에 유리하다.)
• S-Type Instructions
Store 명령어를 구성하는데 사용한다.
앞의 I-type과 다르게 imm가 나눠져있는 것을 확인할 수 있는데, 이는 회로 설계의 편의성 때문이다.
• SB-Type Instructions
Branch를 하는 Instruction들이 사용된다.
S-type과 거의 동일한 형태를 가지고 있다.
예시를 확인해보면, x10 ≠ x11이면 PC+2000으로 jump에서 특이한 점이 있다.
RISC-Ⅴ에서 C extension 때문에 addressig이 2byte 단위로 진행되기 때문에
맨 아래 bit는 언제나 0이라는 법칙이 만들어진다.
따라서 imm 필드에서 마지막 0을 적는 것이 아니라 원래 부호 bit에 해당하는 0을 적어주게 된다.
이렇게 함으로써 비트를 아끼고 명령어를 더 효율적으로 설계할 수 있다.
• U-Type Instructions
Immediate 12 bit를 상위 bit로 사용한다.
lui와 auipc는 opcode로 구분할 수 있다.
• UJ-Type Instructions
jal에서 imm를 사용할 때도 0을 탈락시키고 sign extension을 해서 0을 써준다.
6개의 타입을 모두 정리하자면 다음과 같다.
• RISC vs CISC Remind
RISC 특징
- 적은 개수의 간단한 명령어를 가지지만 작업 수행 시 시간이 더 걸릴 수 있다.
- 레지스터 기반 명령어 집합을 사용한다.
- 메모리 접근은 Load/Store 명령어로만 가능하다.
- 명령어는 고정된 크기를 가진다. (32bit Instruction)
RISC 지지자들은 최적화된 컴파일러를 통해 단순한 명령어 집합을 활용하여 빠른 실행을 추구한다.
CISC 지지자들은 더 적은 노력으로 컴파일러를 사용하고 보다 적은 코드 바이트를 사용하여 더 효율적인 코드를 생성을 추구한다.
하지만 흑백논리로 나누어지는 것이 아닌 중간 지점에서 많이 사용한다.
또한 성능이 무조건 중요한 것이 아니라 코드 호환성이 가장 중요하다.
임베디드 프로세서에서는 더 작고, 저렴하고, 낮은 전력소모를 하는 RISC가 선택받고 있다.
• ISA 설계 철학
- 단순함은 규칙성을 좋아한다.
- 작을수록 빠르다.
- 사람이 이해하기 까다로울수록 컴파일러 처리는 쉽다.
- 가장 중요한 것은 일반적인 케이스를 빠르게 만드는 것이다! (Amdal's Law)
'CS > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조] #9 Pipeline (0) | 2024.06.09 |
---|---|
[컴퓨터구조] #8 Processor (0) | 2024.06.03 |
[컴퓨터구조] #6 ISA(2) (0) | 2024.04.23 |
[컴퓨터구조] #5 ISA(1) (0) | 2024.04.22 |
[컴퓨터구조] #4 부동소수점 (0) | 2024.04.19 |