룩업 테이블 이해: ROM에서 고급 ALU까지
개요
이전 장에서 디지털 메모리 장치를 탐구하며, 고체 저장 셀이 이진 값을 사용하여 정확히 어드레싱될 수 있음을 발견했습니다. ROM의 어드레스 라인을 특정 이진 패턴으로 구동하면, 저장된 데이터를 메모리 셀에서 직접 검색할 수 있습니다.
특정 로직 기능의 진리표로 사전 프로그래밍된 ROM을 상상해 보세요. 어드레스 라인이 기능의 입력이 되고, 데이터 라인이 해당 출력을 전달합니다. 이 설정을 사용하면 단일 ROM 칩이 물리적 재배선 없이 반가산기, 전가산기, 또는 완전히 다른 조합 회로 등 원하는 어떤 로직 기능도 에뮬레이트할 수 있습니다.
아래는 반가산기를 구현하도록 구성된 4×2비트 ROM입니다. A와 B 입력이 어드레스 핀에 적용되면, ROM은 올바른 합(Σ)과 캐리 아웃(Cout) 비트를 출력합니다.

입력을 고정된 로직 게이트 네트워크를 통해 처리하는 게이트 기반 반가산기와 달리, 이 ROM은 각 입력 쌍에 대한 올바른 출력을 단순히 '기억'합니다. 다른 ROM이나 지울 수 있는 EPROM에 새로운 진리표를 쓰면 로직 기능을 즉시 재구성할 수 있어 비할 데 없는 유연성을 제공합니다.
본질적으로, 모든 가능한 입력에 대해 미리 결정된 출력을 전달하는 ROM을 룩업 테이블이라고 합니다. 이 개념은 학교에서 구구단을 암기하는 방식과 비슷합니다: 5×6을 매번 다시 계산하는 대신 30과 같음을 기억해 냅니다.
하드웨어 대신 소프트웨어(ROM의 저장 데이터)를 사용하면 몇 가지 이점이 있습니다:
- 소프트웨어 변경이 하드웨어 수정보다 훨씬 쉽습니다.
- 소프트웨어는 디스크, 테이프 또는 기타 미디어에 아카이브되어 문서화와 전송을 용이하게 합니다.
- 소프트웨어는 장치 간에 복사될 수 있어 한 칩이 다른 칩으로부터 배울 수 있게 합니다.
- 이산 게이트로는 다루기 힘든 복잡한 기능을 간단하게 구현할 수 있습니다.
룩업 테이블의 힘은 기능 복잡성과 함께 커집니다. 예를 들어, 4비트 가산기는 8개 어드레스 라인(두 4비트 피연산자)과 부호 있는 합을 위한 4개 데이터 라인을 가진 ROM을 사용하여 구축될 수 있습니다. 256개 어드레스 가능 위치로, 각 입력 조합을 신중하게 프로그래밍해야 합니다.

그러한 테이블 프로그래밍에는 정밀함이 필요하지만, 소프트웨어 정의 동작의 이점은 잘못 프로그래밍된 엔트리의 위험을 능가합니다.
룩업 테이블은 2의 보수 덧셈에서 오버플로 같은 예외 케이스 처리에도 탁월합니다. 예를 들어, 4비트 필드에서 0111(7)과 0110(6)을 더하면 올바른 13 대신 1001(-7)이 나옵니다. ROM을 프로그래밍하여 커스텀 값(아마도 표현 가능한 최대 양수)을 출력하도록 하면 오버플로 조건에 대한 응답을 제어할 수 있습니다.
단순 덧셈을 넘어, ROM에 두 개의 어드레스 라인을 더 추가하면 용량이 256에서 1,024 엔트리로 증가합니다. 이는 두 제어 비트(A8, A9)에 기반하여 4비트 피연산자에 대해 덧셈, 뺄셈(양방향), 동등성 테스트 등 여러 연산을 수행할 수 있게 합니다.

더 많은 어드레스 라인으로 ROM은 패리티 검사나 XOR 같은 다양한 이진 연산을 호스팅하여, 사실상 산술 논리 장치(ALU) 역할을 할 수 있습니다. 역사적으로 IBM 1401과 1620 컴퓨터는 덧셈에 룩업 테이블을 사용했는데, 이 설계 선택으로 'CADET'(Can't Add, Doesn't Even Try)라는 별명을 얻었습니다.
ROM 기반 룩업 테이블의 일반적인 현대 용례는 정밀한 수학적 함수가 필요한 제어 시스템입니다. 예를 들어, 자동차 연료 분사 시스템은 엔진 부하, 주변 온도, 기압에 기반하여 공기-연료 비율을 조정합니다. 센서가 이 변수들을 측정하고, 아날로그 출력이 디지털화되어 결과 디지털 벡터가 ROM 어드레스로 사용됩니다. ROM은 최적의 분사 매개변수를 출력합니다.
ROM은 디지털화된 신호 보정에도 사용됩니다. 열전대 트랜스미터는 비선형 밀리볼트를 온도 값으로 변환합니다. 보정 데이터를 ROM에 저장하면 장치가 출력을 선형화하여 정확도를 개선할 수 있습니다. 이 응용은 종종 디지털 특성화기라고 불립니다.

또 다른 고전적 예는 코드 변환입니다. 128×8 ROM은 각 입력을 ROM 테이블의 해당 출력에 매핑하여 7비트 ASCII 코드를 8비트 EBCDIC 코드로 변환할 수 있습니다.
관련 워크시트