마이크로연산과 제어 신호
레지스터 전송·산술·논리·시프트 마이크로연산을 제어 신호와 자원 충돌로 해석합니다.
LOAD 명령 하나도 내부에서는 주소 전송·메모리 읽기·레지스터 기록의 여러 동작으로 나뉠 수 있습니다. 마이크로연산은 레지스터 수준에서 수행하는 작은 이동·계산·논리·시프트 동작을 뜻합니다.
레지스터 전송 표기 읽기
R2 ← R1은 R1의 값을 R2에 복사합니다. R1이 지워지는 것은 아닙니다. P: R2 ← R1은 제어 조건 P일 때만 전송한다는 뜻입니다. 동기 모델에서 결과는 정해진 클록 에지에 저장됩니다. R1 ← R2, R2 ← R1을 같은 에지에 수행하면 두 이전 값이 교환됩니다. 순서대로 대입하는 프로그램과 같은 의미가 아닙니다.
마이크로연산은 레지스터 전송, 산술(+1·덧셈·뺄셈), 논리(AND·OR·XOR), 시프트로 분류할 수 있습니다. 산술 오른쪽 시프트는 부호 비트를 유지하는 모델이고 논리 오른쪽 시프트는 0을 채웁니다. 이 차이는 2의 보수 해석과 연결됩니다.
LOAD를 여러 단계로 실행하기
교육용 데이터 경로에 MAR·MDR·IR이 있고 메모리 읽기는 요청 다음 단계에 완료된다고 정의합니다. 명령 하나는 명령 위치 하나를 차지합니다.
| 단계 | 동작 | 필요한 제어의 목적 |
|---|---|---|
| T0 | MAR ← PC | 메모리 주소 입력 선택·MAR 기록 |
| T1 | MDR ← M[MAR], PC ← PC+1 | 읽기 완료 데이터 저장·PC 증가 |
| T2 | IR ← MDR | 명령 기록 |
| T3 | MAR ← IR의 주소 필드 | 데이터 주소 선택 |
| T4 | MDR ← M[MAR] | 데이터 읽기·저장 |
| T5 | R1 ← MDR | 결과 레지스터 기록 |
실제 메모리가 더 늦으면 T1·T4에서 완료를 기다려야 합니다. 이 표의 고정 시간은 모델의 가정이지 모든 RAM의 규칙이 아닙니다.
한 버스에는 한 출발지
내부 공유 버스 모델에서 R1·R2가 동시에 서로 다른 값을 버스에 내보내면 충돌합니다. 하나의 값이 버스에 있을 때 여러 목적지 레지스터가 같은 값을 받아들이는 것은 가능하게 설계할 수 있습니다. 출발지 선택·목적지 기록을 구분하세요.
r1, r2 = 3, 8
old_r1, old_r2 = r1, r2
r1, r2 = old_r2, old_r1
assert (r1, r2) == (8, 3)이 코드는 같은 에지의 동시 갱신을 이전 값 복사로 모델링합니다. r1=r2 다음 r2=r1을 순서대로 실행하면 둘 다 8이 돼 같은 모델이 아닙니다.
독립 문제: 제어표의 충돌
내부 버스 하나에서 R3 ← R1과 R4 ← R2를 같은 단계에 수행하려 합니다. R1=5, R2=9일 때 왜 안 되는지 설명하고 단계 두 개로 고치세요. R3 ← R1과 R4 ← R1은 같은 단계에 가능한지도 이 모델의 규칙으로 판단하세요.
힌트
버스에 올라가는 값이 몇 개인지 세세요. 목적지 수만으로 충돌을 판단하지 않습니다.
풀이
첫 조합은 출발지 두 개가 다른 값을 내보내므로 단일 버스에서 동시에 할 수 없습니다. T0에 R1을 내보내 R3에 기록하고 T1에 R2를 내보내 R4에 기록합니다. 둘 다 R1에서 받는 두 번째 조합은 여러 목적지 동시 기록을 허용한 이 모델에서는 가능합니다.
다음 제어장치 구현에서 명령·시간·상태가 이 제어표를 어떻게 선택하는지 봅니다.