엔지니어가 되고 싶은 공돌이
14. Data Hazard 본문
14. 1. Data Hazard
- Data Hazard가 발생하는 조건은 아래와 같습니다.
1) EX/MEM.RegisterRd = ID/EX.RegisterRs.
2) EX/MEM.RegisterRd = ID/EX.RegisterRt.
3) MEM/WB.RegisterRd = ID/EX.RegisterRs.
4) MEM/WB.RegisterRd = ID/EX.RegisterRt.
즉, 다음 명령어가 이전 명령어의 레지스터 값을 필요로 하는데, 아직 값을 받지 못해서 발생합니다.
- 위 문제를 빠르게 해결하기 위해서 Forwarding을 수행합니다.
Forwarding은 ALU에 Multiplexer와 적절한 Control을 붙여서 구현하며,
Forwarding은 EX 단계에서 수행됩니다.
- Forwarding 을 할지 여부를 결정하기 위해서 Operand Registers를 ID단계에서부터
ID/EX Pipeline Register를 통해 전달되어야 합니다.
- Forwarding을 수행해도, Stall이 필요한 경우가 발생합니다.
예를 들어 lw을 수행하고, 바로 다음 명령어에서 lw에서 write를 수행해야하는 register를 읽으려고 시도할 때 발생시켜야 합니다.
그러므로 Forwarding Unit 외에, Hazard Detection Unit이 필요합니다.
- Hazard Detection Unit은 ID단계에서 동작하며, lw Instruction만 검사를 하면 됩니다.
if ( ID/EX.MemRead and
(( ID/EX.RegisterRt = IF/ID.RegisterRs) or
( ID/EX.RegisterRt = IF/ID.RegisterRt )))
stall the pipeline
- nop: bubble or stall을 만드는 Instruction으로 Control Signal 전부를 0으로 만들면 됩니다.
'Computer Science > Computer Architecture' 카테고리의 다른 글
16. Exception and Interrupt (0) | 2025.05.05 |
---|---|
15. Control Hazard (0) | 2025.05.05 |
13. Pipelining Datapath (0) | 2025.05.05 |
12. Pipelining (0) | 2025.05.05 |
11. Datapath Including Controls (0) | 2025.05.05 |