이번 문서의 목표: 이 파일을 다 읽으면 ROM의 주소선·데이터선 개수로 용량을 계산하고, ROM·PLA·PAL 세 가지 방식이 조합논리를 구현하는 원리와 차이를 설명할 수 있다.
왜 게이트를 매번 새로 설계하지 않고 “이미 만들어진 부품”을 쓸까
06편부터 16편까지는 AND·OR·NOT 게이트를 조합해 원하는 불 함수(boolean function)를 직접 설계했다. 그런데 실제 시험이나 산업 현장에서는 “이미 배선이 갖춰진 범용 소자에, 원하는 함수만 입력해서 완성한다”는 접근이 자주 쓰인다. 이런 소자를 통틀어 프로그램 가능 논리 소자(PLD, Programmable Logic Device)라고 부른다. 매번 회로를 처음부터 다시 설계하는 대신, 이미 만들어진 격자(array) 구조에서 필요한 연결만 “켜거나 끄는” 방식이므로 설계·수정이 훨씬 빠르다.
쉽게 말하면: PLD는 AND·OR 게이트가 이미 빽빽하게 깔려 있는 부품이고, 우리는 그중 필요한 연결선만 선택해서 원하는 조합논리를 완성한다.
이 편에서는 대표적인 세 가지 PLD인 ROM(Read Only Memory), PLA(Programmable Logic Array), PAL(Programmable Array Logic)을 다룬다. 세 소자 모두 결국은 “극소항(minterm)의 합”이라는 SOP(Sum of Products, 10편 참고) 형태로 불 함수를 표현한다는 공통점이 있고, 무엇을 고정하고 무엇을 프로그램 가능하게 두느냐에서만 차이가 난다.
ROM: 주소를 넣으면 저장된 데이터가 나오는 소자
쉽게 말하면: ROM은 개의 주소 비트를 입력하면, 미리 저장해 둔 비트 데이터를 그대로 출력하는 기억장치이자, 동시에 모든 극소항을 갖춘 조합논리회로다.
ROM(Read Only Memory, 읽기 전용 기억장치)은 전원이 꺼져도 저장된 내용이 사라지지 않는(비휘발성, non-volatile) 기억장치로, 한 번 저장된 값은 정상적인 사용 중에는 바뀌지 않는다. ROM을 조합논리회로로 보는 관점이 이 편의 핵심이다.
ROM은 두 가지 요소로 구성된다.
- 주소 디코더(address decoder) 부분: 개의 주소 입력 비트를 받아 개의 워드선(word line) 중 정확히 하나만 활성화한다. 이는 사실상 06~16편에서 배운 디코더(decoder, 16편 참고)이며, 회로적으로는 “고정된 AND 배열”이다. 개의 주소 비트로 만들 수 있는 극소항은 정확히 개이므로, 이 디코더는 가능한 모든 극소항을 하나씩 다 만들어 놓은 회로라고 볼 수 있다.
- 저장 셀(OR 배열) 부분: 활성화된 워드선이 어떤 출력 비트와 연결되어 있는지에 따라, 그 출력이 1이 될지 0이 될지가 정해진다. 이 연결 여부가 곧 “저장된 데이터”이며, 회로적으로는 “프로그램 가능한 OR 배열”이다.
ROM의 용량 계산
ROM의 크기는 관례적으로 “주소 공간 크기 × 워드 크기”로 표기한다. 주소선이 개이면 표현 가능한 주소는 개이고, 데이터선(출력선)이 개이면 한 주소당 저장되는 데이터는 비트다.
- : 주소선(address line) 개수
- : 데이터선(data line, 워드 폭) 개수
- : 표현 가능한 주소(워드) 개수
예를 들어 주소선이 10개, 데이터선이 8개인 ROM이 있다고 하자.
이 값을 8비트 단위인 바이트(byte)로 바꾸면 바이트, 즉 1KB(킬로바이트)가 된다. 이런 표기 방식 때문에 “1K × 8 ROM”이라는 표현을 자주 만나는데, 이는 “주소 1024개, 각 주소마다 8비트씩 저장”이라는 뜻이다.
시험 함정: “1K × 8 ROM”에서 1K는 정확히 1000이 아니라 다. 전체 비트 수를 물으면 비트이지, 비트가 아니다. 문제에서 “약 몇 K바이트인가”처럼 근사를 요구하지 않는 한, 2의 거듭제곱으로 정확히 계산해야 한다.
주소선 개수를 거꾸로 구하는 문제
반대로 “저장해야 할 워드 개수가 주어졌을 때 필요한 주소선 개수”를 묻는 문제도 자주 나온다. 워드가 300개 필요하다면, 을 만족하는 가장 작은 을 찾아야 한다.
- : 300개를 담기에 부족하다.
- : 300개를 담고도 남는다(212개의 미사용 주소가 생긴다).
따라서 최소 9개의 주소선이 필요하다. “필요한 워드 수보다 작은 2의 거듭제곱은 안 되고, 그보다 크거나 같은 가장 작은 2의 거듭제곱을 골라야 한다”는 점이 핵심이다.
ROM으로 조합논리회로를 구현하는 방법
ROM의 디코더 부분이 이미 “가능한 모든 극소항”을 만들어 두었으므로, 원하는 불 함수의 참값(1)이 되는 극소항 위치에만 연결(프로그램)을 남기면 그 함수를 그대로 구현할 수 있다. 즉 진리표를 그대로 ROM에 옮겨 적으면 회로가 완성된다.
예를 들어 입력 변수 (2개, 주소선 2개 필요)에 대해 출력이 두 개(, 데이터선 2개)인 함수가 다음 진리표와 같다고 하자.
| A | B | ||
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
이 표는 그대로 “2 × 4 ROM”(주소선 2개 → 4개 워드, 데이터선 2개)에 옮겨 담을 수 있다. 주소 00에는 데이터 01()을, 주소 01에는 11을 저장하는 식이다. 진리표 자체가 곧 ROM 프로그래밍 내용이라는 점이 ROM 구현 방식의 가장 큰 특징이자 장점(설계가 매우 직관적)이다.
PLA: AND 배열도 OR 배열도 모두 프로그램 가능하다
쉽게 말하면: PLA는 ROM과 달리 AND 게이트 배열까지도 프로그램할 수 있어, 필요한 극소항만 골라 만들고 낭비를 줄인다.
ROM의 단점은 입력 변수 개수 이 조금만 늘어도 개의 워드선(AND 게이트)을 모두 물리적으로 갖춰야 한다는 점이다. 실제로 함수가 필요로 하는 항의 개수가 보다 훨씬 적은 경우가 대부분이므로, 이는 회로 규모의 낭비로 이어진다.
PLA(Programmable Logic Array, 프로그램 가능 논리 배열)는 이 문제를 해결하기 위해 AND 배열과 OR 배열을 둘 다 프로그램 가능하게 만든다.
- AND 배열(프로그램 가능): 개의 모든 극소항을 미리 만들어 두는 대신, 함수에 실제로 필요한 항(반드시 극소항일 필요도 없다 — 간소화된 곱항이어도 된다)만 골라서 AND 게이트를 구성한다.
- OR 배열(프로그램 가능): ROM과 마찬가지로, 각 AND 항의 결과를 어떤 출력에 더할지(OR로 묶을지)를 선택한다.
이 구조 덕분에 PLA는 먼저 함수를 간소화(카르노맵이나 퀴인-맥클러스키, 11~13편 참고)한 뒤, 간소화된 곱항 개수만큼만 AND 게이트를 사용할 수 있어 ROM보다 회로가 작아지는 경우가 많다. 반대로 말하면, PLA를 쓰기 전에는 반드시 함수를 최소화하는 과정이 필요하다.
ROM과 PLA의 비교
| 구분 | ROM | PLA |
|---|---|---|
| AND 배열(디코더) | 고정(모든 개 극소항 생성) | 프로그램 가능(필요한 곱항만 생성) |
| OR 배열 | 프로그램 가능 | 프로그램 가능 |
| 사전 간소화 필요 여부 | 불필요(진리표를 그대로 옮김) | 필요(간소화해야 게이트 수 절약) |
| 입력 변수가 많을 때 | 게이트 수가 에 비례해 급증 | 실제 필요한 항 수만큼만 증가 |
| 설계 난이도 | 낮음(직관적) | 상대적으로 높음(간소화 필요) |
시험 함정: “ROM은 AND 배열과 OR 배열이 모두 프로그램 가능하다”는 설명은 틀렸다. ROM의 AND 배열(디코더)은 고정되어 있고, OR 배열만 프로그램 가능하다. 두 배열이 모두 프로그램 가능한 것은 PLA다.
PAL: OR 배열만 고정해 속도와 단순함을 얻는다
쉽게 말하면: PAL은 PLA와 반대로 AND 배열만 프로그램 가능하고 OR 배열은 고정해, 제조가 더 간단하고 신호 지연이 더 짧다.
PAL(Programmable Array Logic)은 PLA의 유연성 대신 제조 단가와 속도를 택한 소자다.
- AND 배열(프로그램 가능): PLA와 마찬가지로 필요한 곱항만 구성한다.
- OR 배열(고정): 각 출력이 미리 정해진 개수의 AND 게이트 결과만 받아들이도록 고정되어 있다. 예를 들어 “출력 하나당 AND 게이트 4개까지만 연결 가능”처럼 배선이 이미 정해져 있다.
OR 배열을 고정하면 회로 내부의 프로그램 가능한 연결점(스위치)이 줄어들어 제조가 단순해지고, 신호가 통과하는 배선이 짧아져 동작 속도가 빨라지는 대신, 한 출력이 받아들일 수 있는 곱항 개수에 제한이 생긴다는 단점이 있다.
세 소자의 종합 비교
| 구분 | ROM | PLA | PAL |
|---|---|---|---|
| AND 배열 | 고정 | 프로그램 가능 | 프로그램 가능 |
| OR 배열 | 프로그램 가능 | 프로그램 가능 | 고정 |
| 사전 간소화 | 불필요 | 필요 | 필요 |
| 회로 규모(입력 多) | 큼(2ⁿ에 비례) | 상대적으로 작음 | 상대적으로 작음 |
| 속도·제조 단순성 | 보통 | 보통 | 상대적으로 우수 |
이 표는 “무엇이 고정이고 무엇이 프로그램 가능한가”라는 한 가지 기준으로 세 소자를 정확히 구분하는 것이 핵심이다. AND 고정·OR 가변은 ROM, AND·OR 모두 가변은 PLA, AND 가변·OR 고정은 PAL이라는 대응 관계를 외우기보다, 왜 그런 선택을 했는지(ROM은 진리표를 그대로 옮기려고, PLA는 최대 유연성을 위해, PAL은 속도·단가를 위해)를 이해하면 헷갈리지 않는다.
조합논리 구현 방식 비교: 게이트 직접 설계 vs PLD
14편에서 배운 “게이트를 직접 조합해 설계하는 방식”과 이번 편의 PLD 방식은 같은 목표(원하는 불 함수 구현)를 다른 방법으로 달성한다.
| 구분 | 게이트 직접 설계 | PLD(ROM·PLA·PAL) |
|---|---|---|
| 설계 절차 | 진리표 → 간소화(K-맵 등) → 게이트 개별 배치 | 진리표(또는 간소화된 식) → 소자에 프로그래밍 |
| 함수 변경 시 | 회로를 다시 설계·배선 | 프로그래밍 내용만 다시 기록(경우에 따라 소자 재사용 가능) |
| 여러 출력 함수를 함께 구현 | 출력마다 별도 회로 설계 | 하나의 소자에서 여러 출력을 동시에 처리 가능 |
| 대표 활용 | 소규모·고정된 전용 회로 | 시제품·소량 생산·자주 바뀌는 로직 |
핵심 정리
- ROM은 주소선 개로 개의 워드(극소항)를 모두 고정적으로 생성하는 AND 배열과, 저장 내용에 따라 출력을 정하는 프로그램 가능한 OR 배열로 구성되며, 전체 용량은 비트다.
- ROM은 진리표를 그대로 옮겨 담기만 하면 조합논리회로가 완성되어 설계가 직관적이지만, 입력 변수가 많아지면 에 비례해 회로가 급격히 커진다.
- PLA는 AND 배열과 OR 배열을 모두 프로그램 가능하게 만들어, 사전에 함수를 간소화한 뒤 필요한 곱항만 구성함으로써 ROM보다 회로를 줄일 수 있다.
- PAL은 AND 배열만 프로그램 가능하고 OR 배열은 고정해, 제조 단순성과 속도를 얻는 대신 출력당 곱항 개수에 제한이 생긴다.
- 필요한 워드 수가 주어지면 그 값 이상을 만족하는 최소 을 찾아 주소선 개수 을 구한다.