-
과제4 - 1번문제정리필요2 2008. 9. 1. 23:31
* 문제
1. 6장 강의자료 40쪽의 프로그램 코드를 대상으로 Forwarding이 作動하는 과정을 상세히 설명하세요.
p40 프로그램 코드
sub $2, $1, $3
and $4, $2, $5
or $4, $4, $2
add $9, $4, $2
첫번째 해저드
- EX 해저드 발생 상황 -
위 Clock 4 그림에서
sub $2, $1, $3 는 MEM stage에 있고 EX/MEM.RegisterRd 에 $2 값이 forwarding unit으로 들어간다.
뒤 따라오는 and $4, $2, $5 는 EX stage에 있고 ID/EX.RegisterRs 에 $2 값이 forwarding unit으로 들어간다.
또 EX/MEM의 WB 제어필드가 forwarding unit으로 들어간다.
이 때 forwarding unit 은 위에서 받은 세 개의 입력 값으로 아래와 같이 EX해저드를 검출한다.
- EX 해저드 검출 -
첫 째 - EX/MEM 의 WB 제어필드를 보고 RegWrite 신호가 인가되고,
둘 째 - EX/MEM.RegisterRd 값이 $0이 아니고,( $0 사용할 경우 0값 제공)
셋 째 - 입력받은 두 값(EX/MEM.RegisterRd 와 ID/EX.RegisterRs) 이 같으면,
- EX 해저드 검출 코드 -
if ( EX/MEM.RegWrite
and ( EX/MEM.RegisterRd != 0 )
and ( EX/MEM.RegisterRd = ID/EX.RegisterRs )
EX/MEM.RegisterRd = ID/EX.RegisterRs = $2 이고 나머지 조건도 만족한다.
- Forwarding -
forwarding unit 은 EX stage(ALU stage) 의 mux (전방전달 멀티플렉서) 에 10 이라는 제어신호를 보내
EX/MEM.RegisterRd 의 값이 ALU의 첫번째 값으로 들어간다.
즉 ALU의 첫번째 피연산자는 직전의 ALU 결과값이 전방전달되도록 한다
- 제어코드 -
ForwardingA = 10
두번째, 세번째 해저드
- MEM 해저드 발생 상황 -
위 Clock 5 그림에서
sub $2, $1, $3 는 WB stage에 있고 MEM/WB.RegisterRd 의 $2 값이 forwarding unit으로 들어간다.
두 단계 이전에 따라오는 or $4, $4, $2 는 EX stage에 있고 ID/EX.RegisterRt 의 $2 값이 forwarding unit으로 들어간다.
또 MEM/WB의 WB 제어필드가 forwarding unit으로 들어간다.
- EX 해저드 발생 상황 -
같은 Clock 5 그림에서
and $4, $2, $5
는 MEM stage에 있고 EX/MEM.RegisterRd 에 $4 값이 forwarding unit으로 들어간다.뒤 따라오는 or $4, $4, $2 는 EX stage에 있고 ID/EX.RegisterRs 의 $4 값이 forwarding unit으로 들어간다.
또 EX/MEM의 WB 제어필드가 forwarding unit으로 들어간다.
이 때 forwarding unit 은 여섯개의 위에서 받은 여섯개의 입력 값으로 아래와 같이 MEM해저드와 EX해저드를 동시에 검출한다.
- MEM 해저드 검출 -
첫 째 - EX/MEM 의 WB 제어필드를 보고 RegWrite 신호가 인가되고,
둘 째 - MEM/WB.RegisterRd 값이 $0 이 아니고,( $0 사용할 경우 0값 제공)
셋 째 - EX/MEM.RegisterRd 값이 ID/EX.RegisterRt 값과 다르고, (WB단계 와 MEM 단계의 rd가 같다면 최신인 WB단계의 rd값 우선)
넷 째 - 입력받은 두 값(MEM/WB.RegisterRd 와 ID/EX.RegisterRt ) 이 같다면
- MEM 해저드 검출 코드 -
if ( EX/MEM.RegWrite
and ( EX/MEM.RegisterRd != 0 )
and ( EX/MEM.RegisterRd != ID/EX.RegisterRt )
and ( MEM/WB.RegisterRd = ID/EX.RegisterRt )
MEM/WB.RegisterRd = ID/EX.RegisterRt = $2 이고 나머지 조건도 만족한다.
- EX 해저드 검출 -
첫 째 - EX/MEM 의 WB 제어필드를 보고 RegWrite 신호가 인가되고,
둘 째 - EX/MEM.RegisterRd 값이 $0이 아니고,( $0 사용할 경우 0값 제공)
셋 째 - 입력받은 두 값(EX/MEM.RegisterRd 와 ID/EX.RegisterRs) 이 같으면,
검출 코드
if ( EX/MEM.RegWrite
and ( EX/MEM.RegisterRd != 0 )
and ( EX/MEM.RegisterRd = ID/EX.RegisterRs )
EX/MEM.RegisterRd = ID/EX.RegisterRs = $4 이고 나머지 조건도 만족한다.
- Forwarding -
MEM 해저드 :
forwarding unit 은 EX stage(ALU stage) 의 두번째 mux (전방전달 멀티플렉서) 에 01 이라는 제어신호를 보내
MEM/WB.RegisterRd 의 값이 ALU의 두번째 피연산자로 들어간다.
즉 ALU의 두번째 피연산자($2)는 메모리 혹은 이전의 ALU결과 값이 전방 전달 된 것이다.
제어코드
ForwardingB = 01
EX 해저드 :
forwarding unit 은 EX stage(ALU stage) 의 첫번째 mux (전방전달 멀티플렉서) 에 10 이라는 제어신호를 보내
EX/MEM.RegisterRd 의 값이 ALU의 첫번째 피연산자로 들어간다.
즉 ALU의 첫번째 피연산자($4)는 직전의 ALU 결과값이 전방 전달된 것이다.
제어코드
ForwardingA = 10
네번째 해저드
- MEM 해저드 발생 상황 -
위 Clock 6 그림에서
and $4, $2, $5 는 WB stage에 있고 MEM/WB.RegisterRd 의 $4 값이 forwarding unit으로 들어간다.
두 단계 이전에 따라오는 add $9, $4, $2 는 EX stage에 있고 ID/EX.RegisterRs 의 $4 값이 forwarding unit으로 들어간다.
또 MEM/WB의 WB 제어필드가 forwarding unit으로 들어간다.
- EX 해저드 발생 상황 -
같은 Clock 6 그림에서
or $4, $4, $2
는 MEM stage에 있고 EX/MEM.RegisterRd 에 $4 값이 forwarding unit으로 들어간다.뒤 따라오는 add $9, $4, $2 는 EX stage에 있고 ID/EX.RegisterRs 의 $4 값이 forwarding unit으로 들어간다.
또 EX/MEM의 WB 제어필드가 forwarding unit으로 들어간다.
이 때 forwarding unit 은 여섯개의 위에서 받은 여섯개의 입력 값으로 아래와 같이 MEM해저드와 EX해저드를 동시에 검출한다.
- MEM 해저드 검출 -
첫 째 - EX/MEM 의 WB 제어필드를 보고 RegWrite 신호가 인가되고,
둘 째 - MEM/WB.RegisterRd 값이 $0 이 아니고,( $0 사용할 경우 0값 제공)
셋 째 - EX/MEM.RegisterRd 값이 ID/EX.RegisterRs 값과 다르고, (WB단계 와 MEM 단계의 rd가 같다면 최신인 WB단계의 rd값 우선)
넷 째 - 입력받은 두 값(MEM/WB.RegisterRd 와 ID/EX.RegisterRs ) 이 같다면
- MEM 해저드 검출 코드 -
if ( EX/MEM.RegWrite
and ( EX/MEM.RegisterRd != 0 )
and ( EX/MEM.RegisterRd != ID/EX.RegisterRt )
and ( MEM/WB.RegisterRd = ID/EX.RegisterRt )
MEMWB.RegisterRd = ID/EX.RegisterRs = $4 이나
EX/MEM.RegisterRd = ID/EX.RegisterRs = $4 이므로 MEM 해저드가 아니다.
- EX 해저드 검출 -
첫 째 - EX/MEM 의 WB 제어필드를 보고 RegWrite 신호가 인가되고,
둘 째 - EX/MEM.RegisterRd 값이 $0이 아니고,( $0 사용할 경우 0값 제공)
셋 째 - 입력받은 두 값(EX/MEM.RegisterRd 와 ID/EX.RegisterRs) 이 같으면,
검출 코드
if ( EX/MEM.RegWrite
and ( EX/MEM.RegisterRd != 0 )
and ( EX/MEM.RegisterRd = ID/EX.RegisterRs )
EX/MEM.RegisterRd = ID/EX.RegisterRs = $4 이고 나머지 조건도 만족한다.
- Forwarding -
EX 해저드 :
forwarding unit 은 EX stage(ALU stage) 의 첫번째 mux (전방전달 멀티플렉서) 에 10 이라는 제어신호를 보내
EX/MEM.RegisterRd 의 값이 ALU의 첫번째 피연산자로 들어간다.
즉 ALU의 첫번째 피연산자($4)는 직전의 ALU 결과값이 전방 전달된 것이다.
제어코드
ForwardingA = 10