PREVIEW
Instruction Register

Instruction Register

Advanced signal_cellular_alt Advanced schedule 25 min

Interactive Circuit

명령 레지스터 (IR)

개요

  • 목적: 명령 레지스터(IR)는 메모리에서 페치된 기계어 명령어를 제어 유닛에 의해 디코딩 및 실행되는 동안 임시로 보유하는 CPU 내의 전문 레지스터입니다.
  • 기호: 명령 레지스터는 메모리로부터의 데이터, 클럭, 로드 인에이블 입력과 디코더에 명령어 비트를 제공하는 출력이 있는 직사각형 블록으로 표현됩니다.
  • DigiSim.io 역할: CPU 설계에서 핵심 부품으로 사용되며, 명령어 사이클의 페치와 디코드 단계를 연결하고 명령어의 연산 코드와 피연산자에 대한 안정적인 접근을 제공합니다.

instruction register component

기능 설명

논리 동작

명령 레지스터는 페치 사이클 동안 메모리의 명령어 데이터를 캡처하고 보유하여, 디코드 및 실행 사이클 전체에 걸쳐 명령어 디코더에서 사용할 수 있도록 합니다. 주로 로드 제어가 있는 저장 요소로 기능합니다.

기능 표:

LD CLK A_OE 동작 Opcode (OP0-OP3) Address (A0-A3)
1 X 새 명령어 로드 Loaded Data[3:0] Loaded Data[7:4] or Hi-Z
0 X 현재 값 유지 Current Value Current Value or Hi-Z
X 0 X 변경 없음 Current Value Current Value or Hi-Z
X X 1 주소 출력 인에이블 Current Value Current Value
X X 0 주소 Hi-Z Current Value Hi-Z

참고: ↑는 상승 클럭 에지를 나타내며, X는 "무관" 조건을 나타냅니다

입력 및 출력

  • 입력:

    • I0-I7: 페치된 명령어를 수신하기 위해 메모리 데이터 버스에 연결된 8비트 데이터 입력.
    • LD: 활성화 시 새 명령어 로딩을 가능하게 하는 1비트 로드 인에이블 입력.
    • CLK: 로딩 동작을 동기화하는 1비트 클럭 입력.
    • A_OE: 주소 비트가 출력에 구동되는지를 제어하는 1비트 주소 출력 인에이블.
  • 출력:

    • OP0-OP3: 제어 유닛에 연산 코드를 제공하는 4비트 연산 코드 출력 (항상 활성화).
    • A0-A3: 주소 정보를 제공하는 4비트 주소 출력 (A_OE에 의해 제어).
    • 연산 코드 출력은 로드 후 항상 사용 가능하며, 제어 유닛이 즉시 접근할 수 있습니다.
    • 주소 출력은 메모리 연산 중 버스 공유를 위해 A_OE를 사용하여 트라이스테이트로 만들 수 있습니다.

설정 가능한 매개변수

  • 레지스터 폭: IR이 저장할 수 있는 비트 수로, CPU의 명령어 워드 크기와 일치합니다.
  • 클럭 에지 감도: 레지스터가 상승 또는 하강 클럭 에지에 반응하는지 여부.
  • 로드 동작: 로드 제어 신호가 클럭과 어떻게 상호 작용하는지.
  • 전파 지연: 트리거 이벤트 후 출력이 변경되는 데 걸리는 시간.

DigiSim.io에서의 시각적 표현

명령 레지스터는 왼쪽에 레이블이 지정된 입력(DATA[n:0], CLK, LOAD)과 오른쪽에 출력(IR_OUT[n:0])이 있는 직사각형 블록으로 표시됩니다. 클럭 입력은 일반적으로 에지 감도를 나타내는 삼각형 기호로 표시됩니다. 회로에 연결되면 출력에 표시되는 명령어 값과 연결 와이어의 색상 변화를 통해 현재 상태를 시각적으로 나타냅니다.

교육적 가치

핵심 개념

  • 명령어 사이클: CPU의 페치-디코드-실행 사이클에서 핵심 단계를 보여줍니다.
  • 명령어 디코딩: 기계어 명령어가 해석을 위해 어떻게 준비되는지 설명합니다.
  • CPU 아키텍처: CPU 제어 유닛의 기본 부품을 소개합니다.
  • 순차 처리: 데이터가 CPU에서 개별 단계로 어떻게 흐르는지 보여줍니다.
  • 명령어 집합 아키텍처: 기계어 명령어가 어떻게 처리되는지 시각화하는 데 도움을 줍니다.

학습 목표

  • CPU 실행 사이클에서 명령 레지스터의 역할을 이해합니다.
  • CPU 동작 중 명령어가 어떻게 캡처되고 안정적으로 유지되는지 배웁니다.
  • IR이 메모리 및 명령어 디코더와 어떻게 인터페이스하는지 인식합니다.
  • 간단한 CPU 아키텍처 설계에 IR 개념을 적용합니다.
  • 명령어 형식과 CPU 구조의 관계를 이해합니다.

사용 예시

  • 기본 CPU 설계: 페치-디코드-실행 사이클 구현의 핵심 부품.
  • 명령어 디코딩: 디코더 회로에 안정적인 명령어 데이터 제공.
  • 파이프라인 아키텍처: CPU 파이프라인에서 페치와 디코드 단계 분리.
  • 마이크로코드 구현: 제어 유닛이 마이크로 연산을 단계적으로 수행하는 동안 명령어 보유.
  • 교육용 CPU 모델: CPU 동작의 기본 원리 시연.
  • 하드와이어드 제어 유닛: 조합 제어 논리에 직접 명령어 비트 제공.

기술 참고사항

  • 명령 레지스터의 폭은 프로세서 아키텍처의 명령어 크기와 일치합니다.
  • IR은 일반적으로 명령어 사이클의 페치 단계에서 로드됩니다.
  • 간단한 비파이프라인 CPU에서 IR은 전체 실행 기간 동안 각 명령어를 보유합니다.
  • 파이프라인 아키텍처에서는 여러 파이프라인 단계에 여러 IR이 존재할 수 있습니다.
  • IR의 출력은 종종 명령어 형식에 따라 특정 의미를 가진 필드로 분할됩니다.
  • 일부 복잡한 명령어 집합은 가변 길이 명령어를 처리하기 위한 추가 논리가 필요합니다.
  • IR은 제어 유닛을 데이터 버스로부터 격리하여, 현재 명령어가 실행되는 동안 메모리를 다른 연산에 사용할 수 있게 합니다.
graph LR
    DATA[Data Bus<br/>from Memory] --> IR[Instruction Register]
    CLK[Clock] --> IR
    LOAD[Load Enable] --> IR
    IR --> OUT[Output to Decoder<br/>Opcode & Operands]

참고: IR의 크기는 아키텍처의 명령어 크기와 일치합니다. 출력은 명령어 디코더 논리로 라우팅됩니다.

진리표 / 기능 표

IR은 주로 저장 요소로 기능합니다:

LOAD CLK 클럭 에지에서의 동작 IR 출력 (다음 상태)
1 입력 데이터 로드 입력 데이터
0 현재 값 유지 IR 출력 (현재)
X 0/↓ 변경 없음 IR 출력 (현재)

출력은 로드 연산 사이에 일반적으로 안정적이며 명령어 디코더에 지속적으로 사용 가능합니다.

특성

  • 입력 구성:

    • 데이터 입력 (I0-I7): 페치된 명령어를 수신하기 위해 메모리 데이터 버스에 연결된 8비트 병렬 입력.
    • 로드 인에이블 (LD): 명령어를 래치하기 위해 페치 사이클 동안 어서트되는 제어 신호.
    • 클럭 입력 (CLK): 상승 에지에서 로딩 동작을 동기화.
    • 주소 출력 인에이블 (A_OE): 버스 공유를 위한 주소 출력의 트라이스테이트 동작 제어.
  • 출력 구성:

    • 연산 코드 출력 (OP0-OP3): 연산 코드를 제공하는 4비트 출력, 제어 유닛의 즉시 접근을 위해 항상 활성화.
    • 주소 출력 (A0-A3): 주소 정보를 제공하는 4비트 출력, A_OE를 통해 트라이스테이트 가능.
    • 연산 코드 비트는 일반적으로 명령어 디코딩을 위해 제어 유닛으로 직접 라우팅.
    • 주소 비트는 활성화 시 메모리 주소 지정 및 점프 연산에 사용.
  • 기능:

    • 현재 페치된 명령어를 임시 저장.
    • 디코딩 및 실행 중 명령어를 안정적으로 유지.
    • 페치 사이클 후 데이터 버스의 변경으로부터 제어 유닛을 격리.
    • 명령어 디코더에 필요한 원시 명령어 비트 제공.
  • 전파 지연:

    • 클럭-출력 지연: 로드 연산 중 클럭 에지 후 출력에서 명령어가 사용 가능해지는 시간.
    • 클럭 및 로드 신호에 대한 데이터 입력의 셋업/홀드 시간 요구 사항.
  • 회로 복잡도:

    • 코어: 명령어 폭의 각 비트에 대한 D 플립플롭으로 구성된 병렬 입력, 병렬 출력 레지스터.
    • LOAD 신호를 위한 제어 논리.

구현 방법

  1. D 플립플롭 배열: 가장 일반적인 방법으로, 명령어 워드의 각 비트에 대해 하나의 D 플립플롭을 사용하며, 공통 LOAD 신호로 동시에 클럭됩니다.
  2. 표준 레지스터 IC: 기성품 레지스터 IC를 사용 (예: 8비트 명령어용 74HC374, 74HC574).
  3. FPGA/ASIC 구현: 더 큰 CPU 설계 내에서 HDL 코드로 합성됩니다.

응용

  • 명령어 디코드 및 실행 사이클: CPU의 페치-디코드-실행 사이클의 중심 부품.
  • CPU 제어 유닛: 명령어 디코더 논리에 입력을 제공하며, 이는 다시 CPU의 나머지 부분에 대한 제어 신호를 생성합니다.
  • 파이프라인 단계: 파이프라인 프로세서에서 IR은 종종 명령어 디코드(ID) 파이프라인 단계 내에 존재합니다.

제한 사항

  • 고정 폭: IR 크기는 CPU가 직접 처리할 수 있는 최대 명령어 크기를 결정합니다.
  • 병목: 일부 오래된 아키텍처에서 IR로의 페치가 성능 병목이 될 수 있으며, 명령어 프리페치 및 파이프라이닝과 같은 기술로 해결됩니다.

회로 구현 세부 사항

D 플립플롭으로 구현된 8비트 IR:

graph LR
    D0[Data_In 0] --> FF0[D Flip-Flop 0]
    D1[Data_In 1] --> FF1[D Flip-Flop 1]
    D2[Data_In 2] --> FF2[D Flip-Flop 2]
    D7[Data_In 7] --> FF7[D Flip-Flop 7]
    
    CLK[Clock] --> FF0
    CLK --> FF1
    CLK --> FF2
    CLK --> FF7
    
    LOAD[Load Enable] --> FF0
    LOAD --> FF1
    LOAD --> FF2
    LOAD --> FF7
    
    FF0 --> OUT0[IR_Out 0]
    FF1 --> OUT1[IR_Out 1]
    FF2 --> OUT2[IR_Out 2]
    FF7 --> OUT7[IR_Out 7]

모든 플립플롭은 동일한 Clock (CLK) 및 Load Enable (LOAD) 신호를 공유합니다.

관련 부품

  • 프로그램 카운터 (PC): IR에 로드될 명령어를 페치하기 위한 주소를 제공합니다.
  • 메모리 (RAM/ROM): 명령어를 저장합니다.
  • 데이터 버스: 메모리에서 IR로 명령어를 전달합니다.
  • 제어 유닛: IR과 명령어 디코더를 포함합니다.
  • 명령어 디코더: 명령어를 해석하기 위해 IR의 출력을 읽습니다.
  • ALU: 디코딩된 명령어에 의해 지정된 연산을 실행합니다.
  • 레지스터: IR에 저장된 명령어 내의 필드에 의해 지정된 피연산자를 보유할 수 있습니다.

school 학습 경로

arrow_back 사전 요구 사항

arrow_forward 다음 단계

help_outline 자주 묻는 질문

명령어 레지스터란 무엇인가요?

IR은 메모리에서 인출한 명령어를 보유합니다. 그 내용은 제어 장치에 의해 해석되어 어떤 연산을 수행할지 결정합니다.

IR에는 어떤 정보가 포함되나요?

IR은 일반적으로 명령어 형식에 따라 연산 코드(opcode)와 피연산자 주소 또는 즉시값을 포함합니다.

play_arrow 실시간 회로 실행

다른 컴포넌트 보기