3장은 ISA에 대해 배운다.
[1] Base ISA ( RV32I, RV64I) >
>> RISC-V CPU가 필수로 제공해야 하는 명령어
- RV32I : 32-bit 아키텍쳐에 기반한 정수(integer) 처리를 위한 명령어들
> 주로 소형 저전력 임베디드 시스템을 위한 프로세서로 사용되고 있다.
- RV64I : 64-bit 아키텍쳐에 기반한 정수(integer) 처리를 위한 명령어들
> 레지스터의 크기 Program counter가 모두 64-bit RV32I 보다 명령어 12개가 더 많다. (곱셈, 나눗셈, 부동소수점 연산)
> 주로 AP (application processor , 스마트폰 CPU)
ex) RV32IMAC > RV32I + M + A + C 세가지 extension을 포함하는 명렁어 set
+) 우리는 RV32I ISA 공부
명령어 (instruction ) = 머신코드 (machine code) 또는 기계어
명령어를 사용해 코딩할때 >> 어셈블리 프로그래밍 할 때
명령어 >> 컴파일러 or 어셈블러를 통해 0과 1로 이루어진 형태로 바뀐 것을 기계어
when 컴퓨터가 프로그램을 실행
1. 기계어로 이루어진 프로그램을 메모리에 적재2. CPU는 기계어를 읽어 실행한다. > CPU의 기본 기능이 명령어를 실행하는 것
3장에서는 CPU 대략적인 구조를 보고 CPU 내부 하드웨어 구조 ( =마이크로 아키텍처)는 5장에서 설명
what is RV32I ??
- 32개의 (x0 ~ x31) 일반목적 레지스터 (general-purpose register) + PC (program counter)
>> x0 레지스터는 항상 0 으로 고정 why? 프로그램 수행 중 0이 많이 사용되는데 그때마다 주기억장치 (RAM) 에서 읽어오지 않고 바로 사용하도록 하기 위해서이다
+) 추가설명
x0 레지스터는 하드웨어 수준에서 이미 0으로 초기화되어 있으므로, 프로그램에서 명시적으로 값을 지정하지 않아도 항상 0 값을 가지고 있다. 이것은 매번 메모리에 접근하여 0 값을 가져오는 것보다 훨씬 빠르고 효율적 이다.
따라서 프로그램에서 0 값을 필요로 하는 경우에는 x0 레지스터를 사용하여 메모리 액세스 없이 바로 사용할 수 있다.
이를 통해 프로그램의 실행 속도를 향상시킬 수 있는 것 이다!

>> x0을 zero라고 써도 된다는 의미 밑에 줄도 마찬가지
.
What is R-type , I-type , S-type , U- type , B-type , J-type ??
>> 모두 명령어의 길이는 32-bit 이다.
- 명령어에서 opcode , funct7 , funct3 field는 명령어가 어떤 동작을 하는지 명시하는 부분이다.
> 일반적으로 통칭 opcode이라고 부른다
+) RISC-V에서는 opcode와 funct7 필드를 함께 사용하여 명령어의 종류를 확장하거나 추가 기능을 제공한다.
funct3 필드를 사용하여 명령어의 특정 조건을 지정하거나 명령어의 작업을 세분화한다.
+) field = 주어진 명령어에서 특정 정보를 포함하고 있는 부분을 가리킨다.
- rs1, rs2, rd field에는 레지스터 번호를 명시한다.
rs1 = 첫 번째 피연산자 레지스터
rs2 = 두 번째 피연산자 레지스터 rd = 목적지 레스터를 명시
레지스터 파일에 있는 레지스터의 개수가 32개 이기 때문에 rs1,rs2,rd는 모두 5-bit로 이루어져 있다. ,, 32(= 2^5)
32개 레지스터 중 1개를 명시하려면 5-bit가 필요하기 때문이다.
- imm (immediate)은 명령어에 포함된 상수로 우리말로는 즉치값이다.
ex) add 명령어 >> 이해하기
add x2, x3, x4 >> R-type 명령어
sol) CPU는 x3 + x4 덧셈 연산을 하고 그 결과를 x2레지스터에 저장한다.
opcode = 011011, funct7 = 0000000, funct3 = 000 >> 위에 표에서 찾아보세요!
첫 번째 source 레지스터는 x3 > rs =1 , 두 번째 source 레지스터는 x4 > rs2 = 4 , destination 레지스터 x2 > rd = 2
>> 소프트웨어 프로그램의 기능 = 조건에 따라 (조건없이) 데이터 연산 혹은 처리를 하는 것
따라서 CPU는 최소 3가지 종류의 명령어는 반드시 제공
1. 데이터처리 명령어 > 연산 명령어
2. 메모리 접근 명령어
> CPU가 데이터를 메모리에서 레지스터로 가져오는 명령어& 레지스터 값을 메모리로 쓰기 위한 명렁어
3.분기 명령어 (branch instruction) > if for while과 같은 조건문이나 함수호출을 위한 명령어
RV32I 데이터 처리 명령어 (data processing instruction)
>> 알아두기! / RV32I에는 정수에 대한 덧셈과 뺄셈을 하는 명령어만 있다. (위에서 배웠죠?!)
(1) add 명령어 (R-type 명령어)
add a5, a4, a5 = a4 + a5 (=x14 + x15)덧셈을 하여 a5(=x15) 레지스터에 저장하는 명령어
>> 여기서 opcode , funct7 , funct3에 51 ,0 , 0이 들어가는이유는 그냥 그렇게 정해서 이다. ( 3-3 표 보기)
>> rs1, rs2에 source register 번호인 14 (=x14), 15 (=x15), rd에는 destination register 번호인 15 (=x15)
add a5, a4, a5 2진수로 표현하면 명령어의 기계어 , 16진수 형태로 표현 하면 0x00F7_07B3
(2) sub 명령어 (I-type 명령어)
addi a5, a5, -12 = a5 +(-12) (=x15 + (-12))덧셈을 하여 a5(=x15) 레지스터에 저장하는 명령어
>> add 에서 처럼 opcode, funct3에는 어떤 값이 들어가는지 확인
>> rs1, rd에는 첫 번째 source register와 destination register 번호인 15 (=x15), 15(=x15)가 각각 들어간다.
두 번째 source operand인 -12는 imm 12에 어떤 형태로 들어갈까?
> 컴퓨터에서는 음의 정수를 2의 보수체계를 사용해 표현한다. 즉 , -12를 2의 보수로 표현한 값이 imm[11:0]에 들어간다.
> 책 참고 p.121~122
'RISC-V CPU 설계 > 개념 정리' 카테고리의 다른 글
[RISC-V] 4.1 조합회로 (1) | 2024.05.11 |
---|---|
교과블록 4주차 개념정리(3장-4~ 3.5) (0) | 2024.04.21 |
교과블록 3주차 공부 (0) | 2024.04.17 |
교과블록 2주차 발표준비 (1장) (0) | 2024.04.10 |