파이프라인된 데이터 패스의 경우 각 단계를 분리하기 위한 파이프라인 레지스터가 존재한다.
- IF/ID : IF와ID 단계를 분리하는 레지스터
- ID/EX : ID와 EX 단계를 분리하는 레지스터
- EX/MEM: ID와 MEM 단계를 분리하는 레지스터
- MEM/WB: MEM과 WB 단계를 분리하는 레지스터
ld 명령어의 데이터 패스 예제
1. 명령어 인출 Instruction Fetch
PC에 저장된 주소를 이용하여 명령어를 메모리에서 읽어와 IF/ID 레지스터에 저장한다. PC 는 4만큼 증가하여 저장되고 이 값이 IF/ID에도 저장된다. beq와 같은 명령어 처럼 나중에 사용될 수 있기 때문이다.
2. 명령어 해독 Instruction Decode
Read register 1, 2 그리고 수치 값 ImmGen(64)이 증가한 PC 값과 같이 ID/EX 레지스터에 쓰인다.
3. 실행 또는 주소 계산 Execution
ID/EX 파이프라인 레지스터로 부터 레지스터 한 값과 수치 값(오프셋)을 읽어 주소를 계산한다. 계산 결과는 EX/MEM 레지스터에 저장된다.
4. 메모리 접근 Mem Access ~ 5. 쓰기 Mem Write
4. EX/MEM에 저장된 주소를 참조하여 메모리에서 데이터를 읽은 후 MEM/WB 레지스터에 저장한다.
5. MEM/WB 레지스터에서 값을 읽어 추후 다른 명령어의 입력으로 사용할 수 있도록 중앙 레지스터 파일에 쓴다.
sd 명령어의 데이터 패스 예제
1.명령어 인출 ~ 2. 명령어 해석
명령어 해석이후 처리 단계가 실행되기 전까지 어떤 명령어인 지 모르므로 모든 명령어는 1~2단계에서 동일한 데이터 패스를 가진다.
sd 명령어는 rs1, rs2, 즉치 값을 모두 사용하기 때문에 두 레지스터 번호를 읽어 해당 두 레지스터 값과 즉치 값, 총 3개의 64비트 값을 ID/EX에 가져온다. 이때 ID/EX에는 저장할 값과, 목적지 주소 및 오프셋이 있는 상황이다.
3. 실행 및 주소 계산
유효 주소를 계산하여 EX/MEM 파이프라인 레지스터에 저장한다. ID/EX에 저장된 저장할 데이터를 EX/MEM으로 전달한다.
4. 메모리 접근
해당 유효 주소의 메모리에 값을 쓴다. 추후 다른 명령어 종류에서 데이터를 다시 쓸 일은 없기 때문에 쓰기 단계에서는 아무 일도 하지 않는다.
참고 : Computer Organization and Design RISC-V edition
'Computer Science 기본 지식 > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] 9. 명령어 수준 병렬성 (0) | 2021.04.19 |
---|---|
[컴퓨터 구조] 8. 파이프 라인 해저드 (0) | 2021.04.19 |
[컴퓨터 구조] 6. 명령어 파이프라이닝 (0) | 2021.04.18 |
[컴퓨터 구조] 5. CPU 성능 측정 (0) | 2021.04.18 |
[컴퓨터 구조] 4. 명령어 실행 (0) | 2021.04.18 |