CPU 데이터 경로
PC·IR·레지스터·ALU·메모리의 역할을 구분하고 인출·해독·실행·저장을 상태표로 추적합니다.
R1 = R1 + R2라는 계산이 CPU에서 일어나려면 두 값을 ALU로 보내고 결과를 R1에 기록해야 합니다. 데이터 경로(datapath)는 값이 이동하고 계산되는 구성이고, 제어는 그 경로에서 이번 단계에 할 일을 고릅니다.
가까운 저장 자리와 명령 위치
PC는 명령의 위치, IR(Instruction Register)은 현재 가져온 명령을 보관합니다. 일반 레지스터는 계산에 쓸 값을 저장합니다. 메모리 주소를 보관하는 MAR, 가져오거나 보낼 데이터를 보관하는 MDR은 학습 모델에서 유용하지만 모든 실제 CPU가 이 이름의 단일 레지스터로 구현되는 것은 아닙니다.
ALU 앞의 입력 선택 회로, 결과를 보낼 레지스터, 읽기·쓰기 신호가 함께 필요합니다. “CPU의 뇌”라는 비유보다 어떤 저장 자리가 어떤 값으로 바뀌는지 보는 편이 정확합니다.
두 입력을 읽고 계산한 값을 목적지에 씁니다
ADD의 두 값을 읽는다. 결과를 목적 레지스터에 쓴다. 각 단계의 값과 전환 이유를 비교합니다.
컴퓨터구조 · 읽는 순서
두 입력을 읽고 계산한 값을 목적지에 씁니다
이 그림은 ADD R1,R2의 값 이동만 보여 줍니다. 명령 인출과 제어 신호는 본문에서 따로 추적합니다.
원래 R1=7은 입력으로 읽고 새 R1=12는 계산 뒤 기록합니다. 레지스터를 복사해서 읽어도 R2=5는 유지됩니다.
이 예의 조건
- 본문과 전체 도표의 예를 따라 레지스터 읽기부터 R1 쓰기까지 진행합니다.
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| 레지스터 읽기 ADD의 두 값을 읽는다. |
|
|
| ALU 덧셈 선택한 연산으로 두 값을 더한다. |
|
|
| R1 쓰기 결과를 목적 레지스터에 쓴다. |
|
|
두 입력을 읽고 계산한 값을 목적지에 씁니다
ADD의 두 값을 읽는다. 결과를 목적 레지스터에 쓴다. 각 단계의 값과 전환 이유를 비교합니다.
컴퓨터구조 · 읽는 순서
두 입력을 읽고 계산한 값을 목적지에 씁니다
이 그림은 ADD R1,R2의 값 이동만 보여 줍니다. 명령 인출과 제어 신호는 본문에서 따로 추적합니다.
원래 R1=7은 입력으로 읽고 새 R1=12는 계산 뒤 기록합니다. 레지스터를 복사해서 읽어도 R2=5는 유지됩니다.
이 예의 조건
- 본문과 전체 도표의 예를 따라 레지스터 읽기부터 R1 쓰기까지 진행합니다.
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| 레지스터 읽기 ADD의 두 값을 읽는다. |
|
|
| ALU 덧셈 선택한 연산으로 두 값을 더한다. |
|
|
| R1 쓰기 결과를 목적 레지스터에 쓴다. |
|
|
인출부터 저장까지
여기서는 명령 메모리의 한 위치가 교육용 명령 하나를 저장하고 PC가 1씩 증가한다고 가정합니다. 실제 4바이트 ISA의 PC 증가량과 다릅니다. 처음 PC=0, R1=0, M[40]=7이며 명령 0은 LOAD R1, 40입니다.
| 단계 | 데이터 이동·동작 | 바뀌는 상태 |
|---|---|---|
| 인출 | IR ← 명령 메모리[PC] | IR에 LOAD, PC ← PC+1 |
| 해독 | LOAD와 R1·주소 40 해석 | 제어가 메모리 읽기를 선택 |
| 실행 | MDR ← 데이터 메모리[40] | MDR=7 |
| 기록 | R1 ← MDR | R1=7 |
다음 ADD R1, R2에서 R2=5이면 ALU가 7+5를 계산해 R1=12가 됩니다. STORE R1, 41을 실행하면 M[41]=12입니다. LOAD의 기록 대상은 레지스터, STORE의 기록 대상은 메모리입니다.
명령어 사이클은 이 기능상의 단계 묶음입니다. 단계마다 반드시 실제 클록 한 번이 걸리는 것은 아닙니다. 단일 사이클·다중 사이클·파이프라인 설계는 이 일을 다른 시간 배치로 구현합니다.
상태·제어·데이터를 구분하기
R1=12는 데이터 상태, RegWrite=1은 레지스터 기록을 허용하는 제어 신호입니다. ALU의 덧셈 결과가 존재해도 RegWrite가 0이면 지정 레지스터에 저장하지 않습니다. 반대로 저장 신호가 켜졌는데 입력 선택이 틀리면 엉뚱한 값을 기록합니다.
여러 동작을 같은 시간에 수행하려면 사용 자원이 충돌하지 않아야 합니다. 예를 들어 단일 포트 메모리로 명령 인출과 데이터 읽기를 동시에 요구하면 다른 설계 선택이 필요합니다. 이 문제는 파이프라인에서 다시 만납니다.
독립 문제: 마지막 결과만 보지 않기
초기 R1=2, R2=6, M[10]=9입니다. LOAD R1,10, ADD R1,R2, STORE R1,11의 각 명령 뒤 R1·R2·M[10]·M[11]을 적으세요. 마지막 STORE에서 제어가 실수로 RegWrite만 켜고 MemWrite를 끄면 M[11]=15라고 보장할 수 있나요?
힌트
기록 대상을 각 명령마다 표시하세요. 값이 ALU에 존재하는 것과 메모리에 쓰이는 것은 별개입니다.
풀이
R1은 9→15→15, R2는 계속 6, M[10]은 계속 9입니다. M[11]은 마지막에 15로 기록됩니다. MemWrite가 꺼진 오류 설계에서는 STORE의 의도한 기록이 발생하지 않으므로 M[11]=15를 보장할 수 없습니다. 중간 상태를 설명할 수 있으면 다음 명령어 집합에서 실행 가능한 교육용 CPU를 만들어 봅니다.