RISC-V ISA는 단순한 명령어 집합을 넘어, 명령어가 실제 하드웨어에서 어떻게 처리되는가에 대해 명확한 규칙과 메커니즘을 제공한다. 이번 글에서는 다음을 하나씩 깊이까지 파고든다.
이번 글의 목표
- RISC-V 명령어의 수행 단계(IF~WB)를 파이프라인 레벨에서 이해
- 분기·예외·트랩·인터럽트 처리 과정 분석
- RISC-V의 트랩 벡터 구조와 privilege 모드 구조
- CSR(Control & Status Register)의 역할
- 예시 코드 기반으로 실제 하드웨어 동작 추적
1. RISC-V 파이프라인 기본 구조
대표적인 RISC 아키텍처와 마찬가지로, RISC-V의 실행 구조도 다음의 5-stage 파이프라인을 기반으로 설명할 수 있다.
1.1 5단계 파이프라인
| 단계 | 이름 | 역할 |
| IF | Instruction Fetch | 명령어 메모리에서 인출 |
| ID | Instruction Decode | opcode 해석, 레지스터 읽기 |
| EX | Execute | ALU 연산, 분기 판단 |
| MEM | Memory Access | 로드/스토어 수행 |
| WB | Write Back | 레지스터 파일에 결과 기록 |
1.2 파이프라인의 핵심 목표
1) 1클럭당 한 명령어(IPC ≈ 1) 를 최대한 유지하는 것이다.
2) 명령어 생명 주기: 실제 흐름 따라가기
예시 명령어:
addi x5, x5, 4
lw x6, 0(x5)
add x7, x6, x5
이 세 명령이 파이프라인에서 어떻게 진행되는지 살펴보자.
🔍 예시: 파이프라인 흐름표
| Cycle | addi | lw | add |
| 1 | IF | ||
| 2 | ID | IF | |
| 3 | EX | ID | IF |
| 4 | MEM | EX | ID |
| 5 | WB | MEM | EX |
| 6 | WB | MEM | |
| 7 | WB |
파이프라인 설계 덕분에 실제 클럭은 7회만 사용했다. 만약 순차 처리였다면 15클럭 정도가 필요했을 것이다.
3. 파이프라인 Hazard (데이터/제어/구조)
RISC-V 아키텍처는 단순하지만, 파이프라인 충돌(hazard)은 반드시 해결해야 한다.
(1) 데이터 Hazard (Data Hazard)
예시:
lw x6, 0(x5)
add x7, x6, x5
lw가 x6 레지스터를 WB에서 기록하기도 전에 add가 x6을 필요로 한다.
✔ 해결 방법
- Forwarding(데이터 우회 경로)
- stall(버블 삽입)
(2) 제어 Hazard (Control Hazard)
분기 명령어:
beq x1, x2, LABEL
EX 단계가 끝나기 전까지 실제 분기 여부를 알 수 없기 때문에 파이프라인은 잠시 멈추거나, 분기 예측기를 사용해야 한다.
(3) 구조 Hazard (Structural Hazard)
두 개의 파이프라인 단계가 동일한 하드웨어 자원을 동시에 필요로 할 때 발생한다. 단순 RISC-V 코어에서는 instruction memory와 data memory를 분리하여 문제를 회피하는 구조(Harvard architecture)를 많이 사용한다.
4. 예외(Exception) & 트랩(Trap)
RISC-V는 Exception(동기적), Interrupt(비동기적) 을 모두 Trap Handler로 전달한다.
✔ Exception의 예
| Exception 종류 | 예시 |
| Illegal instruction | 정의되지 않은 opcode |
| Load/store fault | 메모리 접근 오류 |
| Environment call | ecall 명령 수행 |
✔ Trap 발생 과정
- 명령어 실행 중 오류 발생
- 현재 privilege level에 따라 trap vector 주소 결정
- PC 값을 CSR 레지스터에 저장
- Handler 루틴으로 점프
- 처리 후 mret/sret 등으로 복귀
5. RISC-V Privilege Levels (권한 레벨)
RISC-V는 매우 단순한 권한 계층을 제공한다.
🔐 Privilege Level 구조
| Level | 이름 | 설명 |
| M | Machine Mode | 최상위 권한, 모든 자원 접근 |
| S | Supervisor Mode | OS 커널 수준 권한 |
| U | User Mode | 일반 유저 프로그램 |
많은 임베디드 시스템은 M 모드만 사용한다.
리눅스 기반 시스템은 M + S + U 구조를 사용한다.
6. CSR(Register) 구조 완전 해부
CSR은 CPU의 제어·상태 정보를 저장하는 중앙 관리 레지스터 집합이다.
📌 CSR 영역은 크게 네 가지 용도로 사용된다.
- Trap 처리 정보 저장
- mepc (trap 시 PC 저장)
- mcause (발생 원인)
- mtvec (trap handler 주소)
- Privilege 관리
- mstatus
- sstatus
- 인터럽트 관리
- mie (interrupt enable)
- mip (interrupt pending)
- 성능 카운터
- mcycle (CPU 사이클 수)
- minstret (실행된 명령어 수)
대표 CSR 테이블
| CSR | 역할 |
| mstatus | Machine mode 상태 |
| mepc | trap 발생 시 PC |
| mcause | trap 원인 |
| mtvec | trap vector base |
| misa | 지원하는 ISA 정보 |
| mie | 인터럽트 활성화 |
| mip | 인터럽트 대기 상태 |
| mcycle | 사이클 카운터 |
7. 실제 Trap 예시로 전체 동작 이해하기
예시:
잘못된 메모리 주소 접근 코드
int* p = (int*)0xFFFFFFFF;
int x = *p; // load fault 발생
🔍 RISC-V Trap 처리 흐름
- lw 명령이 MEM 단계에서 fault 발생
- CPU가 예외 코드 설정
→ mcause = Load Access Fault - fault 발생 시점의 PC 저장
→ mepc = <lw 명령의 주소> - trap handler 주소로 점프
→ mtvec에 저장된 주소로 이동 - OS 또는 펌웨어가 예외 처리
- mret로 복귀
→ mepc에 저장된 주소 다음 명령으로 복귀
8. 파이프라인에서 Trap이 발생한 경우
파이프라인은 현재 진행 중인 명령어를 모두 플러시하고, trap handler로 넘어간다.
플러시 시 사라지는 요소:
- 디코드 중이던 명령어
- EX, MEM 단계에 있던 명령어
- 다음 사이클에 수행될 명령어
9. 실제 하드웨어 수준 코드 예시: CSR 접근
RISC-V는 CSR을 읽고 쓰는 명령어를 제공한다.
✔ 예: CSR 읽기 (csrr)
csrr x5, mcycle
→ mcycle CSR 값을 x5 레지스터에 읽어옴
✔ 예: CSR 쓰기 (csrw)
csrw mtvec, x10
→ trap handler 주소를 mtvec에 설정
✔ 예: CSR 비트 단위 set/clear
csrs mie, (1 << 7) # Timer interrupt enable
csrc mie, (1 << 7) # Disable timer interrupt
10. 정리 — RISC-V의 실행 메커니즘은 ‘단순하지만 강력’
이번 글을 통해 다음 개념을 확실하게 확보했을 것이다.
✔ 단순한 5단계 파이프라인
쉬운 하드웨어 구현에 최적화.
✔ 데이터·제어 Hazard 구조
Forwarding·stall·branch prediction 개념 적용 가능.
✔ 예외/트랩 처리 구조의 일관성
Exception/Interrupt 모두 동일한 trap 메커니즘으로 처리.
✔ CSR 기반의 강력한 제어력
트랩, 인터럽트, privilege level, 성능 분석까지 모두 CSR에서 제어.
✔ 전체 실행 흐름이 매우 깨끗하다
복잡한 x86과 달리, RISC-V의 실행 모델은 단순성 = 강력함 을 잘 보여준다.
'RISC-V > RISC-V 개념' 카테고리의 다른 글
| [RISC-V] RV32I 레지스터 (0) | 2026.03.05 |
|---|---|
| [RISC-V] 5편 RISC-V의 미래: 기회와 도전 — ISA 생태계 전환기의 기술·시장 분석 (1) | 2026.03.04 |
| [RISC-V] 4편 RISC-V 메모리 모델·캐시 계층·MMU·가상 메모리·TLB (0) | 2026.03.03 |
| [RISC-V] 2편 RISC-V 명령어 집합 구조(ISA) (0) | 2026.02.10 |
| [RISC-V] 1편 RISC-V란 무엇인가: 오픈 ISA의 태동과 산업적 의미 (1) | 2026.02.02 |