본 포스팅은 ‘Mano의 컴퓨터시스템구조’ 교재를 참고했습니다.
레지스터 전송 언어
레지스터에 저장된 데이터를 가지고 실행되는 동작을 마이크로 연산(micro-operation)이라고 한다. 디지털 컴퓨터의 구조를 정의하기 위하여 레지스터의 종류와 기능, 마이크로 연산, 제어 기능 등을 규정해야 하는데, 레지스터 간의 마이크로 연산 전송을 보다 간단하고 명료하게 표시하기 위해 사용하는 기호를 레지스터 전송 언어(register transfer language)라고 한다.
레지스터 전송
레지스터는 머리글자를 대문자로 표시한다. 메모리 주소 레지스터는 MAR, 프로그램 카운터는 PC, 명령어 레지스터는 IR을 나타낸다.
레지스터들 사이의 정보 전송은 아래와 같이 나타낼 수 있다.
$$ \text{R2} \leftarrow \text{R1} $$
병렬 로드 기능과 같이 제어 조건이 발생할 때만 레지스터 전송이 이루어 진다면 아래와 같이 나타낼 수 있다.
$$ \text{if} \ (P=1) \ \text{then} \ (\text{R2} \leftarrow \text{R1}) $$
위 문장을 제어 함수를 사용하여 아래와 같이 나타낼 수도 있다.
$$ P:\text{R2} \leftarrow \text{R1} $$
$T=1$일 때, 두 레지스터의 내용이 교체된다면 아래와 같이 나타낼 수 있다.
$$ T:\text{R2} \leftarrow \text{R1}, \ \text{R1} \leftarrow \text{R2} $$
정리하자면, 레지스터는 영어 대문자+숫자 로 표현된다. 괄호는 레지스터의 일부분을 나타내고, 화살표는 전송의 방향을 나타내며, 쉼표는 동시에 일어나는 여러 동작을 나타낸다.
버스 시스템
각각의 레지스터가 모두 독립된 전송 라인을 사용한다면 그 숫자가 너무 많아지기 때문에, 공통의 버스(bus)을 두어 효율적인 방법을 사용한다.
공통 버스를 구성하는 방법으로 위 그림처럼 멀티플렉서를 이용하는 것이 있다. 각 레지스터에서 동일한 위치의 비트들은 모두 하나의 멀티플렉서에 연결되어 하나의 버스 라인을 형성한다.
일반적으로 $n$ 비트의 $k$ 레지스터를 멀티플렉스하여 $n$라인의 공통 버스를 만드는 버스 시스템에서는 $n$개의 $k \times 1$ 멀티플렉서가 필요하다.
버스 정보를 많은 목적 레지스터 중에서 하나로 전송하기 위해서는 버스라인을 모든 레지스터에 연결하고 로드 제어를 통해 특정한 목적 레지스터를 선택하면 된다.
$$ BUS \leftarrow C, \ R1 \leftarrow BUS $$
버스가 시스템에 존재한다고 가정하면, $R1 \leftarrow C$ 와 같이 간소화할 수 있다.
메모리 전송
메모리 워드는 $M$으로 나타내며, 주소는 $M$ 다음의 대괄호 안에 표시한다.
메모리 주소를 주소 레지스터(AR)로부터 받고, 데이터를 데이터 레지스터(DR)에 나타내면 다음과 같다.
$$ \text{Read}: DR \leftarrow M[AR] $$
반대로 R1에 있는 데이터를 AR에 지정된 메모리주소로 전송하는 쓰기 동작은 다음과 같다.
$$ \text{Write}: M[AR] \leftarrow DR $$