오래 못 할 짓 하지 않기

[ 컴퓨터 구조 ] 16. (Hazard) Flushing logic 본문

2학년 2학기/컴퓨터 구조

[ 컴퓨터 구조 ] 16. (Hazard) Flushing logic

쫑알bot 2023. 7. 11. 11:51
728x90

 

 

Flushing logic 이 필요한 이유

: Control Hazard가 발생했을 때,

= (Branch 명령어 O 이고 조건도 되었을 때,  조건이 되기까지 같이 실행되고 있었던 애들이 날아가는 거 ) 

→ 아래 사진으로 보면, 40번 명령어 beq가 4번째 CLK일 때 Branch가 되는 건데, 4번째 CLK이 될 때까지 실행된 and, or, add 명령어는 flush 되고 72번 명령어가 실행되어야 한다.

 

 

따라서 Branch 가 일어났을 때 , 실행했던 몇 개의 명령어가 날아가는 손실을 막기 위해 

[ Branch Optimization ]을 한다. 

이는 Branch를 하는지 하지 않는지 판단하는 게 EX 와 MEM stage에 있는데 이걸 ID stage로 옮기는 것이다.

그럼 손실은 IF단에 있는 명령어 1개만!

 

 

 

Hazard Detection Unit에 Flush 시키는 신호를 만들어준다.

지금까지는 Stall 로 멈추는 느낌이었다면 이번에는 Flush로 사라지게 하는 거라고 생각하면 된다.

 

 


 

(예시)

위와 같은 경우에는 beq명령어가 조건을 충족하는지 ID단에서 판단할 수 있다.

충족한다면, IF단에 있는 and 명령어만 Hazard detection unit을 control하여  Flush 시키면 된다.

 


Exception Handling 

지금까지 IF단만 Flush 하면 됐는데 Exception Handling에서는 추가적으로 더 Flush 해야 한다.

 

각 Stage마다 감지할 수 있는 Exception 

  • ID : Undefined instruction
  • EX : Overflow , Invoking Operating System

n번째 stage가 flush 될 때는 , IF 단 ~ n번째 stage까지 다 Flush 함.

 

 

(예시)

N번째 CLK
N+1번째 CLK

Overflow exception을 Handling 하기 위한 routine 

→  sw 25,1000($0)   이 주소는 Exception Program Count(EPC)에 저장되어 있음

 

 

만들어진 결과!

 

 

출처 : 한동대 SW 중심대학