본문 바로가기

마이크로연산과 제어 신호

레지스터 전송·산술·논리·시프트 마이크로연산을 제어 신호와 자원 충돌로 해석합니다.

LOAD 명령 하나도 내부에서는 주소 전송·메모리 읽기·레지스터 기록의 여러 동작으로 나뉠 수 있습니다. 마이크로연산은 레지스터 수준에서 수행하는 작은 이동·계산·논리·시프트 동작을 뜻합니다.

레지스터 전송 표기 읽기

R2 ← R1은 R1의 값을 R2에 복사합니다. R1이 지워지는 것은 아닙니다. P: R2 ← R1은 제어 조건 P일 때만 전송한다는 뜻입니다. 동기 모델에서 결과는 정해진 클록 에지에 저장됩니다. R1 ← R2, R2 ← R1을 같은 에지에 수행하면 두 이전 값이 교환됩니다. 순서대로 대입하는 프로그램과 같은 의미가 아닙니다.

마이크로연산은 레지스터 전송, 산술(+1·덧셈·뺄셈), 논리(AND·OR·XOR), 시프트로 분류할 수 있습니다. 산술 오른쪽 시프트는 부호 비트를 유지하는 모델이고 논리 오른쪽 시프트는 0을 채웁니다. 이 차이는 2의 보수 해석과 연결됩니다.

LOAD를 여러 단계로 실행하기

교육용 데이터 경로에 MAR·MDR·IR이 있고 메모리 읽기는 요청 다음 단계에 완료된다고 정의합니다. 명령 하나는 명령 위치 하나를 차지합니다.

단계동작필요한 제어의 목적
T0MAR ← PC메모리 주소 입력 선택·MAR 기록
T1MDR ← M[MAR], PC ← PC+1읽기 완료 데이터 저장·PC 증가
T2IR ← MDR명령 기록
T3MAR ← IR의 주소 필드데이터 주소 선택
T4MDR ← M[MAR]데이터 읽기·저장
T5R1 ← 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에서 받는 두 번째 조합은 여러 목적지 동시 기록을 허용한 이 모델에서는 가능합니다.

다음 제어장치 구현에서 명령·시간·상태가 이 제어표를 어떻게 선택하는지 봅니다.