8비트 프로그램 카운터 (PC)
개요
- 목적: 8비트 프로그램 카운터(PC)는 CPU에서 다음에 페치되고 실행될 명령어의 메모리 주소를 보유하는 전문 레지스터입니다. 각 명령어 페치 후 자동으로 증가하여 다음 명령어를 가리키거나, 점프 및 분기 중에 새 주소를 로드할 수 있습니다.
- 기호: 프로그램 카운터는 클럭, 로드 데이터, 증가, 로드 인에이블, 리셋, 출력 인에이블 입력과 8비트 출력 주소가 있는 직사각형 블록으로 표현됩니다.
- DigiSim.io 역할: CPU 설계에서 핵심 부품으로, 명령어 페치를 위한 주소를 제공하고 순차 및 비순차 실행 패턴을 가능하게 하여 프로그램 실행 흐름을 제어합니다.

기능 설명
논리 동작
프로그램 카운터는 다음에 실행될 명령어의 주소를 유지하고 업데이트합니다. 제어 신호에 기반하여 순차적으로 증가하거나, 점프 및 분기를 위한 새 주소를 로드하거나, 현재 값을 유지할 수 있습니다.
기능 표:
| RST | LD | INC | CLK | OE | 동작 | A0-A7 출력 |
|---|---|---|---|---|---|---|
| 1 | X | X | X | X | 0으로 리셋 | High-Z |
| 0 | 1 | X | ↑ | 1 | 새 주소 로드 | D0-D7 데이터 |
| 0 | 1 | X | ↑ | 0 | 새 주소 로드 | High-Z |
| 0 | 0 | 1 | ↑ | 1 | 증가 | Address + 1 |
| 0 | 0 | 1 | ↑ | 0 | 증가 | High-Z |
| 0 | 0 | 0 | ↑ | 1 | 현재 값 유지 | 현재 주소 |
| 0 | 0 | 0 | ↑ | 0 | 현재 값 유지 | High-Z |
| X | X | X | 0 | X | 변경 없음 | 이전 상태 |
참고: ↑는 상승 클럭 에지, X는 "무관" 조건을 나타냅니다 RST는 비동기 — 활성화 시 다른 신호와 관계없이 즉시 카운터를 리셋합니다 OE는 트라이스테이트 출력을 제어 — 비활성화(0)되면 모든 출력이 High-Z 상태로 전환
입력 및 출력
입력:
- D0-D7[7:0]: 점프 또는 분기 중 새 주소를 로드하기 위한 8비트 데이터 입력.
- CLK: 카운터 연산을 동기화하는 1비트 클럭 입력.
- LD: 활성화 시 데이터 입력에서 로드를 가능하게 하는 1비트 로드 인에이블 입력.
- RST: 활성화 시 카운터를 0x00으로 리셋하는 1비트 리셋 입력.
- INC: 활성화 시 증가 연산을 트리거하는 1비트 증가 인에이블 입력.
- OE: 트라이스테이트 출력을 제어하는 1비트 출력 인에이블 입력.
출력:
- A0-A7[7:0]: 메모리 주소 버스에 연결되는 8비트 주소 출력 (OE에 의해 트라이스테이트 제어).
핀 배치
입력 핀 (왼쪽):
- 핀 0-7: D0-D7 (병렬 로딩을 위한 데이터 입력)
- 핀 8: CLK (클럭 - 모든 연산을 동기화)
- 핀 9: LD (로드 인에이블 - 병렬 데이터 로딩 활성화)
- 핀 10: RST (리셋 - 카운터를 0x00으로 비동기 리셋)
- 핀 11: INC (증가 인에이블 - 카운터 증가 활성화)
- 핀 12: OE (출력 인에이블 - 트라이스테이트 출력 제어)
출력 핀 (오른쪽):
- 핀 0-7: A0-A7 (메모리 버스로의 주소 출력)
설정 가능한 매개변수
- 리셋 값: PC가 리셋되는 값 (일반적으로 0x00).
- 클럭 에지 감도: PC가 상승 또는 하강 클럭 에지에서 동작하는지 여부.
- 트라이스테이트 제어: 출력 인에이블 신호가 출력 드라이버를 어떻게 제어하는지.
- 전파 지연: 트리거 이벤트 후 출력이 변경되는 데 걸리는 시간.
DigiSim.io에서의 시각적 표현
8비트 프로그램 카운터는 왼쪽에 레이블이 지정된 입력(D0-D7, CLK, LD, RST, INC, OE)과 오른쪽에 출력(A0-A7)이 있는 직사각형 블록으로 표시됩니다. 클럭 입력은 일반적으로 에지 감도를 나타내는 삼각형 기호로 표시됩니다. 회로에 연결되면 출력에 표시되는 주소 값과 연결 와이어의 색상 변화를 통해 현재 상태를 시각적으로 나타냅니다.
교육적 가치
핵심 개념
- 프로그램 흐름 제어: 컴퓨터가 명령어 실행 순서를 어떻게 관리하는지 보여줍니다.
- 주소 지정: 컴퓨팅 시스템에서 메모리 주소 지정의 개념을 설명합니다.
- 제어 신호: 디지털 신호가 순차 회로의 동작을 어떻게 제어하는지 보여줍니다.
- 폰 노이만 아키텍처: 저장 프로그램 컴퓨터의 기본 부품을 소개합니다.
- 순차 논리: 레지스터와 카운터의 실용적 응용을 보여줍니다.
학습 목표
- CPU의 명령어 사이클에서 프로그램 카운터의 역할을 이해합니다.
- 순차 및 비순차 프로그램 흐름(점프, 분기)이 어떻게 구현되는지 배웁니다.
- 제어 신호가 프로그램 카운터의 동작을 다른 CPU 부품과 어떻게 조율하는지 인식합니다.
- 간단한 CPU 아키텍처 설계에 프로그램 카운터 개념을 적용합니다.
- 비트 폭에 기반한 주소 공간의 제한을 이해합니다 (8비트 PC = 256개 주소 가능 위치).
사용 예시
- 기본 CPU 설계: 최소 프로세서 아키텍처의 핵심 부품.
- 명령어 순서 지정: 명령어 실행 순서를 제어합니다.
- 점프 구현: 순서에서 벗어난 명령어를 실행하기 위해 프로그램 흐름을 변경합니다.
- 서브루틴 호출: 서브루틴으로 점프하기 전에 현재 주소를 저장합니다.
- 루프 구현: 일련의 명령어를 반복적으로 실행합니다.
- 인터럽트 처리: 인터럽트를 서비스하기 위해 프로그램 흐름을 일시적으로 리디렉션합니다.
기술 참고사항
- 8비트 PC는 직접 주소 지정 가능한 메모리를 256바이트(2^8 위치)로 제한합니다.
- PC는 일반적으로 증가기 회로와 결합된 8비트 레지스터를 사용하여 구현됩니다.
- 대부분의 CPU 설계에서 PC는 명령어 페치 단계에서 자동으로 증가합니다.
- 점프 및 분기 명령어는 PC에 새 값을 로드하여 정상적인 순차 흐름을 수정합니다.
- PC 값은 일반적으로 명령어 사이클의 페치 단계에서 주소 버스에 배치됩니다.
- 더 고급 구현에는 성능을 개선하기 위한 분기 예측이나 파이프라이닝과 같은 기능이 포함될 수 있습니다.
- 더 큰 CPU 아키텍처에서는 더 큰 메모리 공간을 주소 지정하기 위해 더 넓은 비트 폭(16, 32, 64)의 PC가 사용됩니다.
관련 부품
- 메모리 (RAM/ROM): PC가 주소 지정하는 명령어를 저장합니다.
- 주소 버스: PC의 출력에 의해 구동되는 버스.
- 명령 레지스터 (IR): PC가 가리키는 주소에서 페치된 명령어를 저장합니다.
- 제어 유닛: 디코딩된 명령어에 기반하여 PC의 INC, LOAD, ENABLE, RESET 신호를 생성합니다.
- ALU: PC에 로드되는 분기 대상 주소를 계산할 수 있습니다.
- 레지스터: 범용 레지스터가 간접 점프를 위한 주소를 보유할 수 있습니다.