스킬캠퍼스

오늘 끝나면

명령어와 ISA 설계

  • 명령어와 ISA 설계의 핵심 문제를 한 문장으로 설명한다
  • 오른쪽 실습에서 명령어와이 어떻게 움직이는지 관찰한다
  • 다음 강의와 이어지는 한계를 말할 수 있다

실습 미션

opcode·register·immediate를 비트에 — MY-16 만들기 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

  • 실습의 기본값을 먼저 관찰
  • 입력값이나 모드를 한 번 이상 바꿔 결과 비교
  • 왜 결과가 바뀌었는지 한 문장으로 설명

반도체 설계 · 16

명령어와
ISA 설계

CPU에게 시킬 일도 결국 0과 1이다.
무슨 연산을 할지, 어느 레지스터를 쓸지, 어떤 상수를 넣을지를
16비트 한 워드에 나눠 담은 것이 명령어다.

P.01반도체 설계 · 16

명령어 = opcode + register + immediate

CPU는 한국어를 못 읽는다. ‘R2에 R1을 더해라’ 같은 명령도 결국 0과 1 묶음 하나로 줘야 한다.

그 묶음을 명령어(instruction)라고 한다. 16비트 워드 하나에 세 가지를 나눠 담는다.
opcode는 무슨 연산인지 정한다. 더해라, 빼라, 옮겨라 같은 것이다.
register는 어느 레지스터를 쓰는지 가리킨다. R0부터 R7까지 중 둘이다.
immediate는 명령어 안에 박아 넣은 상수다. 예를 들어 +5다.

그래서 ADD R1, R2는 사람이 보는 글자이고, 실제 메모리에는 비트 16칸으로 들어간다.
이 칸을 어떻게 나눌지 정하는 것이 명령어 포맷 설계다.

ADD R1, R2가 16비트 한 워드가 된다
사람 글자에서 비트 묶음으로
사람이 쓰는 명령

ADD R1, R2

CPU가 받는 16비트 워드
0001
001
010
000000
opcode
ADD
regA
R1
regB
R2
imm
+0
세 필드가 무슨 연산인지, 어느 레지스터인지, 어떤 상수인지를 정한다
P.02반도체 설계 · 16

비트를 어디서 끊나, 필드 경계

16칸은 그냥 일렬이다. 어디서 끊어 어느 필드로 읽을지는 약속으로 정한다. 그 약속이 곧 포맷이다.

보통 MSB(맨 왼쪽)부터 opcode를 둔다. 디코더가 명령어를 읽을 때 제일 먼저 무슨 연산인지부터 알아야 하기 때문이다.
그 뒤로 레지스터 번호 필드가 오고, 마지막에 immediate가 온다.

R0부터 R7까지 여덟 개를 가리키려면 레지스터 한 칸당 3비트면 된다 (2³ = 8).
두 레지스터를 쓰면 3 + 3 = 6비트가 레지스터 몫이다.
남는 비트를 opcode와 immediate가 나눠 가진다. 여기서 줄다리기가 시작된다.

MSB부터 opcode · reg · imm 순서로
어디서 끊나, 필드 경계
끊기 전, 그냥 16칸
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
끊은 뒤, 약속대로 배치
OP
OP
OP
OP
rA
rA
rA
rB
rB
rB
im
im
im
im
im
im
b15b0
레지스터 8개는 3비트, 디코더는 opcode부터 읽어야 해 MSB에 둔다
P.03반도체 설계 · 16

opcode ↔ immediate 트레이드오프

워드는 16비트로 고정이다. 늘릴 수 없는 예산을 opcode와 immediate가 나눠 쓴다.

opcode 비트를 한 칸 늘리면 명령 종류가 두 배가 된다 (2ⁿ). 4비트면 16종, 5비트면 32종이다.
그런데 그 한 칸은 어딘가에서 빼와야 한다. 대개 immediate에서 가져온다.

immediate 비트가 한 칸 줄면 표현할 수 있는 상수 범위가 절반이 된다.
6비트면 부호 있는 수로 −32~31, 5비트면 −16~15다.
명령을 다양하게 할지, 큰 상수를 넣을지 정답은 없다. 설계 선택만 있을 뿐이다.

16비트는 고정 예산, 한쪽 늘면 한쪽 준다
16 − 6(reg) = 10비트를 opcode·imm이 나눔
opcode명령 수imm 비트상수 범위
3b87b−64~63
4b166b−32~31
5b325b−16~15
6b644b−8~7
위로 갈수록 명령은 늘고 상수는 줄어드는 줄다리기다. 파란 줄이 MY-16이다
P.04반도체 설계 · 16

직접 필드를 잘라 MY-16을 만든다

슬라이더로 opcode와 immediate 비트를 옮기면 16칸이 실시간으로 재배치된다.

필드 합이 16을 넘으면 충돌로 빨갛게 뜨고, 모자라면 남는 칸이 낭비로 흐려진다. 딱 16에 맞춘 한 줄이 곧 MY-16 포맷 후보다.

ISA 디자이너 · opcode·imm 조절 + 충돌 표시
ISA 디자이너 · MY-16 명령어 포맷
16비트 워드 · 필드 배치16 / 16 비트
OP
OP
OP
OP
rA
rA
rA
rB
rB
rB
im
im
im
im
im
im
b15 (MSB)b0 (LSB)

딱 맞는다, 16비트를 한 칸도 안 남기고 다 쓴다.

예측 먼저, opcode 비트를 늘리면 immediate 범위는?
opcode 비트4비트 → 16

opcode 4비트 = 명령어를 16종까지 정의 가능

immediate 비트6비트

상수 칸, 부호 있으면 -32~31

근거 패널, 필드 예산
opcode
4b
16종 명령
레지스터
3b ×2
8개 중 선택
immediate
6b
최대 63
정확히 160

MY-16 포맷 후보. 이 배치가 17강 디코더와 최종 MyChip ISA로 들어간다.

16비트는 고정 예산이다. opcode↑ → 명령 종류↑·imm 범위↓ (절반씩). opcode↓ → imm 넓어짐·명령 수↓. 이 줄다리기가 ISA 설계의 핵심이다.

P.05반도체 설계 · 16

MY-16 만들기, 균형 잡힌 한 줄

이 강의 결정판은 균형 잡힌 MY-16 한 줄이다. 16비트를 한 칸도 안 남기고 셋이 나눠 쓴다.

opcode 4비트는 명령 16종을 담는다. ADD, SUB, LD, ST, JMP까지 한 세트로 충분하다.
regA 3 · regB 3은 R0부터 R7까지 두 레지스터를 지정한다.
immediate 6비트는 부호 있는 상수 −32~31을 담는다.
4 + 3 + 3 + 6 = 16, 빈틈 없이 딱 맞는다.

이게 정답이라서가 아니라 균형이라서 고른 것이다. 상수를 더 키우고 싶으면 opcode를 3비트로 줄이고, 명령을 더 늘리고 싶으면 imm을 깎으면 된다.

Q. opcode 비트를 한 칸 늘리면 어떻게 되나?정답은 명령 종류는 두 배로 늘고, 대신 immediate 범위는 절반으로 줄어든다는 것이다.
워드는 16비트로 고정이라, opcode가 한 칸 먹으면 그 칸을 immediate에서 빼와야 한다.
opcode를 4비트에서 5비트로 늘리면 명령은 16종에서 32종으로 늘고, immediate가 6비트에서 5비트로 줄면 상수 범위는 −32~31에서 −16~15로 좁아진다.
opcode 4 · reg 3·3 · imm 6 = 16
MY-16 · 최종 포맷
opcode · 4b
16종
regA · 3b
R0~7
regB · 3b
R0~7
imm · 6b
−32~31

4 + 3 + 3 + 6 = 16 · 딱 맞는다

이 포맷이 17강 디코더가 잘라 읽을 경계이고 최종 MyChip ISA다

3줄 요약

  1. 1opcode·register·immediate를 비트에 — MY-16 만들기
  2. 2명령어와 ISA 설계은 비트·게이트 → ALU → 시간·메모리 → 나만의 CPU → 메모리·GPU·SoC 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

명령어와

opcode·register·immediate를 비트에 — MY-16 만들기

ALU

산술·논리 연산을 하는 회로

ISA

CPU가 이해하는 명령어 집합과 인코딩