내용 소개
(개요)
이 문서에서는 UC 버클리에서 개발된 오픈 소스 명령 세트(ISA)[RISC-V]를 사용하여 CPU를 만드는 방법을 설명합니다. CPU와 컴퓨터 아키텍처의 구조를 설명한 후, 기본 정수 명령의 구현에서 CPU의 고속화로 활약하는 파이프 라인의 구현, 슈퍼 컴퓨터에서도 활약하는 벡터 확장 명령 (SIMD), 게다가 범용 CPU에서는 부하가 높은 처리를 보다 고속으로 실 이를 위해 CPU에 추가 할 수있는 커스텀 명령어를 구현할 수 있습니다. 확인은 실시하지 않고, 소프트웨어상에서 에뮬레이션을 골로 하고 있으므로, 소프트웨어 엔지니어에게도 설치하기 쉬워지고 있습니다
(이런 분에게 추천)
·소프트웨어 엔지니어로, CPU나 명령 세트등의 로우 레이어를 배우고 싶은 사람
·커스텀 CPU, DSA(Domain Specific Architecture)에 흥미가 있는 사람
(목차)
제1부 CPU 자작을 위한 기초 지식
제1장 CPU란 무엇인가
1-1 전자 회로가 논리를 표현할 수있는 이유
1-2 기본 논리 회로가 CPU를 실현할 수있는 이유
1-3 CPU 제조 공정
제 2 장 컴퓨터 아키텍처
2-1 메모리
2-2 컴퓨터의 기본 처리 흐름
제 3 장 하드웨어 설명 언어 Chisel의 기본
3-1 Chisel이란?
3-2 객체 지향이란?
3-3 Scala의 기본 문법
3-4 Chisel의 기본 문법
제2부 [간단한 CPU의 실장]
제4장 환경 구축
4-1 chisel-template 다운로드
4-2 Docker로 실행 환경 구축
4-3 명령 비트 열 및 상수 파일
4-4 제2부에서 구현하는 명령과 전체 Chisel 코드
제 5 장 명령 페치 구현
5-1 Chisel 코드 개요
5-2 Chisel 구현
제6장 ChiselTest에 의한 명령 페치 테스트
6-1 ChiselTest 설치
6-2 테스트 흐름
6-3 Chisel 테스트 코드 작성
6-4 메모리 용 hex 파일 만들기
6-5 printf를 활용한 디버그 신호의 출력
6-6 테스트 실행
6-7 Docker 컨테이너 commit
제 7 장 명령 디코더 구현
7-1 Chisel 구현
7-2 테스트 실행
제8장 LW 명령 구현
8-1 RISC-V의 LW 명령 정의
8-2 Chisel 구현
8-3 테스트 실행
제9장 SW 명령 구현
9-1 RISC-V의 SW 명령 정의
9-2 Chisel 구현
9-3 테스트 실행
제10장 가감산 명령의 구현
10-1 RISC-V의 가감산 명령 정의
10-2 Chisel 구현
제 11 장 논리 연산 구현
11-1 RISC-V의 논리 연산 명령 정의
11-2 Chisel 구현
제12장 디코더 강화
12-1 ALU용 디코드
12-2 MEM용 디코딩
12-3 WB 용 디코딩
제 13 장 시프트 연산 구현
13-1 RISC-V의 시프트 연산 명령 정의
13-2 Chisel 구현
제 14 장 비교 연산 구현
14-1 RISC-V의 비교 연산 명령 정의
14-2 Chisel 구현
제 15 장 분기 명령 구현
15-1 RISC-V의 분기 명령 정의
15-2 Chisel 구현
제16장 점프 명령 구현
16-1 RISC-V의 점프 명령 정의
16-2 Chisel 구현
제17장 즉치 로드 명령의 구현
17-1 RISC-V의 즉각적인로드 명령 정의
17-2 Chisel 구현
제 18 장 CSR 명령 구현
18-1 RISC-V CSR 명령어 정의
18-2 Chisel 구현
제19장 ECALL 구현
19-1 RISC-V의 ECALL 명령 정의
19-2 Chisel 구현
제20장 riscv-tests에 의한 시험
20-1 riscv-tests 빌드
20-2 ELF 파일을 BIN 파일로 변환
20-3 BIN 파일의 hex화
20-4 riscv-tests의 경로 조건
20-5 riscv-tests 실행
20-6 일괄 테스트 스크립트
제21장 C 프로그램을 움직여 보자
21-1 C 프로그램 작성
21-2 컴파일
21-3 링크
21-4 기계어의 hex화와 dump 파일의 생성
21-5 테스트 실행
제3부 파이프라인의 구현
제22장 파이프라인이란
22-1 파이프라인 처리의 의미
22-2 CPU 처리 파이프 라인화
22-3 제3부에서 완성하는 Chisel 코드
제 23 장 파이프 라인 레지스터 구현
23-1 레지스터 정의
23-2 IF 스테이지
23-3 ID 스테이지
23-4 EX 스테이지
23-5 MEM 스테이지
23-6 WB 스테이지
제24장 분기 위험 처리
24-1 분기 위험"이란
24-2 Chisel 구현
24-3 분기 위험 테스트
제 25 장 데이터 위험 처리
25-1 데이터 위험이란?
25-2 포워딩의 Chisel 구현
25-3 스톨의 Chisel 구현
25-4 데이터 위험 테스트
제 4 부 벡터 확장 명령 구현
제26장 벡터 명령이란
26-1 SIMD란?
26-2 기존 벡터 아키텍처
26-3 RISC-V의 벡터 명령과 SIMD 명령의 차이점
26-4 제4부에서 완성하는 Chisel 코드
제 27 장 VSETVLI 명령 구현
27-1 RISC-V의 VSETVLI 명령 정의
27-2 VTYPE
27-3 Chisel 구현
27-4 테스트 실행
제 28 장 벡터로드 명령 구현
28-1 unit-stride 형식의 벡터 로드 명령어 정의
28-2 Chisel 구현
28-3 테스트 실행
제 29 장 벡터 가산 명령 VADD.VV 구현
29-1 RISC-V의 VADD.VV 명령 정의
29-2 Chisel 구현
29-3 테스트 실행
제 30 장 벡터 스토어 명령 구현
30-1 unit-stride 형식의 벡터 저장소 명령 정의
30-2 Chisel 구현
30-3 테스트 실행
제5부 커스텀 명령의 구현
제31장 커스텀 명령의 의의
31-1 싱글 코어의 성능 향상과 한계
31-2 멀티 코어에 의한 병렬 처리의 효율화와 한계
31-3 DSA의 가능성
31-4 DSA와 RISC-V
제 32 장 포퓰레이션 카운트 명령 구현
32-1 포퓰레이션 카운트 명령이란?
32-2 커스텀 명령을 구현하지 않는 경우의 포퓰레이션 카운트 프로그램
32-3 커스텀 명령 용 컴파일러 (어셈블러) 구현
32-4 Chisel 구현
32-5 테스트 실행
부록 RISC-V의 가치