스킬캠퍼스

오늘 끝나면

레지스터·카운터·PC

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

실습 미션

비트를 저장하고 한 칸씩 — 순서가 생긴다 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

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

반도체 설계 · 12

레지스터·카운터
·PC

플립플롭을 여러 개 묶으면 여러 비트를 한 번에 저장하는 레지스터가 된다.
클럭마다 +1 하면 카운터가 되고, 다음 명령 주소를 세면 PC가 된다.
이 부품들이 칩에 ‘순서’를 만든다.

P.01반도체 설계 · 12

플립플롭 여러 개 = 레지스터

플립플롭 하나는 비트 한 개를 기억한다. 여러 개를 나란히 묶으면 여러 비트를 통째로 저장하는 부품이 된다. 이것이 바로 레지스터다.

16개를 한 줄로 세우고 클럭선 하나를 공유시키면 16비트 레지스터가 된다.
클럭 edge가 한 번 오면 16개 플립플롭이 동시에 자기 입력 비트를 받아 적는다.
그래서 R 전체가 한 박자에 한꺼번에 갱신된다.

여기에 enable 선을 하나 더 붙이는 것이 핵심이다.
enable=1이면 edge에서 새 값을 load하고, enable=0이면 edge가 와도 값을 그대로 유지(hold)한다.
이 enable 덕에 ‘지금 적을지 말지’를 골라가며 데이터를 붙잡아 둘 수 있다.

1비트 플립플롭 ×16 → 16비트 레지스터
플립플롭 16개 = 16비트 레지스터
1비트 셀 16개 · 클럭선 하나 공유
0
0
1
0
1
1
0
1
0
0
0
1
1
0
0
1
b15 (MSB)b0 (LSB)
공유 클럭 · 한 edge에 16개 동시 갱신
CLK
플립플롭 1개가 1비트, 16개 묶으면 16비트를 한 박자에 저장한다
P.02반도체 설계 · 12

enable·reset, 적을지 말지를 고른다

레지스터가 쓸모 있으려면 ‘언제 적고, 언제 비울지’를 제어할 수 있어야 한다. 그 두 선이 enable과 reset이다.

enable은 load 게이트다.
edge마다 무조건 받아 적으면 데이터를 한 박자도 못 붙잡는다.
enable=0인 동안엔 입력이 바뀌어도 R이 옛 값을 그대로 들고 있다. 이것이 ‘기억’의 실체다.

reset은 값을 강제로 0…0으로 비운다.
전원을 켠 직후 레지스터엔 쓰레기 값이 들어 있다. reset으로 알려진 시작점(0)을 만들어야 그다음 계산이 믿을 만해진다.

enable 있는 레지스터 8개가 곧 CPU의 R0~R7이다.

enable=1 load · enable=0 hold · reset=0
제어선 → 레지스터 동작
enableresetedge에서 R
10D를 load입력 새 값을 받아 적는다
00값 유지(hold)edge 와도 옛 값 그대로
10…0으로 비움reset이 enable보다 우선
enable=0은 기억, reset=1은 알려진 시작점(0). 둘이 레지스터를 제어한다
P.03반도체 설계 · 12

카운터, 클럭마다 +1

카운터는 새 부품이 아니다. 레지스터 출력에 +1 가산기를 붙여 그 결과를 다시 자기 입력으로 되먹인 것뿐이다.

edge가 오면 레지스터가 ‘지금 값+1’을 받아 적는다.
그러면 0, 1, 2, 3 이렇게 클럭을 셀 때마다 하나씩 올라간다.
비트 폭이 정해져 있어 끝에 가면 다시 처음으로 돈다. 4비트면 15 다음에 0으로 wrap한다.

카운터는 몇 번째 클럭인지, 몇 번 반복했는지를 숫자로 들고 있다.

레지스터 + 가산기를 고리로 묶음
카운터 = 레지스터 + (+1) 되먹임
REG+1현재값+1 결과를 되먹임CLK
4비트 카운터 · 매 edge +1 (15 → 0 wrap)
0000000100100011...11110000
새 회로가 아니다. 레지스터에 +1 가산기를 고리로 붙인 것뿐이다
P.04반도체 설계 · 12

클럭을 한 edge씩 올려본다

클럭을 한 edge 올릴 때마다 세 부품이 동시에 갱신된다. R이 load되고(enable=1일 때), CNT가 +1 되고, PC가 다음 명령 주소로 옮겨간다.

enable을 끄면 같은 edge에도 R만 옛 값을 유지한다. load와 hold의 차이가 여기서 드러난다.

STEP Clock · R load · CNT +1 · PC 이동
Step Clock · 레지스터 · 카운터 · PC
클럭, STEP마다 한 edget = 0
STEP 대기
R · 16비트
0
enable=1 · load
CNT · 4b
0
매 edge +1 (0~15)
PC
0x00
다음 명령 주소
레지스터 입력, D와 enable
D7
D=7R=0

경로가 열린다. 다음 edge에서 R이 D를 받아 적는다

PC가 가리키는 명령, 다음 PC 예측
0x00LOAD R0, 5◂ PC
0x01ADD R0, 3
0x02STORE R0, M1
0x03JMP 0x01
근거 패널, 이번 edge에서 일어난 일
R
0
CNT
0
PC
0x00

STEP을 눌러 첫 edge를 올려본다. 세 부품이 동시에 갱신된다

edge 한 번에 레지스터 load · 카운터 +1 · PC 이동이 함께 일어난다. 이게 칩이 ‘순서’를 만드는 방식이다

P.05반도체 설계 · 12

PC, 다음에 실행할 명령의 주소

PC(Program Counter)는 특별한 레지스터다. 값으로 ‘다음에 실행할 명령어가 있는 메모리 주소’를 들고 있다.

CPU는 매 박자 PC가 가리키는 주소에서 명령을 꺼낸다(fetch). 꺼내자마자 PC를 +1 해 다음 명령을 준비한다.
그래서 명령이 메모리에 적힌 순서대로 실행된다.

그냥 +1만 하면 위에서 아래로만 흐른다. JMP나 분기는 PC에 다른 주소를 강제로 적어 순서를 바꾼다.
되돌아 적으면 반복(루프)이 되고, 건너뛰면 조건 분기가 된다.

Q. PC(Program Counter)가 하는 일은?정답은 다음에 실행할 명령어의 주소를 가리키는 것이다.
CPU는 매 박자 PC가 가리키는 주소에서 명령을 꺼내고, PC를 +1 해 다음 명령을 준비한다.
JMP나 분기는 PC에 다른 주소를 적어 순서를 바꾼다. 그래서 PC가 프로그램의 흐름을 만든다.
fetch → PC+1 → 다음 fetch (JMP면 점프)
PC = 다음 명령 주소

fetch(PC) → 실행 → PC 갱신 → fetch(PC) …

0x00LOAD R0,5+1 → 0x01
0x01ADD R0,3+1 → 0x02
0x02STORE R0+1 → 0x03
0x03JMP 0x01점프 → 0x01
보통은 +1로 순서대로 실행하고, JMP는 PC를 강제로 바꿔 흐름을 튼다

3줄 요약

  1. 1비트를 저장하고 한 칸씩 — 순서가 생긴다
  2. 2레지스터·카운터·PC은 비트·게이트 → ALU → 시간·메모리 → 나만의 CPU → 메모리·GPU·SoC 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

레지스터

비트를 저장하고 한 칸씩 — 순서가 생긴다

ALU

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

ISA

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