포스트

임베디드 스터디 - CPU

임베디드 스터디 - CPU

이번 글 참고자료:
정익사, 컴퓨터 구조의 이해

CPU (Central Processing Unit)

  • 중앙 처리 장치(CPU)의 기능은 메모리의 프로그램을 읽어 명령어를 해석하고, 해석된 명령을 수행하는 것이다.
  • CPU는 다음과 같이 구성된다.
    • 제어 장치 (CU, Control Unit)
    • 처리기 (PU, Processor Unit)
      • 연산 장치 (ALU, Arithmetic Logical Unit)
      • 범용 레지스터 (GPR, General Purpose Register)
      • 특수 레지스터 (SFR, Special Function Register)

CPU구조

범용 레지스터

  • 프로그램의 진행 도중 수시로 사용되는 데이터, 연산 결과를 일시적으로 기억하는데 사용되는 기억 장치
  • CPU의 종류에 따라 범용 레지스터의 구조는 다양하지만, 기본적으로 여러 레지스터를 묶어 구성된다.

특수 레지스터

  • 특수 레지스터는 각각의 역할이 고정되어 있다.
    • 프로그램 카운터(PC, Program Counter) : 현재 처리하려는 데이터가 저장되어 있는 메모리의 주소를 지정하는 레지스터, 데이터 인출 후 자동으로 다음 수행할 명령어 주소를 지정한다.
      • Increment(다음 주소 지정), Load(명령어 주소 저장) 기능으로 구성됨
    • 명령어 레지스터(IR, Instruction Register) : 명령어를 기억하는 레지스터. 명령어 해독기에서 명령 해독 후 제어 신호로 사용된다.
    • 누산기(Accumulator) : 산술 논리 연산에서 오퍼랜드나 연산 결과를 일시적으로 저장하는 레지스터
    • 스택(Stack) : 범용 레지스터, 프로그램 카운터 등의 내용을 일시적으로 저장하는 장치. LIFO(Last In First Out) 구조.
      • 스택 포인터(SP, Stack Pointer) : 스택의 최상단(top) 주소를 가리키는 레지스터
      • 스택 영역 : 실질적으로 데이터를 저장하는 레지스터

명령 수행

  • CPU의 명령은 3가지 동작으로 사이클을 이룬다.
    • Fetch : PC가 가르키는 주소에서 명령어를 가져온다.
    • Decode : 명령어를 해독한다.
    • Execute : 해독한 명령어를 바탕으로 연산을 수행한다.
  • 그 외 Interrupt, Indirect Cycle이 있다.
    • Interrupt : 명령 실행 중 외부 장치(입출력 장치 등)에 의해 인터럽트가 들어오면 그에 맞는 서비스를 제공
    • Indirect : 명령어가 간접 주소 지정 방식일 때 유호 주소를 읽어 들이는 사이클

레지스터 전송

  • 레지스터 혹은 메모리에 저장되어 있는 이진 데이터를 전송하는 작업
    • 하나의 레지스터 전송 실행 동작을 하나의 마이크로 오퍼레이션(Micro Operation)이라고 함
  • 레지스터 전송에는 다음과 같은 용어를 사용한다.
    • 이진수 정보 : 레지스터 내부에 저장되는 이진수
    • 마이크로 오퍼레이션 : 한 개의 클록 펄스에 실행되는 동작
    • 제어 함수 : 한 번에 한 개의 오퍼레이션을 순차적으로 실행하는 기능
    • 레지스터 전송 언어 : 레지스터 동작을 표현하는 기호

      기호의미예시
      문자와 숫자레지스터를 나타냄$A$, $MBR$, $R3$
      첨자레지스터의 비트$A_2$
      화살표데이터의 전송$A$ ← $B$
      콜론 (:)제어 함수 표시$P:$ , $X’T0:$
      콤마 (,)두 마이크로 오퍼레이션 구분$A$ ← $B$ , $B$ ← $A$
      소괄호레지스터의 부분 표시$I(1-5)$, $MBR(AD)$
      대괄호메모리 전송에 쓰이는 번지를 표시$MBR ← M[MAR]$

직렬 전송

  • 레지스터의 내용을 시프트하며 한 번에 한 비트씩 전송하는 동작
  • 4bit 레지스터 B에서 4bit 레지스터 A로의 직렬 전송은 다음과 같은 오퍼레이션을 수행한다.
    • $A_1$ ← $B_4$, $B_1$ ← $B_4$, $A_i$ ← $A_{i-1}$, $B_i$ ← $B_{i-1}$, $i=2, 3, 4, \cdots$
    • 시프트 레지스터의 동작을 레지스터 전송 언어로 표헌한 내용이다.

병렬 전송

  • 레지스터의 내용을 한 클럭 펄스 동안 동시에 병렬로 전송하는 동작
  1. 포인트 투 포인트 전송
    • 특정한 레지스터에서 지정된 레지스터로 단일 전송하는 동작
      • $xT_{1}$ : $A$ ← $B$
        if ($x$ and $T_{1}$) then ($A$ ← $B$)
  2. 멀티 포인트 전송
    • 여러 개의 레지스터들로부터 특정한 레지스터로 데이터를 전송하는 동작
    • Multiplexer-based transfer 라고도 함
    • 2개의 레지스터 $A$,$B$에서 레지스터 $C$로의 멀티 포인트 전송은 다음과 같이 동작한다.
      • if ($T_{1} = 1$) then ($C$ ← $A$) else if ($T_{2} = 1$) then ($C$ ← $B$)
        $T_{1}$ : $C$ ← $A$
        $T_{2}$ : $C$ ← $B$
  3. 버스 전송
    • 여러 개의 레지스터가 공통의 버스 선을 공유하면서 상호 간 데이터를 전송하는 동작
    • 포인트 투 포인트, 멀티 포인트보다 경제적이다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.