1. Title
RISC-V CPU
2. Category
"System Verilog", "BASYS3", "VIVADO"
3. Key Concepts
RISC-V CPU 개념
4. Setup
1. RISC-V의 레지스터 및 PC
① X0 ~ X31 (32개 레지스터)
- RISC-V는 총 32개의 범용 레지스터(GPR, General Purpose Register)를 제공하며, X0부터 X31까지 번호가 매겨져 있다.
- 각 레지스터는 특정한 용도로 사용되지만, 소프트웨어에 따라 유연하게 활용 가능.
- 일반적으로 RISC-V는 ABI(Application Binary Interface) 에 따라 특정 레지스터에 정해진 역할을 부여한다.
② PC (Program Counter)
- 현재 실행 중인 명령어의 메모리 주소를 저장하는 레지스터.
- 명령어가 실행될 때마다 PC는 자동으로 증가하며, 점프(Jump)나 함수 호출(Call) 등의 명령어가 실행되면 PC 값을 변경하여 새로운 주소로 이동함.
2. RISC-V 명령어 형식 (R/I/S/U Type)
명령어의 종류는 opcode에 의해 결정된다. (예: 0110011 → R-Type 명령어).
① R-Type (Register-Register 명령어)
- 두 개의 레지스터 값을 연산하여 또 다른 레지스터에 결과를 저장하는 형식.
- 주로 산술 연산, 논리 연산, 비트 연산 등에 사용됨.
- rs1, rs2 : 입력 레지스터
- rd : 결과를 저장할 레지스터
- funct7, funct3 : 연산 종류를 결정하는 필드
- opcode : 명령어 종류를 결정하는 필드
② I-Type (Immediate 연산)
- 상수 값(Immediate)을 포함하는 명령어, 레지스터와 즉시 값을 이용한 연산 수행.
- 주로 상수 값을 더하는 연산 (addi), 로드 명령어 (lw), 비교 연산 (slti) 등에서 사용됨.
- imm : 12비트 상수 값 (부호 확장 가능)
- rs1 : 입력 레지스터
- rd : 결과를 저장할 레지스터
- funct3 : 연산 종류 결정
- opcode : 명령어 종류 결정
③ S-Type (Store 명령어)
- 메모리에 데이터를 저장하는 명령어, 주로 sw, sh, sb 등의 저장(Store) 연산에서 사용됨.
- imm : 12비트 즉시 값 (주소 오프셋)
- rs1 : 기준 주소가 저장된 레지스터
- rs2 : 저장할 데이터가 있는 레지스터
- funct3 : 저장 방식 결정
- opcode : 명령어 종류 결정
④ U-Type (Upper Immediate 연산)
- 상위 20비트 즉시 값을 처리하는 명령어, lui, auipc와 같은 명령어에 사용됨.
- imm : 20비트 상위 즉시 값
- rd : 결과를 저장할 레지스터
- opcode : 명령어 종류 결정
** funct, rs, rd, opcode, imm의 의미
- funct7, funct3: 연산 종류를 결정하는 필드 (예: add, sub, or, and 등).
- rs1, rs2: 입력 레지스터.
- rd: 연산 결과를 저장할 레지스터.
- opcode: 명령어의 종류를 결정하는 코드 (예: 0110011 → R-Type 명령어).
- imm: 상수 값 (Immediate), 상수 값을 연산에 직접 사용하기 위해 포함.
3.RISC-V의 주요 구성 요소들
1. ALU (Arithmetic and Logic Unit)
- 역할: ALU는 산술 및 논리 연산을 수행하는 하드웨어 모듈이다. 입력으로 두 레지스터 값을 받아 산술 연산(덧셈, 뺄셈, 곱셈 등)과 논리 연산(AND, OR, XOR 등)을 수행하고 그 결과를 출력한다.
- 주요 연산: 덧셈, 뺄셈, AND, OR, XOR, 비교 연산 등이다.
- 예시: RISC-V 명령어 중 add, sub, and, or, slt 등이 ALU 연산에 해당한다.
2. REGISTER FILE
- 역할: 레지스터 파일은 CPU 내부에 존재하는 레지스터들의 집합이다. RISC-V에서 레지스터 파일은 32개의 레지스터(X0~X31)를 포함하고 있으며, 프로그램의 실행 중 변수나 연산 결과 등을 일시적으로 저장한다.
- 주요 레지스터들:
- X0 (zero): 항상 0이다.
- X1 (ra): 함수 복귀 주소이다.
- X2 (sp): 스택 포인터이다.
3. INSTRUCTION MEMORY
- 역할: 명령어 메모리는 CPU가 실행할 명령어를 저장하는 메모리이다. 프로그램이 실행될 때, 프로그램 카운터(PC)가 가리키는 위치에서 명령어를 읽어 ALU나 레지스터 파일 등에 전달한다.
- 구성: 프로그램이 메모리상에 배치되며, CPU는 이 메모리에서 순차적으로 명령어를 읽어온다.
- 예시: 프로그램 실행 중 PC가 가리키는 위치에서 명령어를 읽어 CPU가 이를 해석하고 실행한다.
4. DATA MEMORY
- 역할: 데이터 메모리는 프로그램 실행 중 필요한 데이터(변수, 배열 등)를 저장하는 메모리이다. ALU가 처리한 결과나 레지스터에서 읽은 값은 데이터 메모리에 저장되거나, 거기에서 불러와 ALU나 레지스터로 전달된다.
- 구성: 일반적으로 데이터를 읽고 쓰는 용도로 사용된다. 주로 load(데이터 읽기) 및 store(데이터 쓰기) 명령어로 데이터를 처리한다.
- 예시: lw(load word), sw(store word) 명령어가 데이터 메모리와 관련된 명령어이다.
5. PROGRAM COUNTER (PC)
- 역할: 프로그램 카운터는 현재 실행 중인 명령어의 메모리 주소를 가리킨다. 프로그램의 흐름을 제어하는 핵심 요소로, 다음에 실행할 명령어의 주소를 제공한다.
- 동작: 명령어가 실행된 후, PC 값은 기본적으로 다음 명령어 주소로 증가하지만, 조건부 분기나 함수 호출이 있을 경우 다른 주소로 변경될 수 있다.
- 예시:
- 분기 명령어(beq, bne 등)가 실행되면 PC가 변경되어 다른 명령어로 점프한다.
- 함수 호출(jal, jalr) 후 복귀 주소가 PC에 저장된다.
구성 요소 간 관계
- ALU: 연산을 담당하며, 연산 결과는 레지스터 파일에 저장될 수 있다.
- REGISTER FILE: ALU에서 연산을 위한 값을 읽거나 결과를 저장하는 곳이다. 명령어를 실행할 때 필요한 값들은 이곳에서 읽고 저장된다.
- INSTRUCTION MEMORY: 실행할 명령어를 PC가 가리키는 위치에서 읽어 ALU와 REGISTER FILE에 전달한다.
- DATA MEMORY: ALU의 결과나 REGISTER FILE에서 데이터를 읽어와 저장하거나, 처리된 데이터를 저장한다.
- PC: 명령어 실행의 순서를 관리하며, INSTRUCTION MEMORY에서 명령어를 읽어올 주소를 제공한다.
- CONTROL UNIT: 명령어의 해석 및 실행에 필요한 제어 신호를 생성하여 CPU의 동작을 관리한다.
'AI SOC COURSE > SYSTEM VERILOG (CPU 설계)' 카테고리의 다른 글
CPU Course Review - 11. AMBA BUS (APB Protocol - RAM) (0) | 2025.02.24 |
---|---|
CPU Course Review - 10. Analysis of Assembly Language (Single Cycle RISC-V) (0) | 2025.02.21 |
CPU Course Review - 08. RAM (0) | 2025.02.12 |
CPU Course Review - 07. Register (0) | 2025.02.11 |
CPU Course Review - 06. TestBench Revision (0) | 2025.02.11 |