위 파이프라인이 적용된 데이터패스에서 lw 명령어의 경우를 살펴보자.
명령어가 실행되면(IF), IF/ID 레지스터는 명령어를 저장한다. 이때 프로세서는 아직 명령어가 무엇인지 모르기에 beq를 대비하여 PC+4를 저장한다.
ID 단계에서는 이제 데이터패스는 명령어가 lw임을 알게 된다
ID/EX 레지스터에는 ID 단계에서 생성된 데이터 세트(두 개의 32비트 데이터, 부호 확장된 immediate value, PC+4)가 저장된다.
EX 단계에서는 레지스터 1의 값과 부호 확장된 immediate value를 ID/EX 레지스터에서 읽어온다.
두 값은 ALU를 통해 대상 데이터 메모리 주소를 계산하고 EX/MEM 레지스터에 저장한다.
MEM 단계에서는 EX/MEM 레지스터에서 메모리 주소를 읽어와 데이터를 읽고, 읽혀진 데이터를 MEM/WB 레지스터에 저장한다.
WB 단계에서는 MEM/WB 레지스터에서 데이터를 읽어오고 그 데이터를 레지스터 파일에 기록한다.
sw 명령어의 경우에는,
IF단계와 ID 단계는 모든 명령어에서 같기에 생략한다.
EX 단계에서는 레지스터 1의 값과 부호 확장된 값을 읽어와 ALU를 사용해 메모리 주소를 계산하고, 계산한 메모리 주소와 레지스터 2의 값을 EX/MEM 레지스터에 저장한다.
MEM 단계에서는 EX/MEM 레지스터에서 주소와 레지스터2의 값을 읽어와서 주소에 레지스터2의 데이터를 기록한다.
WB 단계에서는 할 일이 없기에 아무 일도 일어나지 않는다. 다만, 아무 일도 안할 뿐 지나가긴 한다.
위 lw 명령어 과정에서는 버그가 발생할 수 있다.
WB 단계에서 쓰기 레지스터 번호는 ID 단계의 명령어가 제공한다.
따라서 매 단계에서 쓰기 레지스터 번호 또한 다음 레지스터로 넘겨주며 WB 단계에서 레지스터에서 꺼내 쓸 수 있도록 해줘야한다.
'학교강의필기장 > 컴퓨터구조' 카테고리의 다른 글
컴퓨터구조[17]: Data Hazard - Data Forwarding (0) | 2023.06.22 |
---|---|
컴퓨터구조[16]: control signals for pipelined datapath (0) | 2023.06.22 |
컴퓨터구조[14]: Pipelining (0) | 2023.06.22 |
컴퓨터구조[13]: Control Unit, Jump (0) | 2023.04.16 |
컴퓨터구조[12]: ALU Control Unit, Signal 정리 (0) | 2023.04.12 |