오늘부터는 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로 돌아갑니다.
'Digital Design > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조] ASIC Design Flow (2) | 2023.03.16 |
---|---|
[컴퓨터구조] 16bit CPU 설계 (Design with Verilog) (2) | 2023.01.12 |
[메모리] SRAM에 데이터 쓰고 읽기 (Design with Verilog) (0) | 2023.01.08 |
[메모리] SRAM Full Custom Design (Layout) (0) | 2023.01.08 |
[메모리] SRAM Full Custom Design (Schematic) (0) | 2023.01.08 |
댓글