notion으로 작성됨
https://leeward-periodical-c43.notion.site/Chapter4-79d254dfb4a649c8b03b36877a1062c5?pvs=4
Chapter4 레지스터 전송과 마이크로 연산
레지스터 전송 언어
leeward-periodical-c43.notion.site
Chapter4 레지스터 전송과 마이크로 연산
태그: 마이크로 연산, 버스
레지스터 전송 언어
레지스터에 저장된 데이터를 가지고 실행되는 동작을 마이크로 연산(micro-operation)이라고 한다.
예를 들어, 시프트(shift), 카운트(count), 클리어(clear), 로드(load) 등이 있다.
디지털 컴퓨터를 정의하기 위해서 다음을 규정해야 한다.
- 레지스터의 종류와 기능
- 레지스터의 이진 정보를 가지고 수행되는 마이크로 연산들
- 마이크로 연산을 제어하는 제어 기능
레지스터간의 마이크로 연산을 간단하고 명료하기 표현하기 위해서 사용하는 기호를 레지스터 전송 언어라고 한다.
레지스터 전송
레지스터는 그 기능을 나타내기위해 앞글자를 따서 간단하게 표현한다. 예를 들어서,
- MAR : 메모리 주소 레지스터
- PC : 프로그램 카운터
- IR : 명령어 레지스터
- R1 : 프로세서 레지스터
- 등등

레지스터의 표현 방법
레지스터의 정보 전송은 치환기호를 사용하여 나타낸다.
- R2←R1 : R1의 내용을 R2로 전송한다.
- IF(P = 1) then (R2←R1) : 제어 함수(P)는 0또는 1의 값을 갖는 부울 변수다. 즉, P=1이면 전송 동작을 한다. 라는 뜻

이 그림은 R1에서 R2로 전송을 설명하는 블럭도이다.
R1의 n출력이 R2의 n입력으로 연결되어 있다. 여기서 n은 레지스터의 비트 수를 의미한다. R2는 제어 변수 P에 연결되어 있고, 클럭과 동기되어 동작한다.
P = 1이면 클럭의 상승 엣지(t)일 때, R1의 데이터가 R2로 load되고, 다음 상승 엣지(t + 1)에서 P가 0으로 되돌어가며 load가 비활성화 된다.
레지스터 전송 기본 기호

버스와 메모리 전송
전형적인 디지털 컴퓨터에서는 많은 레지스터와 레지스터들 사이의 정보 전송을 위한 경로를 가지고 있다. 근데 각각의 독립된 라인으로 정보전달을 하려면 매우 비효율 적이다. 그래서 공통의 버스(bus) 시스템을 사용한다.

이 그림에서는 D, C, B, A 4개의 레지스터가 있다. 각 레지스터는 0~3까지 4개의 비트를 가지고 있으며, 레지스터의 0번 비트는 MUX의 0번 입력 ~ 3번 비트는 MUX의 3번 입력에 들어간다.
만약 셀렉션 비트가 S1S0 = 00 이라면, 모든 멀티플렉서의 데이터 입력 0이 선택되기 때문에 레지스터 A의 내용이 버스에 전달된다.
같은 방식으로 S1S0 = 01, S1S0 = 10, S1S0 = 11일 때 각각 레지스터가 선택되게 된다.
일반적으로 n비트의 k개의 레지스터를 멀티플렉스하여 n라인의 공통 버스 만드는 버스 시스템을 만들기 위해서는, n개의 k X 1의 멀티플렉서가 필요하다.
예를 들어, 16비트 의 8개 레지스터에 대한 버스는 16개의 멀티플렉서, 8개의 데이터 입력, 3개의 선택 입력(셀렉션 비트)를 가진다.
3-상태 버스 버퍼
생략
산술 마이크로 연산
마이크로 연산은 레지스터에서 수행되는 기본적인 연산으로 흔히 4가지로 분류된다.
- 레지스터 사이에서 이진 정보 전송 : 레지스터 전송 마이크로 연산
- 레지스터에 있는 수치 데이터를 산술 연산 : 산술 마이크로 연산
- 레지스터에 있는 비수치 데이터를 비트 조작 연산 수행 : 논리 마이크로 연산
- 레지스터에 있는 데이터에 대해 시프트 연산 수행 : 시프트 마이크로 연산

위 그림을 살펴보자.
첫 번째 살펴보자, R3 ← R1 + R2 는 R1과 R2의 값을 더해서 R3로 전송한다.
다섯 번째 뺄셈 연산은 R3 ← R1 + R2(를1의 보수 취한다) + 1(2의 보수를 취한다) 이다.
뺄셈 연산은 보통 보수와 덧셈을 이용하기 때문이다.
대부분의 컴퓨터에서 곱셈 연산은 여러개의 덧셈과 시프트 마이크로 연산으로 구현되며, 나눗셈은 여러개의 뺄셈과 시프트 마이크로 연산으로 구현된다.
이진 가산기
두 비트와 이전 캐리의 산술 합을 계산하는 회로를 전가산기(full-adder)라고 하며, 임의의 길이를 가진 두 이진수에 대한 덧셈을 수행하는 회로를 이진 가산기라고 한다(binary adder).

4-Bit Binary Adder
이진 가산기를 여러개의 전가산기를 직렬로 연결하여 이전 것의 캐리 출력이 다음 것의 캐리로 되도록 구성한다. 일반적으로 n비트 이진 가산기는 n개의 전가산기로 구성된다. A, B입력을 위한 n개의 데이터 비트는 각각 한개의 레지스터로부터 나온다.
(Half Adder과 Full Adder의 회로 구현은 쉬운데, XOR게이트를 몇개만 연결하면 된다)
이진 가감산기
이진수의 뺄셈을 일반적으로 2의 보수를 이용한 덧셈으로 계산된다. 따라서 아래그림처럼 XOR게이트를 추가해준다면 덧셈과 뺄셈 연산은 하나의 동일한 회로로 구현될 수 있다.
이 회로는 모드(mode)입력 M이 0이면 가산기로 동작, 1이면 감산기로 동작한다.

이진 인크리멘터
인크리멘트 마이크로 연산은 레지스터의 값에 1을 더하는 것이다.
이것은 이진카운터로 쉽게 구현할 수 있을 것 같다. 즉, 이진카운터에서 Enable이 활성화될 때마다 클럭 펄스 변이에 의해 레지스터값이 1씩 증가한다. → 이렇게 하면 순차회로이다. 이진카운터는 JK카운터로 구성하므로.
하지만 인크리멘트 마이크로 연산이 특정한 레지스터와는 관계없이 조합회로에 의해서만 수행되어야 할 경우도 있는데, 이때는 반가산기(half-adder, HA)를 직렬로 연결하여 구현한다. 아래의 블럭도는 4비트 조합 인크리멘터이다.

최하위 비트의 해당하는 반가산기의 입력은 1이고, 다른 하나는 증가 되어야 할 숫자의 최하위 비트에 연결된다. 반가산기의 출력은 다른 반가산기의 입력이 되어, A0-A3까지의 입력을 1씩 증가시킨 출력(S0-S3)을 만들어낸다. 입력된 이진수가 1111이라면 출력 캐리(C4)가 1이되고 S3는 0이된다.
산술 회로

이 블럭도는, 4개의 전가산기와 4개의 멀티플렉서로 이루어진 4비트 산술 회로이다.
2개의 4비트 입력(A0-A3, B0-B3 입력)과 출력D가 존재한다. 입력 A는 전가산기와 직접 연결되고, 입력 B는 멀티플렉서의 입력에 연결된다. 멀티플렉서는 B와 B의 보수, 그리고 논리 0과 1을 입력으로 받으며, 2개의 셀렉션 비트(S1, S0)에 의해서 출력을 선택한다. Cin은 최하위 FA에 입력되고, 나머지 Cout은 이어져있는 FA에 각각 들어간다.
여기서 A는 X에 들어가는 4비트 이진수이다. 멀티플렉서에서 2개의 선택입력 S1과 S0으로 Y의 값을 제어하고, Cin의 값을 0이나 1로 선택함으로써 아래의 table과 같은 8가지 연산이 가능하다.
회로도를 보며 이해해보자.

논리 마이크로 연산
논리 마이크로 연산은 레지스터에 저장된 비트열에 대한 이진 연산이다.
예를 들어, A ← A xor B는, A와 B를 각 비트별로 연산이 수행됨을 의미한다.
아래에 그림처럼 XOR연산을 A와 B에 대해서 실행한다.

논리 마이크로 연산은 이진 데이터의 비트조작, 논리 적인 결정을 내릴 때 사용한다.
논리 마이크로 연산표
생략82p
하드웨어 구현
논리 마이크로 연산을 구현하기 위해서 각 비트마다 논리 게이트가 필요하며, 대부분의 컴퓨터에서는 16가지 논리 마이크로 연산 중에서 단지 4개의 연산 AND | OR | XOR | Complement 을 사용한다.

위 블럭도는 말한대로 4가지의 논리 마이크로 연산을 하는 회로의 한 부분을 보여준다. 4개의 게이트와 2개의 셀렉션 비트로 구성된다. 각 게이트가 정해진 논리 연산을 수행하고 멀티플렉서가 4개 중에서 최종 출력값을 결정한다.
n비트 회로를 구성하기 위해서는 위 그림과 같은 회로를 n번 반복하면 된다.
응용
생략
시프트 마이크로 연산
시프트 마이크로 연산은 데이터의 직렬 전송을 위해서 사용된다. 산술이나 논리 연산 및 다른 데이터 처리 동작과 연계하여 사용 가능.
- 논리 시프트(logical shift) : 직렬 입력으로 0이 전송되는 것
- 기호 : shl, shr
- 순환 시프트(circular shift) : 시프트 레지스터의 직렬 출력을 직렬 입력에 연결함으로써 원래 저장되어 있던 정보의 손실 없이 비트들을 순환
- 기호 : cil, cir
- 산술 시프트(arithmetic shift) : 부호가 있는 이진수를 시프트 한다.
- 왼쪽 시프트 : 2를 곱한다
- 오른쪽 시프트 : 2를 나눈다
- 부호비트인 맨 왼쪽 비트는 시프트되지 않으므로 변화가 없다

위 그림은 오른쪽 산술 시프트이다. 여기서 맨 상위 비트인 R(n-1)은 부호비트라서 시프트 되지 않는다. 따라서 변화가 없다. 나머지 비트들은 오른쪽으로 이동한다. 원래 R0비트는 값을 잃어버린다.
만약, 왼쪽 산술 시프트라면 원래의 R(n-1)은 R(n-2)로 바뀌게 된다. 하지만, R(n-1)과 R(n-2)가 서로 다른 보수 관계라면 부호 비트에 반전이 발생하는데 이는 원래 레지스터 값에 2를 곱하여 오버플로가 일어났음을 의미한다.
오버플로 감지 할 수 있긴 함. → 자세히는 모름
하드웨어 구현

병렬 로드를 가지는 양방향 시프트 레지스터를 사용할 수 있다.
산술 논리 시프트 장치
컴퓨터에서는 각 마이크로 연산마다 독립된 레지스터를 두는 것 대신 산술 논리 장치(ALU)라고 하는 공용 연산 장치에 연결된 레지스터 그룹을 사용한다.

산술 논리 시프트 장치의 한 면을 보여준다.
셀렉션 비트(S1, S0)으로 특정한 마이크로 연산이 선택되고, 출력의 4 X 1 MUX에 의해 산출 출력(D)과 논리 출력(E)중 하나가 선택된다. 다른 두 입력인(Ai-1, Ai+1)은 시프트 연산을 위해서, 그리고 나머지 셀렉션 비트(S3, S2)가 멀티플렉서의 출력을 결정한다. 설명은 여기까지
n비트 ALU를 구성하기 위해선, n개가 필요하고, C출력(캐리)는 다음 단의 캐리 입력에 연결되어야 한다.
'컴퓨터 공학(Computer Science) > 컴퓨터 구조' 카테고리의 다른 글
컴퓨터 구조, ARM구조 간단 요약 (1) | 2023.11.23 |
---|---|
(컴퓨터 구조1)디코더, 멀티플렉서, 레지스터, 메모리 (0) | 2023.08.16 |