스킬캠퍼스

오늘 끝나면

레지스터 파일·스택

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

실습 미션

두 값을 동시에 읽기 — push/pop과 스크래치패드 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

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

반도체 설계 · 14

레지스터
파일·스택

레지스터 여러 개를 한 블록으로 묶은 것이 레지스터 파일이다.
읽기 포트가 둘이라 두 값을 한 사이클에 같이 뽑는다.
그걸 쌓고 빼는 규칙(LIFO)이 스택이고, 함수 호출이 여기서 돈다.

P.01반도체 설계 · 14

레지스터를 한 블록으로, 레지스터 파일

앞에서 만든 레지스터(D 플립플롭 묶음)를 여러 개 한 블록으로 묶으면 레지스터 파일이다.

16비트 CPU는 보통 R0~R7 8개를 둔다.
각 레지스터에는 번호가 붙고, 그 번호를 주소라 부른다.
8개니까 주소는 3비트면 충분하다 (000~111).

이게 메모리(RAM)와 다른 점은 위치다. 레지스터 파일은 ALU 바로 옆에 붙어 있다.
그래서 RAM보다 훨씬 빨리 읽고 쓴다. CPU가 계산하려고 손에 쥐는 코앞의 값들이다.
여기서 정한 레지스터 8개가 최종 MyChip의 레지스터 파일 크기로 그대로 들어간다.

8개 레지스터 R0–R7를 한 칸에
레지스터 파일 · R0–R7 (각 16비트)
R0000주소12
R1001주소7
R2010주소40
R3011주소3
R4100주소25
R5101주소9
R6110주소0
R7111주소0x0100SP로 씀
8개라 주소 3비트 · ALU 코앞이라 RAM보다 빠르다
P.02반도체 설계 · 14

두 값을 동시에 읽는다, 읽기 포트 2개

레지스터 파일의 핵심은 읽는 입구가 둘, read port A와 read port B라는 점이다.

왜 둘일까. ALU가 한 번에 피연산자를 둘 받기 때문이다.
R3 + R5를 하려면 R3과 R5를 같은 사이클에 뽑아야 한다.
포트가 하나뿐이면 한 번에 한 값씩이라 두 박자가 들어 느려진다.

포트 A에는 주소 A, 포트 B에는 주소 B를 따로 준다.
그러면 bus A에는 R[A]의 값이, bus B에는 R[B]의 값이 동시에 실린다.
심지어 둘이 같은 주소여도 된다. 같은 값이 양쪽에 나오고, 읽기는 서로 막지 않는다.

포트 A·포트 B → bus 둘
한 사이클 · 두 값 동시 읽기
R0R1R2R3R4R5R6R7ABbus Abus B
실선은 포트 A(R3), 점선은 포트 B(R5). 같은 박에 둘 다 ALU로 간다
P.03반도체 설계 · 14

쓰기 포트와 내부 MUX

읽기는 주소로 한 줄을 고르는 일이다. 그 고르는 부품이 멀티플렉서(MUX)다.

8개 레지스터 출력이 전부 MUX로 들어간다. 3비트 주소가 그중 하나만 통과시킨다.
포트가 둘이니 MUX도 둘이다. 각자 자기 주소로 자기 줄을 뽑는다.
11강에서 본 주소 선택 회로가 그대로 여기 쓰인다.

쓰기 포트는 하나면 충분하다. 한 명령은 보통 결과를 한 곳에만 적는다.
쓰기는 주소로 고른 한 레지스터의 클럭만 열어 그 칸에만 새 값을 넣는다 (디코더 역할).
그래서 같은 사이클에 두 곳을 읽고 한 곳에 쓰는 일이 동시에 된다. read 2, write 1이다.

주소 → MUX가 한 줄만 통과
읽기 = MUX · 쓰기 = 디코더
읽기 · MUX8 입력 → 1 출력
MUXbus

주소가 한 줄만 통과시킨다 (여기선 R5)

쓰기 · 디코더1 값 → 1 레지스터
DECR1만 열림

주소로 고른 한 칸의 클럭만 열어 그곳에만 쓴다

읽기 2개 + 쓰기 1개가 한 사이클에 같이 된다
P.04반도체 설계 · 14

직접 두 포트로 읽고, 스택을 쌓아본다

두 포트 주소를 고르고, bus에 실릴 값을 먼저 찍은 뒤 READ로 확인한다.

포트 A와 B 주소를 누르면 그 두 줄과 MUX 경로만 진해진다.
READ를 누르면 bus A와 B에 두 값이 한 번에 올라오고, WRITE는 고른 한 곳에만 값을 적는다.
읽기 둘, 쓰기 하나가 한 사이클에 같이 된다.

스택 탭에서는 R7을 스택 포인터(SP)로 써서 PUSH와 POP을 한다.
push 때 SP가 한 칸 내려가고, pop 때 한 칸 올라간다.
여기서 고른 레지스터 8개 구성이 최종 MyChip 레지스터 파일에 들어간다.

레지스터 파일 + 스택 · 예측 먼저
레지스터 파일 R0–R7 · 스택(R7=SP)
레지스터 파일, 선택된 두 줄이 진하다
R012→ 포트 A
R17
R240→ 포트 B
R33
R425
R59
R60
R70x0100SP
읽기 포트, 두 주소를 동시에 고름 (3비트 주소)
포트 Aaddr = 000
포트 Baddr = 010
내부 MUX, 주소가 한 줄을 bus로 통과시킨다
R0R1R2R3R4R5R6R7MUXABbus Abus B
예측 먼저, bus A·bus B에 실릴 값은?
bus A ← R0
?
bus B ← R2
?

값을 머릿속에 찍어두고 READ를 누른다. 두 포트라 한 번에 둘이 나온다.

쓰기 포트, 한 번에 한 곳 (SP=R7 제외)
근거 패널, 주소/데이터표
포트 A 주소
0 = 000
포트 B 주소
2 = 010
쓰기 주소
1 = 001
bus A 값
?
bus B 값
?
쓰기 값
50

읽기 포트 2개라 같은 사이클에 두 피연산자를 뽑는다, 그래서 R0+R2 같은 명령이 한 박에 끝난다.

P.05반도체 설계 · 14

스택, push/pop과 스크래치패드

레지스터 8개는 금방 동난다. 더 둘 데가 필요할 때 메모리 한 귀퉁이를 스택으로 쓴다.

스택은 한쪽 끝에서만 넣고 빼는 규칙이다. 마지막에 넣은 게 먼저 나오는 LIFO다.
넣기가 push, 빼기가 pop이다.
어디까지 쌓였는지는 스택 포인터(SP) 레지스터 하나가 가리킨다.

함수를 부르면 복귀 주소와 인자, 지역변수를 push로 쌓고, 끝나면 pop으로 정확히 되돌린다.
호출이 겹쳐도 LIFO라 마지막 호출부터 깔끔히 풀린다. 그래서 함수 호출의 뼈대가 스택이다.
임시 계산값을 잠깐 얹어두는 스크래치패드로도 같은 스택을 쓴다.

Q. 레지스터 파일에 읽기 포트가 둘인 이유는?정답은 ALU가 두 피연산자를 동시에 받기 위해서다.
R3 + R5 같은 연산은 두 값이 같은 사이클에 필요하다.
포트가 하나면 한 번에 한 값씩이라 두 박자가 들지만, 포트가 둘이면 한 박에 둘 다 뽑아 ALU로 바로 보낸다.
LIFO · 함수 호출이 쌓고 되돌린다
스택 · LIFO · 위에서만 넣고 뺀다
비었음
0x0100
push 10
10
0x00FF
push 20
10
20
0x00FE
push 30
10
20
30
0x00FD
pop → 30
10
20
0x00FE
마지막에 push한 30이 먼저 pop된다. 함수 호출이 이 순서로 쌓이고 풀린다

3줄 요약

  1. 1두 값을 동시에 읽기 — push/pop과 스크래치패드
  2. 2레지스터 파일·스택은 비트·게이트 → ALU → 시간·메모리 → 나만의 CPU → 메모리·GPU·SoC 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

레지스터

두 값을 동시에 읽기 — push/pop과 스크래치패드

ALU

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

ISA

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