본문 바로가기

컴퓨터 구조론( MIPS )

프로세서 6 - 파이프라인 데이터 패스 및 제어

728x90
반응형

안녕하세요. WH 입니다. 한 몇 일동안 컴퓨터 구조론에 대해 올리고 있는 데

얼른 올리고 다른 것도 올리겠습니다.

 

review

  저번 글에서 명령어를 5 단계로 나눴죠? 이는 파이프라인이 5 단계라는 것을 의미합니다. 이는 한 클럭 사이클에 최대 5개의 명령어가 실행 중 일수 있다는 것을 의미하죠. 

 

그렇다면 한 클럭 사이클에 최대 5개의 명령어가 실행된다면,

데이터 패스 역시 5 부분으로 나눌 수 있겠네요?

그 5 부분 역시 각각의 이름이 붙습니다.

명령어 실행 단계 이름

1. IF ( Instruction fetch ) : 명령어 인출

2. ID ( Instruction decode / register file read ) : 명령어 해독 및 레지스터 파일 읽기

3. EX (Execution / address calculation ) : 실행 or 주소 계산

4. MEM ( memory access ) : 데이터 메모리 접근

5. WB ( write back ) : 쓰기

 

 이 5 가지의 단계는 데이터패스를 그리는 방법에 대략 맞아 들어갑니다. 명령어와 데이터는 실행되면서 다섯 단계를 왼쪽에서 오른쪽으로 움직여 가죠. 그런데 이 흐름에 2 가지 예외가 있습니다.

 

1. WB 단계 -> 이 단계에서 결과를 데이터패스의 중앙에 있는 레지스터 파일에 쓰기 때문에 예외입니다.

2. OC 다음 값 선정 : 증가된 PC 값과 MEM 단계의 분기 주소 중에 고르기 때문에 예외입니다.

 

  파이프라인 실행에서 일어나는 일을 보여 주는 한 가지 방법은 각 명령어가 자신의 데이터 패스를 가지고 있는 것처럼 하고, 이들을 시간 축에 배치하여 그들 사이의 관계를 보여주는 겁니다. 마치 아래 그림처럼 말이죠.

  위의 그림은 마치 세 개 명령어가 세개의 데이터 패스를 필요로 한다고 말하는 것처럼 보입니다. 그 대신 위의 그림에서는 데이터를 유지하는 레지스터를 추가하여 한 데이터 패스의 부분 부분이 명령어 실행 동안 공유 될 수 있게 했을 뿐이죠.  그니까 조금 더 자세히 설명해 보자면 IM ( 명령어 메모리 )는 명령어의 다섯 단계중 한 단계에서만 사용합니다.  
때문에 이 명령어가 다른 네 단계에 있는 동안에 명령어 메모리는 다른 명령어가 사용할 수 있겠죠?? 그럼 다른 네 단계 동안에도 각 명령어의 값을 유지하기 위해 명령어 메모리에서 읽어 들인 값을 레지스터에 저장해야 겠네요?? 음 그렇다면 위에서 데이터 패스에 나눠 놓은 부분에 레지스터가 들어가면 되겠군요.

 

  바로 이렇게 말이에요. IF와 ID 사이에 있는 파이프라인 레지스터는 IF/ID 라고 부른답니다. 간단하죠? MEM/WB 는? MEM 단계와 WB 단계 사이의 파이프라인 레지스터 겠네요. 파이프라인 레지스터는 뭘 하는 걸까요? 파이프라인 단계를 분리하는 역할과 후속 파이프라인 단계에 필요한 정보를 필요단계까지 전달하는 역할을 한답니다.

반응형

예시를 통한 이해 : 적재 ( lw ) 명령어

  가장 먼저 lw 명령어가 데이터 패스에서 사용하는 부분들을 나타낸 그림입니다. 그 다음 단계 별로 사용하는 영역을 표시하도록 하겠습니다. 보면서 천천히 아 이렇구나 하시면 될 것 같아요.

 

 IF 단계 ( instruction fetch )

ID 단계 ( Instruction decode ) 

EX 단계 ( excution )

MEM 단계 ( memory access ) 

WB 단계( wrtie back ) 

단계별 수행과정

 1. IF 단계 : MUX, PC, Addr, Instruction Memory 활성화

 2. ID 단계 : register의 Read data 1, 2, Sign-extend 활성화

 3. EX 단계 : MUX, ALU 활성화

 4. MEM 단계 : Data Memory, Read data 활성화

 5. WB 단계 : MUX와 Register의 Write Reg, data 활성화 -> 데이터 해저드 유발

 

파이프라인 제어

  파이프라인 데이터 패스에 제어를 추가할 수 있는데요. 명령어가 5 그룹으로 나눠졌으니 그룹 별로 제어할 신호만 정해주면 되겠네요! 어렵지 않네요 그럼 해봅시다.

 

 1. IF : 명령어 메모리를 읽고 PC값을 쓰는 신호는 항상 인가되니까, 제어신호가 따로 없네요

 2. ID : 매 클럭 사이클마다 같은 일이 일어나니까( 읽는 것 ) 뭐 여기도 제어신호가 따로 없어요.

 3. EX : 여기 실행 부분에 우선 ResDst ( rt, rd 구분해 줘야겠고 ) , ALUOp( 연산 종류를 결정해야하고 ), ALUSrc( Read data2, extended 16bit 중에 연결할 데이터 골라주면 ) 이렇게 제어하면 되겠네요

 4. MEM : Branch ( beq 제어해주면 되고 ), MemRead( 적재때 필요할거고 ), MemWrite( 저장 때 필요하겠네요 )  

 5. WB : MemtoReg( 레지스터파일로 보내야되고 ), RegWrite( 레지스터 쓰기 활성화 해야겠네요 )

 

으.. 눈에 들어오질 않아요, 그래서 표로 정리해보겠습니다.

이제까지 말은 안했지만, X는 그냥 사용하지 않는다는 거 알고 계시죠? 안쓰는거랑 아예 사용하지 않는다는 것은 느낌이 다르니까요. 그럼 전달 방식은 어떻게 될까요? 제어 신호는 EX -> MEM -> WB 거치면서 각자에 필요한 정보는 쓰고 나머지는 다음으로 전달하는 방식으로 전달이 된답니다.

 

여러분 다왔어요. 이제 완전한 파이프라인에 대해 봐야겠네요. 여기까지 오느라 정말 고생 많으셨습니다.

 

쉽지가 않네요. 그쵸? 다음 글부터는 아마도 가장 많이 일어나는 데이트 해저드에 대해 알아보도록 하겠습니다.

 다른 해저드는 글쎄요.. 생각좀 해보겠습니다. 이상 WH였습니다. 감사합니다

 

728x90
반응형