[ 관련 글 ]
■ 전송 마이크로연산
[컴퓨터구조] Register Transfer 연산 의미, 그리고 BUS설계가 중요한 이유와 설계방법 | 하드웨어
■ 산술 마이크로연산
[컴퓨터구조] Binary Adder, 그리고 Binary Adder-Subtractor | 컴퓨터의 산술 연산 구조 | 하드웨어
[컴퓨터구조] Binary Incrementer | 컴퓨터의 산술 연산 구조 | 하드웨어
[컴퓨터구조] Arithmetic Circuits | 컴퓨터의 산술 연산 구조 | 하드웨어
■ 논리 마이크로연산
[컴퓨터구조] Logic Micro-operations | 컴퓨터의 논리 연산 구조 | 하드웨어
■ 이동 마이크로연산
[컴퓨터구조] Shift Micro-operations | 컴퓨터의 shift 연산 구조 | 하드웨어
[ 이번 글 내용 ]
- micro-operation
- 레지스터에 대한 배경지식 - 알면 skip
- Register Transfer이란?
register transfer language(RTL)는 또 무엇인가?
-----------------------------------------------------------
- BUS 설계가 중요한 이유
- BUS 설계 방법 2가지
1. multiplexer(MUX)를 사용하여 BUS 설계하기
2. Three-state bus buffers를 사용하여 BUS 설계하기
micro-operation이란?
디지털 모듈이라는 것은register, decoder, arithmetic element, control logic 들로 이루어져 있다. 이러한 여러 종류의 디지털 모듈들로 디지털 컴퓨터 시스템이 구성된다.
디지털 모듈은 어떻게 정의될까?
각 모듈이 가지고 있는 레지스터와, 이 레지스터 속에 저장된 데이터들에 대한 operation으로 정의된다. 이렇게 레지스터들에 저장된 2진 데이터에 취해지는 세부적인 operation을 micro-operation이라고 한다. 즉, micro-operation들을 통해 register 정보가 변경되거나, 다른 register에 정보를 덮어씌우게 된다. 조금 더 쉽게 말해서, 레지스터에 저장된 데이터에 대해 이뤄지는 기본적인 연산들이 마이크로 오퍼레이션이다. micro operation의 예시를 들면, 비트이동 연산인 shift, 그리고 count, clear, load, increment 등이 있다. 즉, 레지스터의 내용을 다른 레지스터로 옮기거나, 레지스터의 내용을 합하거나, 레지스터의 내용을 1 증가시키는 등이 마이크로 연산의 예시이다.
마이크로(μ) 오퍼레이션의 '종류'는 4가지다.
- register-transfer (레지스터 전송 μ연산)
- arithmetic (산술 μ연산)
- logic (논리 μ연산)
- shift (이동 μ연산)
오늘은 이 중에서 [ 레지스터 전송 마이크로연산 ] 관련 포스팅이다.
레지스터 전송 연산이 뭔지 확인하고,
BUS 설계가 중요한 이유를 간단히 알아보고,
BUS를 설계하는 두 가지 방법을 공부해보자.
- Multiflexer(MUX)를 통하여 설계
- Three-state buffers를 통하여 설계
레지스터에 대한 배경지식 - 알면 skip
계속 레지스터 이야기가 나올 테니, 레지스터에 대한 기본적 내용들을 훑고 가자.
◆ CPU 안에는 많은 레지스터가 있다.
레지스터란? CPU에서 데이터를 일시적으로 기억하는 메모리 장치
◆ 레지스터에는 여러 종류가 있다 :
정수 값을 저장할 수 있는 데이터 레지스터,
메모리 주소를 저장해두는 주소 레지스터,
부동소수점을 저장해두는 부동소수점 레지스터, 등..
(더 자세히 알고 싶으면 위키백과를 살짝 보자.)
◆ 컴퓨터 구조 중 레지스터를 바라볼 때 이런 생각을 해볼 수 있다.
1. 레지스터를 몇 비트로 구성할지
2. 레지스터를 총 몇개 만들지
3. 각 레지스터를 어떤 용도로 사용할지
참고로, 레지스터를 16비트로 구성하였다면 명령어 길이도 최대 16비트까지?
◆ 다음은 기본 레지스터의 일부이다.
- MAR (Memory Address Register)
AR로 많이 표기한다. 데이터의 주소를 기억하는 레지스터.
(ex: AR0, AR1, ..., AR31)
- PC (Program Counter)
다음번에 수행해야 하는 명령어에 대한 주소를 가리키고 있다.
- IR (Instruction Register)
현재 실행 중인 명령을 기억하는 레지스터.
PC가 가리키는 주소의 레지스터에 가서 명령을 IR이라는 레지스터에 저장하는 것이다.
- R1 (processor Register)
현재 계산 수행중인 값을 저장하는 데이터 레지스터이다.
(ex: R0, R1, ..., R31로 표기된다. 각 어떠한 R○은 특수한 이름이 붙을 수 있다. 이를테면 program counter인 PC라든지)
Register Transfer
Register Transfer이란 말 그대로 레지스터 전송, 전달을 의미한다. 레지스터 간, 또는 레지스터와 메모리 간, 또는 모듈간에 Register Transfer가 이루어진다. 레지스터간 데이터교환은 버스(BUS) 시스템에 의해 이루어진다.
Register Transfer의 각종 과정은 "R2<-R1"같이 표기하곤 하는데, 이러한 notation을 register transfer language, (RTL) 라고 부른다. 어셈블리 언어와 비슷하다.
즉, register transfer language란, register transfer level에서의 데이터 흐름을 기술하는데 사용된다. 다르게 말하면 각종 micro-operation의 과정을 표기하는 수단이다.
register transfer language의 각종 기호들은 이런 것이 있다. 더 자세히 보려면 이 사이트
기호(표현) | 설명 | 예시 |
글자나 숫자 | 레지스터 이름을 표현한다 | MAR, R1, R2, R3... |
괄호 () | 레지스터에서 어느 비트 부분인지를 표현한다. | R2(0-7) R2(L) 이는 즉, 만약 16비트 컴퓨터였다면, R2레지스터의 하위비트인 0~7비트임을 표현한다. |
화살표 <- | 데이터의 transfer을 의미한다. | R2<-R1 |
콤마 , | 두 microoperation을 구분한다. | R2<-R1, R3<-R4 |
콜론 : | 컨디션을 표현할때 쓰인다. | P: R2<-R1 if P=1 즉, P=1일때 R2<-R1을 수행하게 됨 |
Register transfer은 BUS를 통해 이루어진다. 즉, BUS를 통해 레지스터값들이 다른 레지스터로 전달이 된다.
참고로, 한 순간(time T)에는 한 데이터만 BUS를 통해 데이터가 전달될 수 있다. 즉, 한순간의 BUS에 BUS master는 최대 하나여야 한다. 그렇지 않으면 설계를 잘못 한 것이고, 데이터 충돌이 생긴다.
아래 내용을 잘 이해한다면 bus master가 어떤 레지스터가 되는지 이해가능하다.
그렇다면 우리는 BUS를 제대로 잘 설계할 줄 알아야겠다.
BUS를 만들어보자! 다음은 BUS를 만드는 두 가지 방법이다.
디자이너는 둘 중 하나를 선택하여 설계하면 된다.
BUS 설계하기
1. multiplexer(MUX)를 사용하여 BUS 설계하기
2. Three-state bus buffers를 사용하여 BUS 설계하기
1. multiplexer(MUX)를 사용하여 BUS 설계하기
4bits 레지스터를 사용하고 있는 컴퓨터를 예시로 들자.
그럼 아래 회로와 같이, BUS를 통해 4bits가 전달될 것이다.
이때, 4x1 사이즈의 MUX가 사용되고 있다.
이 부분 참고:
레지스터의 비트수가 MUX의 개수가 된다. 또한 MUX의 사이즈는 다루는 데이터의 수에 의해 정해진다.
아래 예시에서는 레지스터 총 A,B,C,D 4개를 다루느라 MUX의 사이즈가 4x1이고,
각 레지스터는 4비트짜리라서 MUX의 개수가 4개이다.
가장 왼쪽의 입력단에 S1, S0라고 표기되어 있는 것은 control signal(selection signal)이다.
4bits기 때문에 control signal이 2개인 것이고, 만약 8bits라면 control signal은 3개가 된다.
(왜? S0, S1, S2 입력값 000~111로는 총 0~7을 나타낼 수 있다.)
아무튼, 아래 위 상황에서 S0, S1이 0, 0으로 들어오면 어떻게 될까?
모든 MUX에 S0, S1로 0, 0이 들어갔다고 해보자. 즉, 모든 MUX에 00이라는 값이 들어갔다.
그러면 모든 MUX에서는 0을 선택하게 된다.
혹시 왜 0을 선택하게 되는지 이해 안가실까봐 부가설명:
if S0S1==00, Register selected is A
if S0S1==01, Register selected is B
if 10, register C
if 11, register D
즉, MUX3, MUX2, MUX1, MUX0에서는 각각 A3, A2, A1, A0를 출력한다.
이렇게 각 MUX에서 출력한 하나의 값들은 BUS에 실리게 된다.
다시 정리하면: S0, S1로 들어오는 값에 따라서 register A or B or C or D의 내용물이 BUS에 실리게 된다!
같은 말: S0, S1로 들어오는 비트에 따라서 4-bit 버스에서 전달되는 내용물은 A3A2A1A0거나, B3B2B1B0거나, C3C2C1C0거나, D3D2D1D0가 된다. 즉, S0S1로 들어오는 비트에 따라서 bus master은 register A거나, B거나, C거나, D이게 된다. 이렇게 BUS로 전달된 값은 목적지 레지스터에 담기게 된다.
notation에 대한 참고:
이를테면 BUS가 register C의 content를 전달했다고 하자.
그리고 이 결과를 전달할 목적지 레지스터가 R1이라는 레지스터였다고 하자.
그럼 아까 위에서 말했던,
register transfer language(RTL)을 통한 symbolic notation으로는 다음처럼 표기가능하다.
BUS <- C
R1 <- BUS
또는 간단하게 쓰면 R1 <- C
여기까지가 MUX로 구현한 BUS가 한 레지스터의 내용물을 전달하는 방법이다.
2. Three-state bus buffers를 사용하여 BUS 설계하기
간단히 말해서 버퍼는 입력값을 모아놓고 한번에 출력값으로 보낸다. 드는 비용 대비 데이터 전송량이 높아서 버퍼를 사용한다. 아무튼 지금은 버퍼 개념 자체가 핵심이 아니다.
일반적인 버퍼는 상태가 두 가지다. 간단하게, 입력이 0 or 1이고, 출력도 입력값과 동일한 0 or 1이다.
그런데 three-state buffers는 control signal 한개가 더 있다! 그래서 three-state buffers.
control signal이 1이면, 일반 버퍼와 동일한 기능을 한다. 즉, 입력값 변동없이 그대로 0, 1출력된다.
그러나 control signal이 0이면, 출력은 0도 1도 아닌 High-impedence다.
마찬가지로 4비트 버스를 예시로 설명하겠다.
각 레지스터는 4비트 레지스터이므로, 총 4개의 레지스터 A,B,C,D에는 각각 4비트가 저장되어 있다.
버스가 최종으로 전달할 목적지 레지스터의 비트 자리도 0, 1, 2, 3이 있는데
그중에서 비트 자리 0에 담는 결과만 보여주는 그림이다.
좌측 아래의 2x4 decoder를 보자. 여기에서,
입력은 selection signal인 S1, S0로 총 2개 있다. S1, S0의 값에 따라 출력은 0, 1, 2, 3 중 하나이다.
(왜 4개냐? S1S0== 00 or 01 or 10 or 11 이므로. 위에서 자세히 설명했다!)
S1, S0에 따라서 0,1,2,3 중 선택된 곳만 1값을 출력하고, 나머지는 모두 0값을 출력한다.
여기서 이런 기능을 하는 것이 decoder다.
만약 위처럼 4비트가 아니라 8비트 컴퓨터라면, 3x8 decoder가 되겠다. (쭉 잘 읽어왔으면 이해 가능하다. )
그래서 만약 S1S0가 11로 들어와서 decoder가 3을 출력하게 되었다면, 레지스터C의 D0, D1, D2, D3값만 통과고 나머지는 모두 탈락이다. 즉, S1S0가 11로 들어온다면 bus master는 register D이다. 아까 말했듯이 bus master는 최대 한 레지스터만 가능하다.
이렇게 bus master가 최대 하나만 되도록 BUS를 설계하는 것이 중요한데, 그중 하나가 바로 이 BUS인 것이다.
BUS를 제대로 설계하는 두가지 방법을 모두 소개했다. 둘 다 많이 쓰는 방법이고, 둘 다 bus master가 최대 하나만 될 수 있도록 잘 설계되어있다. 잘 이해하고 넘어가도록 하자.
'컴퓨터구조 & OS' 카테고리의 다른 글
[컴퓨터구조] Shift Micro-operations | 컴퓨터의 shift 연산 구조 | 하드웨어 (2) | 2021.10.12 |
---|---|
[컴퓨터구조] Logic Micro-operations | 컴퓨터의 논리 연산 구조 | 하드웨어 (1) | 2021.10.11 |
[컴퓨터구조] Arithmetic Circuits | 컴퓨터의 산술 연산 구조 | 하드웨어 (0) | 2021.10.11 |
[컴퓨터구조] Binary Incrementer | 컴퓨터의 산술 연산 구조 | 하드웨어 (0) | 2021.10.11 |
[컴퓨터구조] Binary Adder, 그리고 Binary Adder-Subtractor | 컴퓨터의 산술 연산 구조 | 하드웨어 (0) | 2021.10.10 |