오늘 끝나면
멀티사이클 CPU와 마이크로코드
- ✓멀티사이클 CPU와 마이크로코드의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 멀티사이클이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
한 명령을 여러 상태로 — microcode table 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
반도체 설계 · 35
멀티사이클 CPU와
마이크로코드
싱글사이클은 가장 느린 명령에 클럭을 맞춰야 한다.
멀티사이클은 한 명령을 짧은 상태 여러 개로 쪼갠다. 그리고 필요한 단계만 쓴다.
각 명령을 micro-op 표로 적은 것이 마이크로코드다.
싱글사이클의 한계, 제일 느린 명령이 클럭을 정한다
싱글사이클은 어떤 명령이든 한 클럭에 끝낸다. 깔끔해 보이지만 함정이 있다.
명령마다 거치는 회로 길이가 다르다.
ADD는 레지스터를 읽고 ALU를 한 번 거치면 끝난다.
LOAD는 주소를 계산한 뒤 메모리까지 다녀와야 해서 훨씬 오래 걸린다.
한 클럭에 다 끝내려면 클럭 주기를 제일 느린 명령에 맞춰야 한다.
그러면 빠른 ADD도 느린 LOAD 시간만큼 칸에서 놀다 간다.
빠른 명령이 아무리 많아도 전체 클럭은 느리다. 회로도 명령 종류마다 따로 깔려 낭비된다.
멀티사이클, 한 명령을 짧은 상태 여러 개로 쪼갠다
멀티사이클은 발상을 뒤집는다. 한 명령을 한 칸에 욱여넣지 않는다.
명령 처리를 짧은 단계로 나눈다. 인출(IF), 해석(ID), 실행(EX), 메모리(MEM), 기록(WB) 순이다.
한 클럭에 한 단계만 한다. 그래서 클럭 주기를 짧게 잡을 수 있다. 제일 긴 회로가 아니라 제일 긴 단계에만 맞추면 된다.
핵심은 명령마다 필요한 단계만 쓴다는 것이다.
ADD는 MEM 단계가 필요 없으니 건너뛴다. 4단계면 끝난다.
LOAD만 5단계를 다 거친다. 짧은 명령은 짧게 끝나니 평균이 빨라진다.
게다가 ALU나 메모리 같은 회로를 단계마다 돌려 쓰니 부품도 덜 든다.
ADD는 MEM이 필요 없어 건너뛰니 4단계면 끝난다
마이크로코드, 명령을 micro-op 표로 적는다
각 명령이 단계마다 무슨 신호를 켜는지 적은 표가 마이크로코드다.
한 명령은 micro-operation 여러 줄로 풀린다.
한 줄(micro-op)은 그 상태에서 켤 제어 신호의 묶음이다. 어느 레지스터를 읽고, ALU에 무슨 연산을 시키고, 어디에 쓸지를 담는다.
제어부를 회로로 일일이 깎는 대신, 이 표를 작은 ROM에 담아둔다. 이것을 마이크로코드라 한다.
상태가 바뀔 때마다 표의 다음 줄을 읽어 신호를 내보낸다. 명령을 바꾸거나 고치려면 표만 갈면 되니 유연하다.
대신 표가 길고 상태 전이가 많아져 제어가 복잡해진다. 유연함의 대가다.
| 상태 | micro-op | 켜는 신호 |
|---|---|---|
| IF | MEM[PC] → IR | MemRead, IRwrite |
| ID | RegRead rs,rt | RegRead |
| EX | ALU: rs + rt | ALUop=ADD |
| WB | result → rd | RegWrite |
직접 micro-op 표를 짜고 단계별로 돌린다
16비트 CPU와 8 레지스터로 명령을 골라 micro-op 표를 한 단계씩 실행한다.
명령이 몇 단계에 끝날지 먼저 예측한 뒤 STEP으로 micro-op를 한 줄씩 실행한다.
단계마다 어느 신호가 켜지고 레지스터와 PC가 어떻게 바뀌는지는 근거 패널에 나온다.
ADD는 MEM을 건너뛰어 빨리 끝나고, LOAD는 5단계를 다 쓴다. 명령마다 길이가 다르다.
이 micro-op 표 구성이 최종 MyChip의 제어부로 들어간다.
ADD R3, R1, R2
R1+R2를 R3에
명령을 고르고 STEP을 눌러 micro-op를 한 줄씩 실행해 본다. 이 micro-op 표 구성이 최종 MyChip의 제어부로 들어간다.
유연함과 복잡함의 맞교환
멀티사이클과 마이크로코드는 공짜가 아니다. 얻는 것과 잃는 것이 분명하다.
얻는 것을 보자. 짧은 명령은 짧게 끝나 평균이 빨라진다. ALU와 메모리를 돌려 써서 회로가 작아진다.
명령을 표로 적으니 새 명령 추가나 버그 수정이 표 수정으로 끝난다. 실리콘을 다시 깎지 않아도 된다.
잃는 것도 있다. 명령 하나에 여러 클럭이 든다. 상태기계와 micro-op ROM 때문에 제어부가 복잡해진다.
그래서 단순하고 고정된 명령에는 배선 제어가, 복잡하고 가변적인 명령에는 마이크로코드가 유리하다. 정답은 명령 집합에 달려 있다.
Q. 멀티사이클이 싱글사이클보다 빠를 수 있는 이유는?
정답은 명령마다 필요한 단계만 써서 짧은 명령은 빨리 끝나기 때문이다.싱글사이클은 클럭을 제일 느린 명령(LOAD)에 맞춰서 빠른 ADD도 그 시간을 다 기다린다.
멀티사이클은 ADD가 MEM 단계를 건너뛰어 4단계에 끝나고 LOAD만 5단계를 쓴다. 짧은 명령이 많을수록 평균이 빨라진다.
| 배선 제어 | 마이크로코드 | |
|---|---|---|
| 명령당 클럭 | 1 (고정) | 4~5 (가변) |
| 클럭 주기 | 긺 (최악 명령) | 짧음 (최악 단계) |
| 회로 양 | 많음 (명령별) | 적음 (돌려 씀) |
| 명령 추가·수정 | 실리콘 재설계 | 표만 수정 |
| 제어 복잡도 | 단순 | 복잡 (상태기계) |