컴퓨터 구조론

[컴퓨터 구조론]8.Pipeline DataPath

myjeongjun 2025. 1. 6. 20:12

전체적인 DataPath가 어떻게 흘러가는지 설명해 보고자한다.

 

lw ,sub , and , or , add가 차례대로 들어오고 가정은 data hazard나 control hazard가 없다는 가정이다.

모든 instruction을 설명하기엔 복잡하니 lw instruction을 중심으로만 설명하도록 하겠다.

 

기본적인 pipeline Flow는 해당 명령어에서 필요할지도 모르는 값들은 전부 끌고가면서 각단계를 거친다.

좀더 자세하게 1번째 instruction이 IF - >ID로 갔을때 IF에 다음 Instruction이 들어와야하므로 1번째에서 필요한 값들은 무조건 다음단계로 가져가야한다.

 

IF 단계

초기상태는 어떤 instruction인지는 모르고 instruction에 해당하는 PC만을 가지고 있기때문에 아래에 instruction memory로 내려가서 어떤 instruction인지와 PC +4(branch instruction일 경우 target주소를 계산하기 위해)을 저장해둔다.

 

그렇게되면 fallling Edge가 되기전에 PC +4 , instruction을 모두 준비하게 되고 다음 단계로 넘어간다.

 

ID 단계

이 단계에선

1.미래의 EX,MEM,WB를 위한 control signal 생성

-> 여기서 한 가지 개념으로 speculation과 Look ahead의 차이를 말씀해주셨는데

speculation :미래에 필요할지 안할지는 모르겠으나 일단 만들고봄

look ahead :미래에 필요하니 미리 계산

정도의 차이라고 한다.

 

2.지정된 register 2개의 값 읽기

 

3.sign extend 값

 

4.PC +4 이 4종류가 준비를 마치게된다.

 

EX단계

ID - > EX로 넘어오면서 EX에 필요한 control signal은 더 이상 가져오지 않게된다.

이 단계에서는 연산을 통해 target adress등을 계산한다.

 

MEM단계

1.EX에서 계산된 target adress로 실제 메모리에 접근하여 값을 읽어온다.

2.ID -> MEM 과정에서 MEM control signal을 버린다.

이때 R-format같은 경우 메모리에 접근해서 읽어오는 형식이 아니므로 이단계에서 특별히 동작하지 않는다.

 

WB단계

WB에 멀티플렉서가 존재하는것을 볼 수있는데 이것은

 Load 명령어는 메모리에서 읽은 값을 WB 단계에서 레지스터에 저장한다. 반면 Add와 같은 명령어는 ALU에서 계산된 결과를 저장하기때문에 멀티플렉서는 ALU의 출력과 MEM에서 읽은 값을 비교하여, 어떤 값을 레지스터에 저장할지를 선택한다.

 

EX에서 계산한 target adress도 끝까지 끌고오고 해당 target adress에 값을 wrtie한다.