본 교재는 2010년부터 개발이 시작된 RISC-V를 중심으로 집필하였습니다. RISC-V 명령어는 구조가 간단하고 규칙적이며, 그 수가 적어 학부생들도 CPU를 직접 설계하는 체험적 학습을 할 수 있습니다. RISC-V ISA는 open architecture로 사용료가 없어 상업적으로 좀 더 쉽게 시장을 넓혀가고 있습니다. 현재 SiFive, Hex Five, SemiFive, StarFive 등의 회사에서 RISC-V 비즈니스를 하고 있으며, 과거 MIPS를 설계하던 MIPS Technologies라는 회사도 RISC-V 개발로 방향을 선회하였습니다. 본 교재는 RISC-V 하드웨어 시스템을 제공하여, 학습자가 RISC-V CPU 설계에 집중하도록 돕습니다. 그리고 본인이 설계한 CPU의 동작을 실제 시스템에서 눈으로 확인하고자 하는 독자를 위해, DE0 FPGA 보드에서 실험할 수 있는 환경도 소개합니다.
본 교재의 집필 방향은 개념을 명확하고 간결하게 설명하여 모호한 부분이 없도록 하는 것입니다. 그리고 컴퓨터에 대한 실용적이고 실무적인 감각을 키워주는 것입니다. 3장에서는 C 코드와 RISC-V 명령어와의 관계를 설명하였고, 4장에서는 RISC-V CPU 설계에 필요한 디지털 로직 모듈을 설명하였습니다. 5장에서는 single-cycle CPU와 pipelined CPU를 구조도와 함께 자세히 설명하였습니다. 7장 캐시(cache) 단원에서는 요즘 거의 모든 프로세서에 포함된 멀티레벨(multi-level) 캐시에 대한 자세한 내용을 다루었고, 9장에서는 cache coherence protocol을 병렬 프로그램의 예와 함께 설명하였습니다.
CHAPTER 1 컴퓨터 개요 및 기본기
1.1 컴퓨터 하드웨어 구성
1.2 컴퓨터의 분류
1.3 CPU의 종류
1.4 2진수, 16진수
1.5 KB = 1000-byte? 1024-byte?
1.6 메모리 접근 단위
1.7 고급언어 vs 저급언어
1.8 컴퓨터의 기본 구조 및 동작
1.9 컴퓨터는 처음에 어디에서 무엇을 실행할까?
1.10 RISC vs CISC
1.11 32-bit, 64-bit 아키텍쳐?
1.12 2의 보수 그리고 정수의 덧셈, 뺄셈
1.13 Signed 정수, Unsigned 정수, 그리고 컴퓨터에서 표현할 수 있는 정수의 한계
1.14 CPU에서 정수의 대소비교는 어떻게 할까?
1.14.1 N-flag 설정
1.14.2 Z-flag 설정
1.14.3 C-flag 설정
1.14.4 V-flag 설정
1.15 컴퓨터의 계층구조
CHAPTER 2 RISC-V 하드웨어 및 소프트웨어 실습환경
2.1 DE0 보드 소개
2.2 RISC-V Cross-Compiler 환경 설정
2.2.1 JRE 설치
2.2.2 Cygwin 설치와 Windows 환경 설정
2.2.3 RISC-V cross-compiler 설치
2.2.4 Eclipse 설치 및 cross-compilation
2.3 하드웨어 설계 및 합성 환경
2.4 하드웨어 시뮬레이션 환경
CHAPTER 3 RISC-V 명령어
3.1 RISC-V 개요 및 명령어 체계
3.2 RV32I 데이터처리 명령어
3.2.1 산술명령어
3.2.2 논리 명령어
3.2.3 Shift 명령어
3.2.4 비교 명령어
3.3 RV32I 메모리접근 명령어
3.4 RV32I 분기 명령어
3.4.1 조건에 따른 분기 명령어
3.4.2 무조건 분기 명령어
3.5 Pseudo 명령어
CHAPTER 4 CPU 설계를 위한 하드웨어
4.1 조합회로
4.1.1 Concatenation & Replication
4.1.2 멀티플렉서
4.1.3 디코더
4.1.4 가산기와 감산기
4.1.5 ALU
4.2 순차회로
4.2.1 클럭
4.2.2 플립플롭
4.2.3 레지스터 파일
CHAPTER 5 32-bit RISC-V CPU 설계
5.1 Single-cycle CPU 설계
5.1.1 Instruction Fetch 로직 설계
5.1.2 Decoding 로직 설계
5.1.3 Execution 로직 설계
5.2 Pipelined CPU 설계
5.2.1 Structural Hazard
5.2.2 Data Hazard 및 해결 방법
5.2.3 Control Hazard 및 해결 방법
5.2.4 성능
CHAPTER 6 I/O 장치, 익셉션 및 인터럽트
6.1 I/O 장치와 메모리맵
6.1.1 Memory-mapped I/O
6.1.2 I/O-mapped I/O
6.2 익셉션과 인터럽트
6.3 32-bit RISC-V에서 익셉션과 인터럽트
CHAPTER 7 캐시
7.1 주기억장치
7.2 지역성과 캐시
7.3 캐시의 구조
7.3.1 Direct-mapped cache
7.3.2 Set-associative cache
7.3.3 Fully-associative cache
7.4 Multi-level 캐시
7.5 소프트웨어의 역할
CHAPTER 8 가상메모리와 TLB
8.1 가상메모리 개념
8.2 Translation Lookaside Buffer
8.2.1 Direct-mapped TLB
8.2.2 Set-associative TLB
8.2.3 Fully-associative TLB
8.3 32-bit RISC-V에서 가상메모리 구현
8.4 Cache와 TLB
CHAPTER 9 멀티코어 프로세서
9.1 멀티코어 프로세서 구조 및 병렬 프로그래밍
9.2 캐시일관성 규약