엔지니어가 되고 싶은 공돌이

14. Data Hazard 본문

Computer Science/Computer Architecture

14. Data Hazard

Geca 2025. 5. 5. 17:07

 

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
Comments