맨위로가기

산술 논리 장치

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

산술 논리 장치(ALU)는 컴퓨터의 핵심 부품으로, 덧셈, 뺄셈, 논리 연산, 비트 시프트 연산 등을 수행한다. 1945년 존 폰 노이만이 EDVAC 컴퓨터 설계를 제안하면서 처음 개념이 제시되었으며, 이후 다양한 수 체계와 회로 기술 발전을 거쳐 집적 회로 형태로 발전했다. ALU는 74181과 같은 독립형 IC로 구현되거나, CPU, FPU 등 더 복잡한 IC의 일부로 사용된다. ALU는 다양한 연산을 수행하며, 다중 정밀도 연산, 복잡한 연산 구현에 사용된다.

더 읽어볼만한 페이지

  • 디지털 회로 - 클럭 신호
    클럭 신호는 디지털 회로의 동작을 동기화하는 주기적인 신호로, 수정 발진기나 위상동기회로를 통해 생성되며 마이크로프로세서의 동작 속도를 결정하고 전력 효율을 위한 동적 주파수 변경 기술과 잡음 감소를 위한 사인파 클럭이 사용되기도 하며, 칩 내부 분배 효율성이 중요하다.
  • 디지털 회로 - 타이머
    타이머는 시간 간격을 측정하거나 제어하는 장치 또는 기능으로, 기계식부터 전자식, 디지털, 소프트웨어 방식 등 다양한 형태로 존재하며, 독립적으로 사용되거나 시스템 내부에 내장되어 폭넓게 활용되고, 작동 방식과 구현 방식에 따라 여러 종류로 나뉘며, 최근에는 모바일 기반 타이머와 인공지능 기술을 활용한 효율적인 시간 관리 기능으로 발전하고 있다.
  • 중앙 처리 장치 - 마이크로컨트롤러
    마이크로컨트롤러는 프로세서, 메모리, 입출력 기능을 단일 칩에 통합하여 임베디드 시스템의 핵심이 되는 부품으로, 프로그램 내장 방식을 통해 소프트웨어만으로 제어 기능 변경이 가능하며, 현재는 32비트 ARM, MIPS 아키텍처 기반 제품이 주를 이루고, 저전력 소모, 소형화, 다양한 기능 통합을 특징으로 다양한 분야에서 활용된다.
  • 중앙 처리 장치 - NX 비트
    NX 비트는 하드웨어 기반 보안 기능으로, 메모리 페이지의 실행 권한을 제어하여 특정 영역에서 코드 실행을 막아 버퍼 오버플로 공격과 같은 보안 위협을 줄이는 데 사용되며, AMD에서 처음 도입 후 다양한 프로세서와 운영체제에서 DEP 등의 이름으로 구현되었다.
  • 컴퓨터 산술 - IEEE 754
    IEEE 754는 부동소수점 숫자를 표현하고 처리하기 위한 국제 표준으로, 다양한 형식과 연산, 반올림 규칙, 예외 처리 등을 정의한다.
  • 컴퓨터 산술 - 1의 보수
    1의 보수는 이진수에서 양수는 일반적인 이진수로, 음수는 양수의 각 비트를 반전시켜 표현하며, 덧셈 시 자리올림수가 발생하면 결과값에 더해야 하고, 0을 중복 표현하는 단점으로 현대에는 2의 보수가 주로 사용된다.
산술 논리 장치
기본 정보
유형조합 논리 회로
사용컴퓨터
계산기
디지털 기기
기호
약칭ALU
분야전기 공학, 컴퓨터 과학
구성 요소
주요 구성 요소가산기
비교기
멀티플렉서
디코더
제어 장치
기능
수행 연산산술 연산 (덧셈, 뺄셈, 곱셈, 나눗셈)
논리 연산 (AND, OR, XOR, NOT)
비트 시프트
추가 정보
관련 하드웨어FPU
GPU
AGU

2. 역사

산술 논리 장치(ALU)의 개념은 수학자 존 폰 노이만1945년 EDVAC 설계 보고서에서 처음 제시했다.[5] 그는 컴퓨터가 기본적인 수학 연산(덧셈, 뺄셈, 곱셈, 나눗셈)을 수행하기 위해 전용 장치인 ALU가 필수적이라고 주장하며,[12] 1946년 프린스턴 고등연구소(IAS)에서 설계한 IAS 컴퓨터에 이를 포함시켰다. 이 컴퓨터는 후대 컴퓨터 설계에 큰 영향을 미쳤다.

초기 컴퓨터들은 정보 시대 초기의 기술적 제약(높은 비용, 큰 크기, 많은 전력 소모)으로 인해 한 번에 한 비트씩 처리하는 직렬 ALU를 주로 사용했다. 여러 비트를 병렬로 처리하는 방식은 1951년 Whirlwind I에서 처음 시도되었다.

집적 회로(IC) 기술이 발전하면서 ALU 구현 방식도 크게 변화했다. 1967년 페어차일드는 최초의 IC 기반 ALU인 페어차일드 3800을 선보였으나, 이는 덧셈과 뺄셈 연산만 지원했다.[6] 이후 논리 연산까지 가능한 완전한 ALU 칩(Am2901, 74181 등)이 등장했고, 여러 칩을 연결해 더 큰 워드 크기를 처리하는 "비트 슬라이스" 기술이 개발되어 미니컴퓨터 등에 활용되었다.

1970년대 초 등장한 마이크로프로세서는 초기에는 집적도의 한계로 인해 좁은 ALU를 탑재하여 연산 속도가 느린 경우도 있었다(예: Zilog Z80[7]). 하지만 무어의 법칙에 따른 기술 발달로 점차 더 넓고 복잡한 고성능 ALU를 마이크로프로세서 내에 집적하는 것이 가능해졌다. 현대의 ALU는 넓은 워드 폭과 배럴 시프터, 이진 곱셈기 등 향상된 구조를 통해 단일 클럭 사이클에 복잡한 연산을 수행하기도 한다.

ALU는 전통적으로 기계식, 전기기계식, 전자 회로 등으로 구현되었으며,[8] 최근에는 액틴 기반의 생물학적 ALU에 대한 연구도 진행되고 있다.[9][10][11]

2. 1. 초기 발전

수학자 존 폰 노이만1945년 EDVAC 설계 보고서에서 처음으로 산술 논리 장치(ALU)의 개념을 제안했다.[5] 이듬해인 1946년, 그는 프린스턴 고등연구소(IAS)에서 동료들과 함께 IAS 컴퓨터를 설계하면서 ALU를 포함한 컴퓨터의 구체적인 구조를 제시했다. 이 IAS 컴퓨터는 이후 여러 컴퓨터 설계의 기초가 되었다. 폰 노이만은 컴퓨터가 덧셈, 뺄셈, 곱셈, 나눗셈과 같은 기본적인 수학 연산을 효율적으로 수행하기 위해서는 전용 장치, 즉 ALU가 반드시 필요하다고 보았다.[12]

초기 컴퓨터의 ALU는 다양한 수 체계를 사용하여 숫자를 처리했다. 예를 들어, 1의 보수, 부호와 크기 형식, 심지어 각 자릿수마다 10개의 진공관을 사용하는 십진법 체계도 있었다. 사용하는 수 체계에 따라 ALU의 설계 방식도 달라졌다. 하지만 현대의 프로세서는 대부분 2의 보수 이진수 표현 방식을 채택하고 있는데, 이는 덧셈과 뺄셈을 위한 회로 구현을 상대적으로 단순화할 수 있기 때문이다.

정보 시대 초기에는 전자 회로의 제작 비용, 크기, 전력 소모량이 매우 컸다. 이 때문에 초기 컴퓨터들은 프로그래머가 사용하는 데이터 단위(워드 크기)보다 작은 단위, 즉 한 번에 한 비트씩만 처리하는 직렬 ALU를 주로 사용했다. 여러 개의 단일 비트 ALU를 병렬로 구성하여 워드 단위 연산을 수행한 최초의 컴퓨터는 1951년에 개발된 Whirlwind I이다. 이 컴퓨터는 16비트 워드를 처리하기 위해 16개의 "수학 유닛"을 병렬로 사용했다.

집적 회로(IC) 기술이 발전하면서 ALU 역시 IC 형태로 구현되기 시작했다. 1967년 페어차일드는 최초의 IC 기반 ALU 유사 장치인 페어차일드 3800을 출시했다. 이 칩은 누산기를 포함한 8비트 산술 장치였으나, 덧셈과 뺄셈 연산만 지원하고 논리 연산 기능은 없었다.[6] 이후 Am2901이나 74181과 같이 덧셈, 뺄셈뿐 아니라 논리 연산까지 수행하는 완전한 4비트 ALU 칩들이 등장했다. 이 칩들은 여러 개를 연결하여 더 큰 워드 크기의 ALU를 구성할 수 있도록 "비트 슬라이스" 기능을 지원했으며, 특히 캐리 전방 예측 신호를 통해 연산 속도를 높였다. 이러한 비트 슬라이스 방식의 ALU는 당시 미니컴퓨터에 널리 채택되었다.

1970년대마이크로프로세서가 등장했지만, 초기에는 무어의 법칙에 따른 기술 발전에도 불구하고 칩 하나에 충분한 수의 트랜지스터를 집적하기 어려웠다. 그 결과, 일부 초기 마이크로프로세서는 전체 워드 크기보다 작은 ALU를 탑재하여 하나의 기계어 명령어를 처리하는 데 여러 클럭 사이클이 소요되기도 했다. 대표적인 예로, 널리 사용된 Zilog Z80 마이크로프로세서는 8비트 덧셈 연산을 4비트 ALU를 이용해 여러 단계로 나누어 처리했다.[7] 시간이 지나면서 트랜지스터 집적 기술이 더욱 발전함에 따라 마이크로프로세서 내부에 더 넓은 워드 폭을 가진 고성능 ALU를 탑재하는 것이 가능해졌다.

2. 2. 집적 회로 시대

1967년 페어차일드집적 회로(IC)로 구현된 최초의 ALU인 페어차일드 3800을 출시했다. 이 장치는 누산기를 갖춘 8비트 산술 장치였지만, 덧셈과 뺄셈 연산만 가능했고 논리 연산 기능은 지원하지 않았다.[6]

1970년대 초에는 Am2901 및 74181과 같은 4비트 ALU 집적 회로가 등장했다. 이 칩들은 여러 개를 서로 연결하여 더 넓은 워드 크기의 ALU를 구성할 수 있도록 하는 "비트 슬라이스" 기능을 갖추고 있었다. 이러한 특징 덕분에 비트 슬라이스 방식의 미니컴퓨터 제작에 널리 사용되었다.

마이크로프로세서는 1970년대 초에 등장하기 시작했다. 당시에는 트랜지스터를 충분히 작게 만들기 어려워 칩 위에 넓은 ALU를 집적할 공간이 부족한 경우가 많았다. 이 때문에 일부 초기 마이크로프로세서는 상대적으로 좁은 ALU를 사용했으며, 하나의 명령어를 처리하는 데 여러 클럭 사이클이 필요했다. 예를 들어, 널리 사용된 Zilog Z80 마이크로프로세서는 4비트 ALU를 사용하여 8비트 덧셈 연산을 여러 단계에 걸쳐 수행했다.[7] 시간이 지나면서 무어의 법칙에 따라 트랜지스터 크기가 계속 작아졌고, 마이크로프로세서에 더 넓은 ALU를 탑재하는 것이 가능해졌다.

현대의 집적 회로(IC) 트랜지스터는 초기 마이크로프로세서의 트랜지스터보다 훨씬 작아져서 매우 복잡한 ALU를 IC 칩 하나에 담을 수 있게 되었다. 오늘날 많은 최신 ALU는 넓은 워드 폭을 가지며, 배럴 시프터나 이진 곱셈기와 같은 향상된 구조를 포함하여 과거에는 여러 연산 단계를 거쳐야 했던 작업을 단일 클럭 사이클에 처리할 수 있다.

3. 작동 방식

'''ALU''' ('''a'''rithmetic '''l'''ogic '''u'''nit, 산술 논리 연산 장치라고도 함)는 대표적인 연산 장치로, 논리 연산덧셈뺄셈 같은 산술 연산을 수행한다.

컴퓨터는 계산뿐만 아니라 주소 계산 등 다양한 목적으로 덧셈 연산을 자주 사용하므로 빠른 가산기가 중요하다. ALU는 이러한 고속 가산기와 임의의 논리 연산을 수행하는 장치를 효율적으로 통합한 것이다.

ALU는 외부로부터 연산할 데이터(피연산자)와 어떤 연산을 수행할지 지시하는 제어 신호(오퍼코드)를 입력받는다. 입력된 데이터와 제어 신호에 따라 지정된 연산을 수행한 후, 그 결과를 출력하고 연산 과정에서 발생한 상태 정보(예: 자리올림 발생 여부)를 함께 내보낸다. 이러한 연산 결과의 상태 정보는 상태 레지스터와 같은 특정 레지스터에 저장되어 다음 연산에 활용되기도 한다.

3. 1. 신호

산술 논리 장치(ALU)는 다양한 입출력 네트를 가지는데, 이는 ALU와 외부 회로 간에 전기 전도체를 사용하여 디지털 신호를 전달하는 데 사용된다. ALU가 작동할 때, 외부 회로는 ALU 입력에 신호를 가하고, ALU는 이에 따라 연산을 수행한 뒤 출력 단자를 통해 외부 회로에 신호를 생성하고 전달한다.

=== 데이터 버스 ===

기본적인 ALU는 세 개의 병렬 버스를 갖는다.

  • '''입력 피연산자 버스 (A, B):''' 연산에 사용될 두 개의 피연산자를 외부 회로로부터 전달받는다.
  • '''결과 출력 버스 (Y):''' 연산 결과를 외부 회로로 전달한다.


각 데이터 버스는 하나의 이진 정수를 전달하는 신호 그룹으로 구성된다. 일반적으로 A, B, Y 버스의 너비(각 버스를 구성하는 신호의 수)는 동일하며, 이는 외부 회로(예: CPU 또는 기타 프로세서)의 기본 워드 크기와 일치한다.

=== 연산 코드 버스 ===

'''연산 코드(Opcode) 입력'''은 ALU에 연산 선택 코드를 전달하는 병렬 버스이다. 이 코드는 ALU가 수행할 원하는 산술 또는 논리 연산을 지정하는 열거 값이다. 연산 코드의 크기(버스 너비)는 ALU가 수행할 수 있는 고유한 연산의 최대 개수를 결정한다. 예를 들어, 4비트 연산 코드는 최대 16가지의 서로 다른 ALU 연산을 지정할 수 있다. 일반적으로 ALU 연산 코드는 기계어 명령어와 동일하지는 않지만, 경우에 따라 기계어 명령어 내의 특정 비트 필드로 직접 인코딩될 수도 있다.

=== 상태 신호 ===

==== 상태 출력 ====

상태 출력은 현재 ALU 연산의 결과에 대한 추가적인 정보를 전달하는 다양한 개별 신호들이다. 범용 ALU는 일반적으로 다음과 같은 상태 신호를 가진다.

  • '''캐리 출력(Carry-out):''' 덧셈 연산에서 발생한 자리올림, 뺄셈 연산에서의 빌림(borrow), 또는 이진 시프트 연산에서의 오버플로 비트를 전달한다.
  • '''제로(Zero):''' 결과(Y)의 모든 비트가 논리 0임을 나타낸다.
  • '''음수(Negative):''' 산술 연산의 결과가 음수임을 나타낸다.
  • '''오버플로(Overflow):''' 산술 연산의 결과가 결과 버스(Y)의 숫자 표현 범위를 초과했음을 나타낸다.
  • '''패리티(Parity):''' 결과(Y)의 비트들 중 1인 비트의 개수가 짝수인지 홀수인지를 나타낸다.


==== 상태 입력 ====

상태 입력은 연산을 수행할 때 추가 정보를 ALU에 제공할 수 있게 해준다. 일반적으로 이것은 이전 ALU 연산에서 저장된 캐리 출력(Carry-out) 값을 전달하는 단일 비트인 "캐리 입력(Carry-in)"이다. 이는 여러 워드로 구성된 큰 수의 덧셈과 같은 다중 정밀도 연산에 사용된다.

3. 2. 회로 동작

초기 4비트 산술 논리 장치인 74181 집적 회로의 조합 논리 회로도. 논리 게이트들을 포함하고 있다.


산술 논리 장치(ALU)는 조합 논리 회로로 만들어진다. 이는 ALU의 출력이 입력 신호가 바뀌면 거의 즉시, 비동기적으로 변한다는 것을 의미한다. 실제 작동 환경에서는 안정적인 신호가 ALU의 모든 입력 단자에 들어와야 한다. 입력 신호가 들어온 후, 신호가 ALU 내부 회로를 통과하여 최종 결과가 출력 단자에 나타나기까지는 약간의 시간이 걸리는데, 이를 '전파 지연'이라고 한다. ALU에 연결된 외부 회로는 ALU가 작동하는 동안 입력 신호가 흔들리지 않게 안정적으로 유지하고, ALU의 출력을 읽기 전에 신호가 내부 회로를 충분히 통과하여 결과값이 안정화될 때까지 기다리는 역할을 한다.

일반적으로 ALU를 제어하는 외부 회로는 순차 논리를 사용하여 ALU의 작동을 통제하는 신호를 만들어낸다. 이 외부 순차 논리는 클럭 신호에 맞춰 동작하는데, 클럭 신호의 주파수는 가장 오래 걸리는 연산(즉, 최대 전파 지연을 일으키는 조건)에서도 ALU의 출력이 안정될 충분한 시간을 확보할 수 있도록 충분히 낮게 설정된다.

예를 들어, CPU가 덧셈 연산을 수행하는 과정을 살펴보자. 먼저 CPU는 더할 숫자(피연산자)를 프로세서 레지스터와 같은 소스에서 ALU의 입력 단자로 보낸다. 동시에 ALU에게 덧셈 연산을 수행하라는 명령(연산 코드)을 전달한다. 또한, 연산 결과(덧셈 결과)를 저장할 목적지 레지스터를 준비시킨다. ALU의 입력 신호들은 다음 클럭 신호가 올 때까지 안정적으로 유지되어야 하며, 이 시간 동안 신호는 ALU 내부 회로를 거쳐 목적지 레지스터까지 전달된다. 다음 클럭 신호가 도착하면, 목적지 레지스터는 안정화된 ALU의 결과값을 저장한다. 이로써 덧셈 연산이 완료되고, ALU는 다음 연산을 위한 새로운 입력을 받을 준비를 한다.

4. 기능

'''산술 논리 장치'''(ALU, '''a'''rithmetic '''l'''ogic '''u'''nit)는 컴퓨터중앙 처리 장치(CPU) 내에서 기본적인 연산을 수행하는 핵심 디지털 회로이다.[1][2][4] 이름에서 알 수 있듯이, ALU는 주로 산술 연산과 논리 연산을 담당한다.

대부분의 ALU는 다음과 같은 기본적인 연산 기능을 수행할 수 있다.


  • '''정수형 산술 연산''': 덧셈, 뺄셈과 같은 기본적인 산술 계산을 수행한다. 일부 ALU는 곱셈이나 나눗셈과 같이 더 복잡한 연산도 지원한다.
  • '''비트 단위 논리 연산''': 데이터의 각 비트에 대해 AND, OR, XOR, NOT 등의 논리 연산을 수행한다.
  • '''비트 시프트 연산''': 데이터 워드의 비트들을 왼쪽이나 오른쪽으로 지정된 수만큼 이동시키거나 회전시킨다. 이 연산은 2의 거듭제곱으로 곱하거나 나누는 효과를 빠르게 얻기 위해 사용되기도 한다.


ALU는 일반적으로 두 개의 입력 데이터(피연산자)와 제어 장치로부터 어떤 연산을 수행할지 지시하는 제어 신호를 받는다. 연산 결과는 출력으로 내보내지며, 연산 과정에서 발생하는 자리올림수 발생 여부, 결과 값의 부호 등과 같은 상태 정보는 상태 레지스터에 저장되어 프로그램의 흐름을 제어하는 데 사용될 수 있다. 컴퓨터는 주소 계산 등 다양한 목적으로 덧셈 연산을 자주 사용하므로, ALU 내의 고속 가산기는 중요한 요소이다. ALU는 이러한 고속 가산 기능과 논리 연산 기능을 효율적으로 통합한 장치라고 할 수 있다.

4. 1. 산술 연산

산술 논리 장치(ALU)는 디지털 회로에서 숫자를 처리할 때 주로 2의 보수 이진수 표현 방식을 사용한다. 이 방식은 덧셈뺄셈을 효율적으로 구현할 수 있어 현대 프로세서에서 널리 쓰인다.

대부분의 산술 논리 장치는 다음과 같은 기본적인 산술 연산을 수행할 수 있다.

  • '''정수형 산술 연산''': 기본적인 덧셈뺄셈 연산을 포함한다. 경우에 따라 곱셈나눗셈 연산도 지원하지만, 이들은 구조가 더 복잡하여 모든 ALU에 포함되지는 않는다.
  • '''덧셈''': 두 입력 값을 더하여 합계와 올림수(carry)를 출력한다. 이전 연산에서 발생한 올림수를 포함하여 덧셈을 수행하는 기능(자리 올림수와 덧셈)도 있어 여러 비트의 숫자를 더할 때 사용된다.
  • '''뺄셈''': 한 입력 값에서 다른 입력 값을 빼서 차이와 자리 빌림수(borrow)를 출력한다. 이 연산은 두 값의 크기를 비교하는 데에도 활용될 수 있으며, 이때는 연산 결과 값 자체보다는 상태 비트(결과가 0인지, 음수인지 등)가 중요하다. 이전 연산의 자리 빌림수를 고려한 뺄셈(자리 빌림수와 뺄셈)도 가능하다.
  • '''2의 보수''': 입력 값의 부호를 바꾸는 연산이다. 0에서 해당 값을 빼는 방식으로 구현된다.
  • '''증가''' (Increment): 입력 값에 1을 더한다.
  • '''감소''' (Decrement): 입력 값에서 1을 뺀다.


이러한 산술 연산 기능은 컴퓨터가 기본적인 계산뿐만 아니라 주소 계산 등 다양한 작업을 수행하는 데 필수적이다. ALU는 고속 가산기논리 연산 회로를 효율적으로 통합하여 이러한 연산들을 처리한다.

4. 2. 논리 연산

산술 논리 장치(ALU)는 기본적인 논리 연산을 수행하는 핵심 요소이다. 대부분의 ALU는 다음과 같은 비트 단위 논리 연산을 처리할 수 있다.

  • '''AND''': 두 입력값(A와 B)의 각 비트에 대해 논리곱(AND) 연산을 수행하여 그 결과를 출력(Y)한다. 두 비트가 모두 1일 때만 결과 비트가 1이 된다.
  • '''OR''': 두 입력값(A와 B)의 각 비트에 대해 논리합(OR) 연산을 수행하여 그 결과를 출력(Y)한다. 두 비트 중 하나라도 1이면 결과 비트가 1이 된다.
  • '''XOR''': 두 입력값(A와 B)의 각 비트에 대해 배타적 논리합(XOR) 연산을 수행하여 그 결과를 출력(Y)한다. 두 비트가 서로 다를 때만 결과 비트가 1이 된다.
  • '''NOT''' (1의 보수): 입력값(A 또는 B)의 모든 비트를 반전시켜 그 결과를 출력(Y)한다. 즉, 0은 1로, 1은 0으로 바꾼다.


이러한 논리 연산 기능은 가산기와 같은 산술 연산 기능과 함께 ALU 내부에 효율적으로 통합되어 구현된다. 예를 들어, 74181과 같은 실제 ALU 칩은 제어 장치로부터 오는 신호에 따라 다양한 산술 연산 및 논리 연산을 선택적으로 수행할 수 있다.

4. 3. 비트 시프트 연산

비트 시프트 연산은 워드(word)를 왼쪽이나 오른쪽으로 특정 비트 수만큼 이동시키거나 회전시키는 연산이다. 이때 부호 확장을 포함할 수도 있고 포함하지 않을 수도 있다. 시프트 연산은 2로 곱하거나 나누는 연산으로 해석될 수 있다.

8비트 산술 논리 장치(ALU)의 비트 시프트 예시
유형왼쪽오른쪽
산술 시프트----
논리 시프트----
로테이트----
캐리 로테이트----



ALU의 시프트 연산은 피연산자 A(또는 B)를 왼쪽 또는 오른쪽으로 이동시키며(연산 코드에 따라 방향 결정), 이동된 결과는 출력 Y에 나타난다. 간단한 ALU는 보통 한 번에 한 비트 위치만 이동시킬 수 있지만, 더 복잡한 ALU는 배럴 시프터를 사용하여 한 번의 연산으로 여러 비트만큼 이동시킬 수 있다.

단일 비트 시프트 연산에서는 피연산자 밖으로 밀려나는 비트는 캐리 아웃(carry-out) 플래그에 저장된다. 피연산자 안으로 새로 들어오는 비트의 값은 시프트 유형에 따라 다르다.


  • ''산술 시프트'': 피연산자를 2의 보수 형식의 정수로 간주한다. 최상위 비트(MSB)는 부호 비트로 취급되어 시프트 연산 중에도 그 값이 유지된다. 이는 부호 있는 정수의 곱셈이나 나눗셈에 사용된다.
  • ''논리 시프트'': 새로 들어오는 비트는 항상 0이다. 이는 부호 없는 정수를 시프트하거나 비트 단위 조작에 사용된다.
  • ''로테이트''(회전): 피연산자를 비트의 순환 버퍼처럼 취급한다. 한쪽 끝에서 밀려나는 비트가 다른 쪽 끝으로 들어온다.
  • ''캐리 로테이트''(캐리 포함 회전): 캐리 플래그(carry flag)와 피연산자를 함께 묶어 하나의 순환 버퍼처럼 처리한다. 피연산자에서 밀려나는 비트는 캐리 플래그로 들어가고, 기존 캐리 플래그의 값은 피연산자의 반대쪽 끝으로 들어온다.

5. 응용

산술 논리 장치(ALU)는 컴퓨터 중앙 처리 장치(CPU)의 핵심 구성 요소로서 기본적인 산술 연산(덧셈, 뺄셈 등)과 논리 연산(AND, OR, NOT 등)을 수행한다. 이러한 기본 기능 외에도 ALU는 더 복잡한 계산 작업을 처리하는 데 응용된다. 예를 들어, ALU의 처리 단위(워드 크기)보다 큰 숫자를 계산해야 하는 경우 다중 정밀 산술 기법을 통해 여러 단계에 걸쳐 연산을 수행한다. 또한, 제곱근 계산과 같이 하드웨어로 직접 구현하기 복잡한 연산들은 ALU의 기본 연산을 반복적으로 조합하거나, 여러 ALU를 파이프라인 방식으로 연결하여 처리하기도 한다.

5. 1. 다중 정밀도 연산

산술 논리 장치와 관련 상태 레지스터. 저장된 자리올림은 효율적인 자리올림 전파를 용이하게 하기 위해 자리올림 입력에 연결되어 있다.


정수 산술 연산에서 '''다중 정밀 산술'''은 ALU의 워드 크기보다 큰 정수를 처리하는 알고리즘이다. 이 방식은 큰 정수를 ALU가 한 번에 처리할 수 있는 크기의 여러 조각으로 나누어 처리한다. 각 조각은 최상위 비트(MSB, Most Significant Bit)부터 최하위 비트(LSB, Least Significant Bit) 순서 또는 그 반대 순서로 정렬된다. 예를 들어, 8비트 ALU 환경에서 24비트 정수 0x123456은 세 개의 8비트 조각, 즉 0x12 (MSB), 0x34, 0x56 (LSB)으로 나누어 처리된다. ALU는 이렇게 나누어진 각 조각에 대해 직접 연산을 수행할 수 있다.

다중 정밀도 연산 과정은 다음과 같다.

# ALU는 특정 피연산자 조각에 대해 연산을 수행하여 해당 부분 결과를 생성한다.

# 생성된 각 부분 결과는 다중 정밀도 결과가 저장될 메모리 공간에 기록된다.

# 모든 피연산자 조각에 대해 이 과정을 반복하면, 부분 결과들이 모여 최종적인 다중 정밀도 연산 결과가 완성된다.

덧셈이나 뺄셈과 같은 산술 연산에서는 LSB 조각부터 연산을 시작한다. 첫 연산 결과로 LSB에 해당하는 부분 결과와 캐리 비트(덧셈의 자리올림 또는 뺄셈의 빌림)가 생성된다. 부분 결과는 저장 공간에 기록되고, 캐리 비트는 일반적으로 CPU 내 상태 레지스터에 저장된다. 다음으로, 각 피연산자의 다음 조각들과 이전 연산에서 저장된 캐리 비트를 함께 사용하여 ALU 연산을 수행한다. 이 결과로 다음 부분 결과와 새로운 캐리 비트가 생성되며, 이 과정은 모든 조각이 처리될 때까지 반복된다. 상태 레지스터에 저장된 캐리 비트를 다음 연산의 입력으로 바로 사용하는 방식은 다중 정밀도 연산에서 자리올림(또는 빌림, 시프트 오버플로) 전파를 효율적으로 처리하게 해주며, 소프트웨어적으로 이를 관리할 필요성을 줄여준다.

시프트 연산의 경우, 처리 순서는 시프트 방향에 따라 달라진다.

  • '''좌측 시프트''': LSB 조각부터 처리한다. 이는 각 부분 결과의 LSB가 이전(덜 중요한) 조각의 좌측 시프트 결과로부터 (캐리 비트를 통해) 전달되어야 하기 때문이다.
  • '''우측 시프트''': MSB 조각부터 처리한다. 이는 각 부분 결과의 MSB가 이전(더 중요한) 조각의 우측 시프트 결과로부터 (캐리 비트를 통해) 전달되어야 하기 때문이다.


비트 단위 논리 연산(예: AND, OR)에서는 각 부분 결과가 오직 해당 조각의 피연산자들에만 의존하므로, 처리 순서는 중요하지 않다. 이전 연산에서 발생한 캐리 비트는 이 연산들에서는 일반적으로 무시된다.

5. 2. 복잡한 연산

어떠한 연산이든 수행할 수 있는 산술 논리 장치를 설계하는 것은 이론적으로 가능하지만, 연산이 복잡해질수록 회로의 복잡도, 가격, 전력 소모, 크기 등이 증가하여 실용성이 떨어진다. 따라서 산술 논리 장치는 일반적으로 매우 빠른 속도로 처리할 수 있는 간단한 기능들로 제한되며, 더 복잡한 연산은 외부 회로나 다른 방식을 통해 처리하는 경우가 많다.

예를 들어, 숫자의 제곱근을 계산하는 연산은 산술 논리 장치의 설계 방식에 따라 다음과 같이 다양하게 구현될 수 있다.

  • 단일 클록 처리: 매우 복잡한 산술 논리 장치 하나를 사용하여 한 번의 클록에 제곱근 계산을 완료한다. 속도는 가장 빠르지만, 설계가 복잡하고 비용이 많이 든다.
  • 파이프라인 방식: 여러 개의 단순한 산술 논리 장치를 파이프라인처럼 연결하여 단계별로 제곱근을 계산한다. 각 단계는 동시에 작동하므로, 전체 처리 시간은 지연되지만 단일 클록 방식만큼 높은 처리량을 가질 수 있다. 한 연산이 완전히 끝나기 전에 다음 연산을 시작할 수 있다는 장점이 있다.
  • 반복 계산 방식: 하나의 단순한 산술 논리 장치가 제어 장치의 지시에 따라 여러 단계에 걸쳐 반복적으로 계산하여 제곱근을 구한다. 속도는 가장 느리지만, 회로가 단순하고 비용이 저렴하다.


일반적인 CPU에서는 복잡한 연산을 처리하기 위해 다음과 같은 방식을 사용한다.

  • 소프트웨어 구현: CPU 내의 단일 산술 논리 장치를 이용하여, 소프트웨어 알고리즘에 따라 여러 단계의 기본 산술 논리 연산을 조합하여 복잡한 연산을 수행한다.
  • 하드웨어 가속: 특수한 아키텍처에서는 여러 개의 산술 논리 장치를 사용하여 복잡한 연산을 가속한다. 이 경우 산술 논리 장치들은 파이프라인 방식으로 작동하며, 중간 결과가 단계적으로 다음 산술 논리 장치로 전달된다. 모든 산술 논리 장치가 동시에 작동하므로 소프트웨어 방식에 비해 성능이 크게 향상된다.

6. 구현

산술 논리 장치(ALU)는 일반적으로 74181과 같은 독립적인 집적 회로(IC) 형태로 구현되거나, 더 복잡한 기능을 가진 IC의 일부로 포함되어 구현된다. 후자의 경우, ALU는 보통 VHDL, Verilog와 같은 하드웨어 기술 언어로 작성된 설명을 합성하여 만들어진다. 이러한 언어를 사용하면 8비트 ALU와 같은 특정 요구사항을 만족하는 ALU를 설계하고 구현하는 것이 가능하다.

7. 기타 연산 장치

산술 논리 장치(ALU) 외에도 다양한 연산 장치가 존재한다. 대표적인 예는 다음과 같다.



나눗셈이나 부동 소수점 연산과 같이 복잡한 처리는 하드웨어로 직접 구현하기 위해 많은 자원이 필요하다. 따라서 다음과 같은 대체 수단이 사용되기도 한다. 때로는 기계어 명령을 에뮬레이트하는 형태로 구현되기도 한다.

  • 소프트웨어를 이용한 구현: 성능 향상을 위해 기계어로 작성된 라이브러리 형태로 제공되는 경우가 많으며, 컴파일러의 인라인 전개 같은 기술도 사용된다.
  • 마이크로 코드를 이용한 구현

참조

[1] 서적 Digital Logic Design Technical Publications
[2] 서적 Digital Logic Circuits https://books.google[...] Technical Publications
[3] 웹사이트 1. An Introduction to Computer Architecture - Designing Embedded Hardware, 2nd Edition [Book] https://www.oreilly.[...] 2020-09-03
[4] 서적 The Art of Electronics Cambridge University Press
[5] 웹사이트 Jonathan von Neumann and EDVAC http://www.cs.berkel[...] 2004-11-08
[6] 웹사이트 Inside the 74181 ALU chip: die photos and reverse engineering https://www.righto.c[...] 2024-05-07
[7] 웹사이트 The Z-80 has a 4-bit ALU. Here's how it works. http://www.righto.co[...] 2013
[8] 간행물 Mechanical Computing: The Computational Complexity of Physical Devices https://doi.org/10.1[...] Springer 2009
[9] 논문 Synthesis of control unit for future biocomputer 2018-08-14
[10] 웹사이트 The biological microprocessor, or how to build a computer with biological parts https://www.research[...]
[11] 논문 An unconventional Arithmetic Logic Unit design and computing in Actin Quantum Cellular Automata https://doi.org/10.1[...] 2019-08-16
[12] 서적 http://williamstalli[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com