지난 포스팅에서는 RV32I를 하드웨어와 소프트웨어라는 두 가지 관점에서 분류해 보았습니다. 이전 내용이 궁금하시다면 아래 글을 참고해주세요. 아울러 소프트웨어적 분류를 바탕으로 연재 중인 다른 포스팅들도 확인하실 수 있습니다.
https://idkihg.tistory.com/143
[RISC-V] RV32I ISA
RV32I ISA(Instruction Set Architecture)는 최소한의 명령어로 모든 계산을 수행한다는 RISC-V의 철학을 보여줍니다. 전체 명령어는 총 47개 뿐이며, 모든 명령어 길이는 32비트로 고정되어 있습니다. 1. 하드
idkihg.tistory.com
1) ISA Computation
https://idkihg.tistory.com/146
[RISC-V] RV32I ISA - Computation
지난 포스팅에서는 RV32I를 하드웨어와 소프트웨어라는 두 가지 관점에서 분류해 보았습니다. 이전 내용이 궁금하시다면 아래 글을 참고해주세요.https://idkihg.tistory.com/143 [RISC-V] RV32I ISARV32I ISA(Inst
idkihg.tistory.com
2) ISA Loads & Stores
https://idkihg.tistory.com/147
[RISC-V] RV32I ISA - Loads & Stores
지난 포스팅에서는 RV32I를 하드웨어와 소프트웨어라는 두 가지 관점에서 분류해 보았습니다. 이전 내용이 궁금하시다면 아래 글을 참고해주세요.https://idkihg.tistory.com/143 [RISC-V] RV32I ISARV32I ISA(Inst
idkihg.tistory.com
3) ISA Control Transfer
[RISC-V] RV32I ISA - Control Transfer
지난 포스팅에서는 RV32I를 하드웨어와 소프트웨어라는 두 가지 관점에서 분류해 보았습니다. 이전 내용이 궁금하시다면 아래 글을 참고해주세요.https://idkihg.tistory.com/143 [RISC-V] RV32I ISARV32I ISA(Inst
idkihg.tistory.com
이번 글에서는 시스템의 안정성과 흐름을 조율하는 핵심, Miscellaneous Instruction들을 하나씩 살펴 보겠습니다.
1. Miscellaneous 명령어의 분류

1.1. 메모리 배리어(Memory Ordering)
멀티코어나 입출력 장치와의 동기화를 위해 필요한 명령어
✔ I-type
- fence(load & store): 이 명령어 이전의 메모리 접근이 이후의 메모리 접근보다 먼저 완료되도록 보장
- fence.i(instruction & data): 명령어 캐시와 데이터 메모리 사이의 일관성을 맞춤
1.2. 환경 및 시스템 제어(Environment Call & Break)
운영체제나 디버거와 대화하기 위한 통로
✔ I-type
- ecall(Environment Call): 사용자 모드에서 실행중인 프로그램이 OS에게 서비스를 요청할 때 사용
- ebreak(Environment Break): 디버거에게 제어권을 넘깁니다. 프로그램 실행중에 중단점을 만났을 때 사용
1.3. 제어 및 상태 레지스터(Control and Status Register)
CPU의 내부 상태를 읽고 설정하거나, 성능을 측정하고, 시스템 예외를 처리하는데 사용됩니다. 이 명령어들은 범용 레지스터가 아니라, 별도의 주소공간에 존재하는 CSR 주소 공간을 대상으로 합니다.
✔ I-type
- csrrw(csr read write) : CSR값을 읽고 새로운 값으로 쓰기
- csrrs(csr read set) : CSR값을 읽고 특정 비트를 1로 세트
- csrrc(csr read clear) : CSR값을 읽고 특정 비트를 0으로 클리어
- csrrwi(csr read write immediate) : CSR값을 읽고 새로운 값으로 쓰기
- csrrsi(csr read set immediate) : CSR값을 읽고 특정 비트를 1로 세트
- csrrci(csr read clear immediate) : CSR값을 읽고 특정 비트를 0으로 클리어
2. 메모리 배리어(Memory Ordering)
비동기적인 하드웨어 환경에서 메모리 작업의 순서를 정의합니다. RISC-V는 효율성을 위해 기본적으로 비순차적 실행을 허용하므로, 명확한 순서가 필요할 때 명령어를 사용합니다. 종류는 fence, fence.i 2가지 입니다. 아래는 메모리 베리어 명령어의 하드웨어 비트 필드 구조입니다.

- fence pred, succ => Fence(pred, succ) (이전 작업 pred가 끝난 후 succ 작업 시작)
- fence.i => Fence(Store, Fetch) (데이터 저장이 완료된 후 명령어를 인출)
3. 환경 및 시스템 제어(Environment Call & Break)
이 명령어들은 일반적인 산술 연산이 아니라, 시스템의 예외를 의도적으로 발생시키는 역할을 합니다. 종류는 ebreak, ecall 2가지 입니다. 아래는 무조건 분기 명령어의 하드웨어 비트 필드 구조입니다.

- ebreak => RaiseException(Breakpoint)
- ecall => RaiseException(EnvironmentCall)
Note. 이 명령어들은 rd, rs1, imm 필드를 거의 사용하지 않거나 특정 값으로 고정하여 시스템 내부 트랩을 유도합니다.
4. 제어 및 상태 레지스터(Control and Status Register)
CSR 명령어는 CPU의 설정을 변경하는 특수 명령어 입니다. 일반적인 rd, rs1 필드 외에도 12비트의 CSR 주소 (imm[11:0]) 필드를 사용하여 어떤 상태 레지스터에 접근할지 결정합니다. 종류는 csrrw, csrrs, csrrc, csrrwi, csrrsi, csrrci총 6가지 입니다.아래는 무조건 분기 명령어의 하드웨어 비트 필드 구조입니다.

- csrrw rd, csr, rs1 => t = CSRs[csr]; CSRS[csr] = x[rs1]; x[rd] = t
- csrrs rd, csr, rs1 => t = CSRs[csr]; CSRS[csr] = t | x[rs1]; x[rd] = t
- csrrc rd, csr, rs1 => t = CSRs[csr]; CSRS[csr] = t & ~x[rs1]; x[rd] = t
- csrrwi rd, csr, zimm[4:0] => t = CSRs[csr]; CSRS[csr] = zimm;
- csrrsi rd, csr, zimm[4:0] => t = CSRs[csr]; CSRS[csr] = t | zimm;
- csrrci rd, csr, zimm[4:0] => t = CSRs[csr]; CSRS[csr] = t & ~zimm;
5. 요약 및 마무리
지금까지 RV32I의 시스템의 안정성과 흐름을 조율하는 핵심, Miscellaneous Instruction를 살펴보았습니다.
- Memory Ordering: 복잡한 하드웨어 구조 속에서 데이터의 순서를 보장합니다.
- Environment Call: 소프트웨어가 하드웨어 및 OS와 대화하게 해줍니다.
- CSR Instructions: CPU의 내부 상태를 정밀하게 제어합니다.
이 명령어들이 있기에 단순히 계산만 하던 프로세서가 운영체제를 돌리고, 디버깅을 지원하며, 안전하게 데이터를 주고받는 시스템으로 기능할 수 있습니다.
'RISC-V > RISC-V 개념' 카테고리의 다른 글
| [RISC-V] RV32I ISA - Control Transfer (0) | 2026.03.10 |
|---|---|
| [RISC-V] RV32I ISA - Loads & Stores (0) | 2026.03.09 |
| [RISC-V] RV32I ISA - Computation (0) | 2026.03.08 |
| [RISC-V] RV32I ISA (0) | 2026.03.05 |
| [RISC-V] RV32I 레지스터 (0) | 2026.03.05 |