PREVIEW
Control Unit

Control Unit

Advanced signal_cellular_alt Advanced schedule 40 min

Interactive Circuit

제어 장치

개요

  • 목적: 제어 장치는 DigiSim의 8비트 컴퓨터 아키텍처에서 조율을 담당하는 구성요소입니다. 프로그램 카운터, 메모리(RAM), 명령 레지스터, ALU, 플래그 레지스터 및 기타 구성요소를 조율하여 완전한 명령어 세트를 실행하는 데 필요한 제어 신호를 생성합니다.
  • 기호: 제어 장치는 다양한 CPU 구성요소와 인터페이스하기 위한 여러 입출력 핀이 있는 직사각형 블록으로 표현됩니다.
  • DigiSim.io 역할: 제어 장치는 인출-해독-실행-저장 사이클을 통해 모든 시스템 구성요소를 적절히 순서화하고 제어함으로써 완전하고 기능적인 8비트 컴퓨터의 생성을 가능하게 합니다.

Control Unit component

기능 설명

상태 기계 동작

제어 장치는 다음 4가지 상태를 순환하는 유한 상태 기계로 동작합니다:

  1. FETCH (인출): 메모리에서 다음 명령어를 가져옴
  2. DECODE (해독): 명령어를 해독하고 프로그램 카운터를 증가시킴
  3. EXECUTE (실행): 명령어에 지정된 연산을 수행함
  4. STORE (저장): 결과를 저장하고 필요에 따라 플래그를 업데이트함

입력 및 출력

입력 (7핀):

핀 이름 유형 설명
0 CLK 입력 동기 동작을 위한 시스템 클록
1 RST 입력 제어 장치를 초기화하기 위한 리셋 신호
2 OP0 입력 명령 레지스터의 연산 코드 비트 0
3 OP1 입력 명령 레지스터의 연산 코드 비트 1
4 OP2 입력 명령 레지스터의 연산 코드 비트 2
5 OP3 입력 명령 레지스터의 연산 코드 비트 3
6 Z_FLAG 입력 조건부 점프를 위한 플래그 레지스터의 제로 플래그

출력 (18핀):

핀 이름 유형 설명
0 PC_INC 출력 프로그램 카운터 증가
1 PC_LD 출력 프로그램 카운터 로드 (점프용)
2 PC_OE 출력 프로그램 카운터 출력 활성화 (주소 버스로)
3 MEM_RD 출력 메모리 읽기 활성화
4 MEM_WR 출력 메모리 쓰기 활성화
5 RAM_OE 출력 RAM 출력 활성화 (데이터 버스로)
6 IR_LD 출력 명령 레지스터 로드
7 IR_ADDR_OE 출력 IR 주소 출력 활성화 (주소 버스로)
8 ALU_OP0 출력 ALU 연산 코드 비트 0
9 ALU_OP1 출력 ALU 연산 코드 비트 1
10 ALU_OP2 출력 ALU 연산 코드 비트 2
11 ALU_OE 출력 ALU 출력 활성화 (데이터 버스로)
12 ACC_LD 출력 누산기 로드
13 ACC_OE 출력 누산기 출력 활성화 (데이터 버스로)
14 FLG_LD 출력 플래그 레지스터 로드
15 HALT 출력 시스템 정지 표시기
16 STATE0 출력 상태 비트 0 (2비트 상태 인코딩의 LSB)
17 STATE1 출력 상태 비트 1 (2비트 상태 인코딩의 MSB)

상태 인코딩 (STATE1:STATE0):

  • 00 → FETCH (인출)
  • 01 → DECODE (해독)
  • 10 → EXECUTE (실행)
  • 11 → STORE (저장)

명령어 세트 아키텍처

제어 장치는 4비트 연산 코드를 가진 16개의 명령어 세트를 지원합니다:

연산 코드 16진수 니모닉 설명 동작
0000 0x0 NOP 무연산 PC ← PC + 1
0001 0x1 LDA addr 누산기 로드 ACC ← M[addr]
0010 0x2 STA addr 누산기 저장 M[addr] ← ACC
0011 0x3 ADD addr 누산기에 더하기 ACC ← ACC + M[addr]
0100 0x4 SUB addr 누산기에서 빼기 ACC ← ACC - M[addr]
0101 0x5 AND addr 논리 AND ACC ← ACC & M[addr]
0110 0x6 OR addr 논리 OR ACC ← ACC | M[addr]
0111 0x7 XOR addr 논리 XOR ACC ← ACC ^ M[addr]
1000 0x8 NOT 논리 NOT ACC ← ~ACC
1001 0x9 SHL 왼쪽 시프트 ACC ← ACC << 1
1010 0xA SHR 오른쪽 시프트 ACC ← ACC >> 1
1011 0xB JMP addr 무조건 점프 PC ← addr
1100 0xC JZ addr 제로일 때 점프 if (Z=1) PC ← addr
1101 0xD JNZ addr 제로가 아닐 때 점프 if (Z=0) PC ← addr
1110 0xE LDI 즉시 로드 향후 사용을 위해 예약됨
1111 0xF HLT 정지 실행 중지

명령어 형식

비트 위치 7 6 5 4 3 2 1 0
필드 OPCODE (4비트) OPERAND (4비트)
설명 수행할 연산 메모리 주소/값

마이크로코드 아키텍처

제어 신호 생성

제어 장치는 마이크로코드 ROM 방식을 사용하며, 각 명령어는 네 가지 상태에 걸쳐 마이크로 연산으로 분해됩니다. 연산 코드와 상태의 각 조합은 특정 제어 신호 세트를 생성합니다.

예시: LDA (누산기 로드) 명령어

FETCH 상태:

  • PC_OE = 1 (PC가 주소 버스를 구동)
  • MEM_RD = 1 (메모리에서 명령어 읽기)
  • IR_LD = 1 (IR에 명령어 로드)

DECODE 상태:

  • PC_INC = 1 (다음 명령어로 PC 증가)

EXECUTE 상태:

  • IR_ADDR_OE = 1 (IR 주소가 주소 버스를 구동)
  • MEM_RD = 1 (메모리 주소에서 데이터 읽기)

STORE 상태:

  • RAM_OE = 1 (RAM이 데이터 버스를 구동)
  • ACC_LD = 1 (누산기에 데이터 로드)
  • FLG_LD = 1 (플래그 업데이트)

버스 제어 및 트라이스테이트 관리

제어 장치는 한 번에 하나의 구성요소만 각 버스를 구동하도록 하여 버스 경합을 신중하게 관리합니다:

  • 주소 버스: PC_OE 또는 IR_ADDR_OE로 제어
  • 데이터 버스: RAM_OE, ALU_OE 또는 ACC_OE로 제어

다른 구성요소와의 통합

구성요소 호환성

제어 장치는 DigiSim의 기존 구성요소와 원활하게 작동하도록 설계되었습니다:

  • 8비트 ALU: 연산 코드(ALU_OP0-2)를 수신하고 플래그와 함께 결과 제공
  • 프로그램 카운터: PC_INC, PC_LD, PC_OE 신호로 제어
  • RAM (256×8): MEM_RD, MEM_WR, RAM_OE 신호로 관리
  • 명령 레지스터: IR_LD를 통해 로드되고 연산 코드/주소 분리 제공
  • 플래그 레지스터: FLG_LD를 통해 업데이트되고 조건부 점프를 위해 읽힘(Z_FLAG)
  • 누산기: ACC_LD 및 ACC_OE 신호로 제어

신호 타이밍

제어 장치는 모든 구성요소에 대한 적절한 설정 및 유지 시간을 보장합니다:

  1. 주소 설정: 메모리 동작 전에 주소 신호가 안정화됨
  2. 데이터 유효: 로드 신호가 활성화될 때 데이터가 유효함
  3. 클록 동기화: 모든 상태 변경은 클록 상승 에지에서 발생
  4. 리셋 동작: 알려진 상태로의 즉각적인 비동기 리셋

사용 예시

간단한 프로그램: 두 수 더하기

; 메모리에 저장된 두 수 더하기
0x0: LDA 0x8    ; 주소 0x8에서 첫 번째 수 로드
0x1: ADD 0x9    ; 주소 0x9의 두 번째 수 더하기
0x2: STA 0xA    ; 주소 0xA에 결과 저장
0x3: HLT        ; 실행 정지
...
0x8: 0x05       ; 첫 번째 수 (5)
0x9: 0x03       ; 두 번째 수 (3)
0xA: 0x00       ; 결과 위치

반복 예시: 1에서 10까지 세기

; 0에서 10까지 세기
0x0: LDA 0x8    ; 카운터 로드
0x1: ADD 0x9    ; 1 더하기
0x2: STA 0x8    ; 카운터 저장
0x3: SUB 0xA    ; 10 빼기
0x4: JNZ 0x0    ; 0이 아니면 돌아가기
0x5: HLT        ; 완료 시 정지
...
0x8: 0x00       ; 카운터
0x9: 0x01       ; 상수 1
0xA: 0x0A       ; 상수 10

기술 참고사항

클록 요구사항

  • 최소 주파수: 교육적 관찰을 위한 1 Hz
  • 최대 주파수: 구성요소 전파 지연에 의해 제한됨
  • 듀티 사이클: 최적의 타이밍 마진을 위해 50% 권장

리셋 동작

  • 비동기 리셋: 상태를 즉시 FETCH로 설정
  • 신호 클리어: 모든 제어 신호가 비활성 상태로 리셋
  • 정지 복구: 실행을 재개하려면 리셋이 필요함

성능

  • 모든 명령어: 4 클록 사이클 (인출-해독-실행-저장)
  • 초당 명령어 수: 클록 주파수 ÷ 4
  • 메모리 대역폭: 명령어 사이클당 한 번의 읽기 또는 쓰기

school 학습 경로

arrow_forward 다음 단계

help_outline 자주 묻는 질문

제어 장치는 무엇을 하나요?

CU는 명령어를 해석하고 모든 CPU 컴포넌트를 조율하는 제어 신호를 생성합니다 - 레지스터 활성화, ALU 연산 선택, 메모리 액세스 제어.

마이크로코드란 무엇인가요?

마이크로코드는 각 기계 명령어를 마이크로 연산의 시퀀스로 구현하는 저수준 제어 코드로, 내부 CPU 신호를 제어합니다.

play_arrow 실시간 회로 실행

다른 컴포넌트 보기