ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 과제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

Designed by Tistory.