컴퓨터 구조 및 설계 - Pipeline Datapath, Control

govlKH·2024년 2월 12일
0

컴퓨터구조 및 설계

목록 보기
11/15

Pipeline Datapath

저번 포스터에서 아래와 같이 파이프라이닝을 함으로 빠른 진행을 할 수 있었음을 확인했다.
5개의 instruction이 각기 다른 stage에 동시에 머무를 수 있었다.

이 때 다섯 가지의 stage로 나누었는데, 각각의 다른 하드웨어를 사용한다.
주의할 점은 서로 섞이지 않도록 수직선을 기준으로 각기 다른 데이터들이 구분되어야 한다.

그렇기에 아래와 같이 IF/ID, ID/EX 로 나누어 주는 구간을 표기할 수 있다.

하지만 이렇게 되면 제대로 된 Pipelining을 구성할 수 없다. 그 이유를 한 번 살펴보자.
lw시 마지막에 WB부분에서 Write Data에 저장을 할 텐데, 여기서 어디에 저장해야 하는 지 주소가 필요하다! 하지만 현재 WB까지 오는 동안에 이미 다른 명령어가 위치해 버렸기에 올바른 곳에 저장할 수 없게 되는 것이다.

따라서 이를 해결하기 위해 어디에 저장해야 할 지 아래와 같이 노란 선을 따라 target주소를 계속 넘겨주며 이를 해결한다.


Pipeline Control

이제는 전체적인 틀과 흐름을 살펴보았다면 Control 부분을 살펴보자!

아래의 노란 부분이 제어하기 위한 controler부분이다.

어려운 점을 한 번 생각해 보자. 이제는 같은 명령어라도 어떤 clock cycle인지에 따라 제어 신호가 달라져야 한다. 또한 다섯 개의 명령에 따른 제어 신호를 공급해야 한다는 점이다.

Multiple에서는 시간에 따라 하나씩 할당해 주면 되었기에 편했지만, 이제는 동시적으로 일어나기에 잘 고려해야 한다.

파이프라이닝에서는 IF와 ID에서는 control이 따로 필요하지 않는다.
이 이후로는 다양한 제어 신호에 따라 정해줘야 한다.

Q. 그렇다면 어떻게 각 stage의 각기 다른 명령에 따라 적합한 제어신호를 공급할 수 있을까?
예를 들어 자동차를 만들기 위해 1)버퍼, 2)문, 3)페인트, 4)헤드라이트 를 붙인다고 하자.
이 때, 들어오는 명령어는 각자의 취향에 맞는 명령이 들어올 것이다.
(ex) 큰 버퍼와 문, 빨간 페인트, LED 헤드라이트 등)

이럴 경우 작업자에게 각기 다른 명령어를 직접 주는 것이 아니라, 부품에 포스트잇과 같은 list를 적어 보내는 것이다. 따라서 버퍼에 왔으면 해당하는 작업을 수행하고 포스트잇을 떼어 버린다. 이렇게 진행이 된다.

=> 이와 같이 중앙에 제어자가 없이 단순히 초반에 보낼 때, 리스트만 건내주면 되는 것이다.

이를 그대로 Pipelining에 적용시켜주면 된다.
Fetch가 되어 IF/ID에서 instruction이 들어오고, 이를 단순 조합회로 Control에서 각 IF,ID,EX,MEM,WR에서 사용할 제어 신호들을 한 꺼번에 생성한다.

이를 기준으로 각 stage에 도착하고 쓰고 버리고를 반복하며 진행된다.

profile
수학과 대학원생. 한 걸음씩 꾸준히

0개의 댓글