본문 바로가기
컴퓨터 시스템 개요

데이터 표현과 논리회로 CPU의 구조와 레지스터

by sc-itnote 2024. 5. 16.
반응형

데이터 표현과 논리회로 CPU의 구조와 레지스터
컴퓨터에서 사용하는 언어는 0과 1만을 사용하는 이진수 체계를 사용합니다. 사람이 사용하는 숫자는 0부터 9까지의 숫자로 이루어진 십진수 체계를 사용합니다. 컴퓨터는 3이란 숫자를 알지 못하고 0과 1만 알고 있는 것이죠. 0은 전기가 들어와 있지 않은 상태(off)를 말하고 1은 전기가 들어와 있는 상태(on)를 표현합니다. 컴퓨터에서 사람이 사용하는 숫자를  표현한 정보는 수치 데이터라고 합니다. 연산용 데이터를 말합니다. 숫자가 아닌 비수치 데이터는 비수치 데이터라고 하거나 입출력용 데이터라고 합니다. 특수문자도 입출력과 연산에 사용하는 데이터에 속합니다. 0과 1을 컴퓨터에서는 정보를 표현하는 단위로 비트(Bit)라고 합니다. 비트의 8개 묶음을 바이트(Byte)라고 하고, 정보를 표현할 수 있는 가장 작은 단위라고 합니다. 바이트를 4개로 묶어서 워드(Word)라는 단위로 부르기도 합니다. 1바이트는 32비트인 것이죠. 1024바이트는 1KB(킬로바이트)라고 합니다. 1024는 2의 10제곱이므로 1024바이트는 2의 10제곱 바이트라고 합니다 2의 20제곱 바이트는 1MB(메가 바이트)이고 2의 30제곱 바이트는 1GB(기가바이트)입니다. 2의 40제곱 바이트는 1TB(테라바이트)입니다. 컴퓨터는 수학에서 보수라는 개념을 사용해서 실제 사칙연산을 합니다. 컴퓨터는 덧셈만 할 수 있어서 뺄셈을 구현하기 위해서는 보수라는 개념을 이용합니다. 보수란 서로 보완을 해주는 관계를 가진 두 숫자의 작용을 의미합니다. n 진법에서 n의 보수는 '최대 자릿수'를 표현하도록 만들어 주는 수입니다. n-1의 보수는 n의 보수에서 -1을 한 값, 최대 자릿수 -1을 만들어주는 수를 말합니다.  예를 들면, 10진수 체계일 때 3에 대한 10의 보수는 7입니다. 3에 대한 9의 보수는 6입니다. 7-1=6 또는( 10-1)-6=3이 됩니다. 컴퓨터에서 연산을 하지 않는 10진수는 이진수로 변환하지 않고 출력하는 방식을 사용합니다. 10진수를 입출력용으로 표현할 때는 언팩 형식 (unpacked decimal) 방식으로 하고, 연산을 할 때는 팩 형식(packed decimal)으로 표현합니다. 컴퓨터 데이터 표현방식 중 실수를 표현하는 방식은 부동 소수점 방식입니다. unpacked decimal 방식과 같이 입출력용으로만 쓰이는 10진수를 2진수 표현방식으로 bcd 코드가 있습니다. Binary Coded Decimal Code 2진화 10진 코드 혹은 8421코드라고 합니다. bcd 코드를 +3을 하고 보수 관계 형식으로 표현한 3초과 코드가 있습니다. excess 3 Code는 통신용으로 사용되기도 합니다. 암호화 검증 코드로 사용되는 패리티 비트 방식도 있습니다. 
전기신호를 데이터로 표현하기 위해 물리적 논리회로를 설계해서 데이터를 만들어내는 규칙이 있습니다.
컴퓨터에서는 전기 스위치가 연결된 상태를 1로 표현하고 스위치가 연결되지 않은 상태를 0으로 표현합니다. 논리 게이트란 컴퓨터를 구성하는 가장 기본적인 0과 1을 이용한 논리 연산을 수행하는 전자 소자를 말합니다. 이 소자를 이용해서 논리적인 연산을 수학적으로 표현합니다. 이 규칙을 이용해서 cpu와 머더보드 등과 같은 기계를 설계합니다. 논리합을 표현하는 or 게이트는 입력값 A와 B가 둘 중 하나라도 1일 때 결괏값이 1이 됩니다. 논리곱인 and 게이트는 A와 B가 둘 다 1일 때만 결괏값이 1입니다. 논리 부정 not 게이트는 입력값과 반대로 값을 출력하는 게이트입니다. 배타적 논리합인 xor 게이트는 A와 B가 서로 다를 때 결과가 1입니다. 조합 논리 회로는 결괏값이 입력값에 의해서만 결정되는 논리 회로입니다. 저장 기능이 있는 기억 회로는 정보를 저장할 수 있는 플립 플립(Flip-Flop)과 래치가 있습니다.
수학적으로 논리적 명제인 참, 거짓을 판별할 수 있는 부울 대수를 사용하여 진리표 관계를 만들어서 논리 회로의 구조를 기술하는 데 사용합니다. 부울 대수의 기본 법칙으로 교환 법칙과 결합 법칙. 분배 법칙이 있습니다. 교환 법칙은 A+B=B+A AB=BA 입니다. 결합 법칙은 (A+B)+C=A+(B+C), A(BC)=(AB)C 입니다. 분배법칙은 A(B+C)=AB+AC 입니다. 부울 대수를 이용하여 진리표를 만들 수 있고 카르노 맵 방식을 이용해서 간소화할 수 있습니다. 간소화하는 방법은 인접한 1을 묶어서 부울 대수로 표현합니다. 
조합 회로와 플립플롭을 이용하여 더하기 연산을 수행하는 가산기(Adder)를 설계합니다. 자릿수 올림이 발생이 발생했을 때 올라간 결괏값을 플리 플롭에 기억하고 다음 연산시 플리 플롭에 저장된 값을 사용하는 방식으로 작용합니다. 가산기는 두 개의 비트 연산을 수행하는 반 가산기(Half Adder)와 두 개의 비트의 연산과 발생한 캐리 비트까지 포함하여 세 비트를 더하는 논리회로인  전 가산기(Full Adder)가 있습니다. 전 가산기는 두 개의 반 가산 기와 OR gate로 구성됩니다. 조합 회로로 멀티플렉스(Multiplexer)와 디멀티플렉서(Demultiplexer)가 있습니다. 멀티플렉스(Multiplexer)는 다수의 입력선 중 하나를 선별적으로 출력하는 조합 회로이고, 디멀티플렉서(Demultiplexer)는 한 개의  입력선을 다수의 입력선으로 분해하는 조합 회로입니다. 10진수를 2진수로 변환할 때 설계되는 회로입니다. 
다음으로 cpu의 구조와 레지스터에 대해서 알아보겠습니다. 레지스터란 플립플롭을 연결한 기억 장치로 cpu 내부에서 연산을 수행할 때 데이터를 일시적으로 기억하는 장치입니다. cpu 내부 있는 산술 논리 장치(ALU: Arthmetic Logic Unit)와 제어장치를 이용해서 작업을 수행하게 됩니다. 연산은 비교적 큰 단위의 매크로 연산과 매크로 연산이 수행될 수 있도록 환경을 만들어 주는 마이크로 연산이  있습니다.
cpu 내에 있는 레지스터로 MAR (Memory Address Register)은 메모리 주소 레지스터로  메모리 주소를 일시적으로 저장합니다. MBR (Memory Buffer Register)은 메모리 버퍼 레지스터로 데이터 또는 명령을 일시적으로 저장합니다. PC (Program Counter)는 프로그램 계수기이며 다음번 수행 명령어가 들어있는 주 기억장치의 주소를 기억하는 레지스터입니다. IR (Instruction Register)는 명령 레지스터이며 PC가 지정하는 주소에 기억되어 있는 명령어를 해석하기 위해서 우선적으로 임시로 기억하는 레지스터입니다. ID (Instruction decoder)는 명령어 해독기로 IR에 들어있는 명령어를 해석하는 데 사용합니다. CU(Control unit)는 제어 장치로 ID로 들어온 clock 신호에 따라 명령어를 실행하는 레지스터입니다. GR(General porpose register)은 범용 레지스터라고 합니다 연산을 수행할 자료를 저장하는 작업 레지스터인 WR에서 작업을 수행하기 전에 임시로 자료를 저장하는 장치입니다. 범용 레지스터는 ALU와 직접 연결되어 있지 않지만 WR은 ALU와 연결되어 있습니다. SR(Status regiester) 은 상태 레지스터라고 합니다.  CPU의 상태를 나타내는 레지스터로 부호 S(sign)와 오버플로 V(overflow), 캐리 C(carry), 인터럽트 I(interrupt) 등의 특별한 상황의 상태를 표시하는 레지스터입니다. 

반응형