본문 바로가기
Digital Design/컴퓨터구조

[컴퓨터구조] CPU 작동 원리

by 스테고사우르스 2023. 1. 9.

오늘부터는 CPU에 대해 알아보겠습니다.

 

먼저 CPU란 무엇일까요?

 

CPU (Central Processing Unit): 중앙 처리 장치

 

CPU는 기억, 해석, 연산, 제어라는 매우 중요한 역할들을 도맡는,

컴퓨터의 대뇌라고 할 정도로 매우 중요한 부분입니다.

 

프로그램의 명령어를 해석하여 데이터를 연산/처리를 하고

그렇게 돌아가도록 제어해주는 기능을 내장한 칩이죠.

 


 

CPU는 4단계의 Cycle로 명령어를 처리합니다.

 

1. Fetch: 명령어 인출 - CPU에서 명령어를 읽어옴
2. Decode: 명령어 해독 - 읽어온 명령어를 해독
3. Execute: 명령어 실행 - 해독한 명령어를 실행
4. Store: 결과 저장 - 계산 결과를 저장

 

각각의 사이클에서 어떤 일이 벌어지는 지 알아보기 전에 레지스터에 대해 알고 있어야 합니다.

 


 

CPU에는 특수한 목적을 가지고 있는 레지스터들이 있습니다.

 

AR (Address Register): PC에 저장된 명령어가 주소 버스로 이동하기 전에 일시 저장
PC (Program Counter): 다음 명령어의 주소를 가지고 있음
IR (Instruction Register): 가장 최근에 인출된 명령어 저장 == 현재 실행중인 명령어
DR (Data Register): Operand 저장
AC (Accumulator): 연산 결과 일시 저장
Rn (General Register): 임시 데이터 저장

 

이렇게 여러가지 레지스터들이 있는데요,

CPU가 동작하면서 명령어와 연산 결과 등이 레지스터들 사이에서 이리저리 옮겨다닙니다.

 


 

명령어에서 Operand의 주소가 어떻게 지정될까요?

 

3가지로 구분할 수 있습니다.

 

Immediate Addressing (즉시 주소 지정 방식): Operand == data
Direct Addressing (직접 주소 지정 방식): Operand == addr [data]
Indirect Addressing (간접 주소 지정 방식): Operand == addr [addr [data] ]

 

주소 지정을 간접적으로 할 수록 느려지겠지만 더 많은 주소 공간을 가질 수 있습니다.

 


 

그럼 이제 명령어는 어떤 구조로 이루어져 있을까요?

 

15 14 ~12 11 ~ 0
I Opcode 피연산자의 주소

16 bit CPU 기준으로 알아보겠습니다.

 

16bit cpu이기 때문에 명령어가 16bit의 길이를 가지고 있습니다.

 

MSB는 1bit으로 F/F입니다. 모드를 정한다고 이해해도 될 것 같아요.

 

14 ~ 12번째 비트는 Opcode로 실제로 어떤 동작을 할 지 정하는 명령어입니다.

 

나머지 11 ~ 0번째 비트는 피연산자의 주소를 담고 있습니다.

 


 

여기까지 알아봤으면 다시 처음으로 돌아가볼까요?

 

그림으로 그려서 보겠습니다.

 

 

명령어를 가져오면 15번째 비트는 F/F에 저장되고

Opcode는 디코더에서 해독됩니다.

나머지 피연산자의 주소 역시 따로 이동합니다.

 

아래쪽에 보면 Sequence Counter가 있는데

이 카운터에 의해 T0 ~ Tn까지 사이클을 돌게 됩니다.

 

그렇다면 각 사이클마다 어떤 동작을 할까요?

 

< Fetch & Decode >

T0: AR <= PC                                        PC가 가리키는 주소를 AR로 전송
T1: IR <= M [AR]                                   메모리의 [AR]번째 주소에 있는 값을 IR로 전송
      PC <= PC + 1                                  다음 명령어를 가져오기 위해 PC값 1 증가
T2: D7 ~ D0 (Decoder) <= IR [14:12]    Opcode 해독
      AR <= IR [11:0]                                피연산자의 주소정보를 전송
      I <= IR [15]                                       Addressing mode 코드 전송

 

< Execute & Store >

T3
D7' I (1 - - -): Indirect Address                            AR <= M [AR]
D7' I' (0 - - -): Direct Address                              Nothing
D7 I' (0111): Register - Reference Instruction
D7 I (1111): I/O Instruction

 

명령어에 따라 T3 ~ Tn까지 사이클이 돌게 됩니다.

 

모두 끝나면 Sequence Counter를 0으로 만들어주면서 다시 T0로 돌아갑니다.

 

 


 

 

댓글