들어가기 전에,,
- 데이터패스를 5개씩 분리해서 하나씩 clock cycle 부여해서 명령어가 돌아가게 했음
- 각 부분은 명령어 실행 단계에 따라서 다음과 같이 이름이 붙여진다.IF 명령어 인출
ID 명령어 해독 및 레지스터 파일 읽기 EX 실행 또는 주소 계산 MEM 데이터 메모리 접근 WB 쓰기 (Write-back)
- 동일한 시간에 동일하게 끝내게 하는 게 파이프라인이었다.
앞서 보았듯이 일반적으로 정보 흐름은 왼쪽에서 오른쪽으로 진행된다. 하지만 이 흐름 중 두 가지 예외가 있다.
- WB 단계: 결과를 Reg파일에 쓰기 (역류) ⇒ 데이터 해저드 유발
- PC의 다음 값 설정: 증가된 PC값과 MEM 단계의 분기 주소 중에서 선택 ⇒ 제어 해저드 유발
📌lw Instruction Stage
이제부턴 색칠이 된 것과 안 된 것의 구분이 생김
입력부: 외부에 있는 게 들어오면 비활성화
출력부: 메모리 안에 있는 것이 밖으로 나간다.
1️⃣IF Stage
Mux, PC, Adder, Instruction memory 활성화
* PC는 다 칠해져있어야 함! (사진 오류)
첫 번째 stage에서는 컴퓨터가 어떤 명령어인지 판단할 수 없음
2️⃣ID Stage
Register의 Read data1, 2, Sign-extend 활성화
Register 뒷 부분에 파이프라인의 색깔이 칠해진 걸 볼 수 있다.
이는 명령어가 read되고 밖으로 나간다는 의미.
IDEX의 레지스터에 rs값, rt 값, 확장된 32비트 값, PC+4 가 들어가게 된다.
3️⃣EX Stage
Mux, ALU 활성화
ALU 값은 유효 메모리 주소이다.
세 번째 stage까지 가야 이제 어떤 명령어 인지 판단 가능
4️⃣MEM Stage
Data Memory, Read data 활성화
ex에서 값이 나가서 데이터 메모리에 접근하고 값을 내보내니까 뒷 부분에 색칠이 칠해져 있다.
R 타입을 위한 별도의 ALU 결과값이 나가는 거 확인하기
5️⃣WB Stage
Mux와 Register의 Write Reg, data 활성화 ⇒ 데이터 해저드 유발
문제가 발생한다
lw $1, 200($zero)라고 했을 때
$1가 목적지이다.
sub 를 실행할 때 $1의 값이 들어갈 수 있다.
선을 끊어버림
별도의 선을 하나 뽑아서 보낸다.
그러면 $1값이 보내져서 다시 집어넣으면 되는 것이다.
원래의 목적지로 갈 수 있게끔 선을 연결하는 것이다.
📌sw도 비슷하다.
하지만, MEM 단계에서 Data Memory의 왼쪽 부분만 작동한다. (WB 단계에선 수행하는 것 없음)
📌파이프라인 제어
: 단일 방식에서는 10개의 신호를 동시에 발사했지만, 파이프라인 도입으로 인해 이제는 부분별로 제어신호를 발사해야 한다.
IF 제어 신호 없음 (항상 같은 작업 수행하기 때문에 필요 없다.)
ID | 제어 신호 필요 없음 (이하 동일) |
EX | RegDst (rt, rd 구분), ALUOp(수행 연산 종류), ALUSrc(Read data 2, extended 16 bit 중 어느걸 피연산자?) |
MEM | Branch(beq), MemRead(lw), MemWrite(sw) |
WB | MemtoReg, RegWrite (rw, lw 일 때만 활성화) |
파이프라인 데이터 패스에 제어를 추가하였다.
첫 번째 단계는 기존 데이터패스의 제어선에 레이블을 붙이는 것이다.
단일 사이클 구현에서와 같이 매 클럭 사이클마다 PC에 쓰기가 행해지며, 따라서 PC를 위한 쓰기 신호는 따로 없다고 가정한다.
(같은 논리로 파이프라인 레지스터들을 위한 쓰기 신호도 따로 없다.)
파이프라인을 위한 제어를 명시하기 위해서는 각 파이프라인 단계 동안의 제어 값들을 정하기만 하면 된다.
각 단계에서 명령어에 따라 각 제어신호들에게 내보내주는 신호
파이프라인 레지스터를 통한 제어신호의 전달
: 제어 신호가 EX → MEM → WB 거치면서 각자에 필요한 정보는 쓰고 나머지는 다음 거에 전달하는 방식
완성된 MIPS 파이프라인
'2-2 학기 > Computer Organization' 카테고리의 다른 글
[컴퓨터구조] Lec19 Control Hazards (0) | 2023.12.19 |
---|---|
[컴퓨터구조] Lec17, Lec18 Data Hazards (0) | 2023.12.19 |
[컴퓨터구조] Lec15 Pipelining (1) | 2023.11.01 |
[컴퓨터구조] Lec12 Datapath Design (0) | 2023.10.30 |
[컴퓨터구조] Lec10 Floating Point (1) | 2023.10.30 |