데이터 변환기: DAC와 ADC
센서가 내놓는 전압은 연속이고, 그것을 처리할 프로세서는 정수만 안다. 그 사이에 아날로그-디지털 변환기(ADC)와 반대 방향의 디지털-아날로그 변환기(DAC)가 있다. 변환기는 연속값을 유한한 계단으로 깎아 내는 순간 잡음을 하나 더 만든다. 그 위에 커패시터의 부정합, 비교기의 잡음과 망설임, 클록의 흔들림이 얹힌다. 이 장은 이 오차들을 하나씩 눈으로 보고, AB-1의 12비트 1 MS/s SAR ADC 예산을 세운다.
- 양자화 잡음 \(\Delta/\sqrt{12}\)에서 이상적 \(\mathrm{SNDR} = 6.02N + 1.76\) dB를 유도하고 FFT로 확인한다.
- 이진 가중 커패시터 DAC의 단위 부정합이 DNL·INL을 만드는 방식, MSB 전환에서 DNL이 가장 큰 이유, 온도계 코드의 장점을 안다.
- 비교기의 프리앰프와 래치 재생 \(\tau = C/g_m\), 준안정 확률, 입력 환산 잡음을 시간 영역에서 본다.
- 플래시, 파이프라인(1.5비트/단 디지털 보정), SAR 구조가 해상도와 속도를 어떻게 맞바꾸는지 비교한다.
- 코드 밀도 히스토그램으로 DNL·INL·누락 코드를 재고, SNDR·SFDR·ENOB가 입력 주파수와 지터에 따라 떨어지는 모습을 본다.
- AB-1 SAR ADC(LSB 293 µV, 목표 ENOB ≥ 10.5)의 잡음·부정합·클록 예산을 세운다.
양자화: 계단과 잡음
N비트 변환기는 기준 전압 \(V_{\mathrm{REF}}\) 범위를 \(2^N\)개의 칸으로 나눈다. 칸 하나의 폭이 LSB(Least significant bit, \(\Delta\))다. 칸 안의 입력은 모두 같은 코드가 되므로 출력과 입력 사이에는 언제나 \(\pm\Delta/2\) 안의 오차가 남는다. 이 양자화 오차(Quantization error)는 입력을 천천히 쓸면 톱니 모양이고, 입력이 바쁘게 움직이면 거의 균일 분포의 잡음처럼 보인다.
아래에서 비트 수를 바꿔 계단을 보고, 같은 신호를 FFT로 본다. 1비트를 더할 때마다 잡음 바닥이 6 dB씩 내려가는지, 입력을 줄이면 SNDR이 그만큼 깎이는지 확인한다.
계단, 톱니, 그리고 6 dB/비트
N이 작을 때 오차는 입력과 같은 주기로 반복되므로 잡음이 아니라 고조파가 된다. 균일 잡음 근사는 입력이 많은 코드를 지나가고 신호와 표본화 주파수가 서로 맞물리지 않을 때 성립한다. 디더를 넣으면 오차가 입력과 상관을 잃어 고조파가 잡음 바닥으로 녹는다. 실제 12비트 변환기는 열잡음이 이미 디더 노릇을 한다.
잡음 바닥이 FFT 점 수에 따라 내려가 보이는 것에 주의한다. 전체 양자화 잡음 전력은 그대로이고, 점이 많을수록 그 전력이 더 많은 빈으로 나뉠 뿐이다. 빈 하나의 높이는 \(\mathrm{SNR} + 10\log_{10}(M/2)\)만큼 신호 아래에 있다(M = FFT 점 수). 4096점이면 33 dB가 더해진다.
DAC: 저항 열과 커패시터 배열
DAC는 코드를 전압으로 바꾼다. ADC의 대부분도 안에 DAC를 하나 품고 있다(SAR의 커패시터 배열, 파이프라인의 단마다 있는 DAC). 가장 단순한 것은 저항 열(Resistor string)이다. 같은 저항 \(2^N\)개를 직렬로 잇고 마디마다 탭을 뽑는다. 출력은 탭 위치에 따라 단조 증가할 수밖에 없지만, 12비트면 저항 4096개와 스위치 트리가 필요하다.
CMOS 변환기는 주로 커패시터를 쓴다. 커패시터는 정적 전류를 먹지 않고 공정에서 비(ratio)가 잘 맞는다. 이진 가중(Binary-weighted) 배열은 \(C, 2C, 4C, \dots, 2^{N-1}C\)를 두고 비트마다 하나씩 바닥판을 \(V_{\mathrm{REF}}\) 또는 GND에 잇는다. 위판에 모인 전하가 코드에 비례하는 전압을 만든다.
계단 하나하나의 높이가 1 LSB에서 얼마나 벗어났는지가 DNL(Differential nonlinearity), 계단을 쌓은 곡선이 직선에서 얼마나 벗어났는지가 INL(Integral nonlinearity)이다. DNL이 −1 LSB면 계단 하나가 사라진다(ADC에서는 그 코드가 나오지 않는 누락 코드(Missing code)). 아래에서 단위 커패시터 부정합을 키우며 이진 배열과 온도계 배열을 비교한다.
단위 커패시터 부정합 → DNL·INL
이진 배열의 약점은 MSB 전환이다. 코드가 1 늘 뿐인데 커패시터 절반이 꺼지고 나머지 절반이 켜진다. 작은 상대 오차도 \(2^{N-1}\)개 단위만큼 커져 계단 하나에 몰린다. 온도계 코드(Thermometer code) 배열은 코드가 1 늘 때 단위 하나만 새로 켠다. 이미 켜진 것은 그대로이므로 DNL이 작고 출력은 언제나 단조다. 대신 \(2^N - 1\)개의 단위를 따로 제어하는 디코더가 필요하다. 그래서 실제 설계는 상위 몇 비트만 온도계로 나누는 분할(Segmented) 구조를 쓴다.
비교기: 작은 차이를 0과 1로
모든 ADC의 끝에는 비교기(Comparator)가 있다. 두 전압 중 어느 쪽이 큰지를 정해 논리 레벨 0 또는 1로 내놓는다. 12비트 SAR에서는 마지막 비트를 정할 때 두 입력의 차이가 1 LSB(293 µV)보다 작다. 이 차이를 1.8 V 논리 레벨까지 키우는 데 연산 증폭기를 쓰면 너무 느리다. 대신 양의 피드백으로 스스로 갈라지는 래치(Latch, 재생 회로)를 쓴다.
교차 결합된 두 인버터는 처음 차이 \(v_0\)를 지수 함수로 키운다. 시상수는 출력 마디 커패시턴스와 인버터의 \(g_m\)이 정한다. 래치 앞에 이득 \(A\)의 프리앰프(Preamplifier)를 두면 처음 차이가 \(A\)배로 커지고 래치의 오프셋과 킥백이 입력에서 \(A\)배 작아 보인다.
문제는 입력이 0에 아주 가까울 때다. 주어진 시간 \(T\) 안에 문턱에 닿지 못하면 출력이 0도 1도 아닌 준안정(Metastability) 상태로 남는다. 그런 입력의 폭은 \(T\)에 대해 지수적으로 좁아진다. 또 입력 환산 잡음 때문에 같은 입력에 대해서도 결정이 흔들린다. 아래에서 둘을 함께 본다.
래치 재생, 준안정, 비교기 잡음
결정 시간은 입력의 로그에 비례하므로 래치는 아무리 작은 입력도 "결국은" 정한다. 그러나 정해진 시간 \(T\) 안에 못 정할 확률은 \(e^{-T/\tau}\)에 비례해 떨어진다. τ가 50 ps이고 T가 1 ns면 지수가 20이라 준안정 창은 입력에서 0.1 nV 수준이다. AB-1처럼 비트당 수십 ns를 주는 SAR에서는 사실상 문제가 되지 않지만, GHz 플래시 변환기에서는 τ가 설계를 정한다.
비교기 잡음은 오프셋과 다르다. 오프셋은 모든 비교에 같은 쪽으로 더해져 전체 전달 곡선을 옮길 뿐이지만(SAR에서는 이득 오차·오프셋으로 끝난다), 잡음은 비교마다 달라 SNDR을 직접 깎는다. 입력 쌍의 \(g_m\)을 키우고 적분 시간을 늘리면 줄지만 전력과 시간이 든다. AB-1에서는 입력 환산 잡음을 약 100 µV rms(0.34 LSB) 이하로 잡는다.
플래시와 파이프라인: 병렬로 빠르게
가장 빠른 ADC는 모든 문턱에 비교기를 하나씩 두는 플래시(Flash) 구조다. N비트에 비교기 \(2^N - 1\)개가 저항 열의 탭과 입력을 동시에 비교한다. 입력보다 낮은 탭의 비교기는 모두 1, 높은 탭은 모두 0이라 출력은 온도계 코드이고, 인코더가 1과 0의 경계를 이진 코드로 바꾼다. 한 클록에 변환이 끝나지만 비트 하나마다 비교기 수와 전력, 입력 커패시턴스가 2배가 된다. 그래서 플래시는 6~8비트 이하에서 쓴다.
플래시 ADC: 온도계 코드와 버블
버블은 비교기 오프셋이나 타이밍 차이 때문에 이웃한 문턱의 판정 순서가 뒤집혀 생긴다. "1 다음 0"인 자리를 찾는 단순한 인코더는 경계가 여럿이면 크게 틀린다. 그래서 세 이웃을 보고 다수결을 하거나 1의 개수를 세는 인코더를 쓴다. 비교기 오프셋을 LSB보다 충분히 작게 하는 것도 기본이다. 비트가 늘면 LSB가 작아져 오프셋 요구가 급격히 어려워진다.
파이프라인: 조금씩 정하고 잔차를 넘긴다
파이프라인(Pipeline) ADC는 일을 단(stage)으로 나눈다. 각 단은 거친 서브 ADC로 몇 비트를 정하고, 그 값을 DAC로 되돌려 입력에서 뺀 뒤, 남은 잔차(Residue)를 2배(1비트/단) 키워 다음 단에 넘긴다. 단마다 표본-유지가 있으므로 모든 단이 동시에 다른 표본을 처리해 처리율은 한 단의 속도와 같다. 지연(latency)만 단 수만큼 늘어난다.
1비트/단은 문턱 하나로 입력이 0보다 큰지만 정한다. 비교기 오프셋으로 문턱이 조금만 어긋나도 잔차가 \(\pm V_{\mathrm{REF}}\) 범위를 벗어나 다음 단을 포화시키고, 그 오차는 영영 되돌릴 수 없다. 1.5비트/단(1.5-bit/stage, RSD)은 문턱을 \(\pm V_{\mathrm{REF}}/4\) 두 개로 두고 출력을 −1, 0, +1 세 값으로 정한다. 전체 입력 범위 \(\pm V_{\mathrm{REF}}\)에서 이상 잔차는 다음 단의 \(\pm V_{\mathrm{REF}}\) 범위 안에 머문다. 문턱 양쪽의 잔차가 \(\pm V_{\mathrm{REF}}/2\)로 뛰므로 비교기 문턱에 여유가 생기고, 비교기 오프셋이 \(V_{\mathrm{REF}}/4\)보다 작으면 그 오차는 다음 단 결과와 겹쳐 더해지면서(디지털 보정) 사라진다.
파이프라인 잔차와 1.5비트/단 보정
디지털 보정은 비교기 정확도를 거의 공짜로 풀어 준다. 그러나 잔차 증폭기의 이득과 DAC 정확도는 보정하지 못한다. 2배 이득이 0.1%만 틀려도 그 단 아래 비트들이 그만큼 어긋난다. 그래서 파이프라인의 1단 OTA는 높은 이득과 빠른 정착을 동시에 요구받고, 전력 대부분이 여기에 들어간다(9장, 15장).
정적 시험: 코드 밀도 히스토그램
ADC의 DNL과 INL은 어떻게 재는가. 문턱 4096개를 하나씩 찾아 전압을 재는 것은 느리고 잡음에 약하다. 대신 분포를 아는 입력을 수만 번 넣고 코드마다 몇 번 나왔는지 센다. 이것이 코드 밀도 시험(Code density test, Histogram test)이다. 느린 램프를 넣으면 이상적인 ADC는 모든 코드가 같은 횟수로 나온다. 계단이 넓은 코드는 더 많이, 좁은 코드는 덜 나온다.
아래 8비트 SAR ADC는 앞 절의 이진 가중 커패시터 DAC를 품고 있다. 같은 부정합이 어떻게 히스토그램의 들쭉날쭉으로 나타나는지, 표본이 쌓이며 측정 DNL이 참값에 다가가는 모습을 본다.
히스토그램이 DNL·INL·누락 코드를 보여 준다
SAR ADC에서 DAC의 큰 계단 오차는 그대로 ADC의 넓은 코드·좁은 코드가 된다. DAC의 MSB 커패시터가 나머지 합보다 작으면 DAC 계단이 아래로 접히고, SAR 결정 경로 중 일부의 입력 구간이 사라져 해당 출력 코드가 나오지 않는다. 입력마다 변환 결과는 하나씩 나오지만, 출력 코드가 그 값을 건너뛰는 것이다. 반대로 MSB가 크면 넓은 코드가 생긴다. 누락 코드는 측정 시스템이 그 코드를 영원히 못 본다는 뜻이라 제어 루프에서 특히 해롭다. 그래서 사양서에는 "누락 코드 없음(No missing codes)"이 따로 적힌다.
동적 성능: SNDR, SFDR, ENOB와 지터
DNL·INL은 느린 입력에서의 정확도다. 입력이 빨라지면 새 오차가 보인다. 가장 근본적인 것은 표본화 시각의 흔들림, 지터(Aperture jitter)다. 사인 \(A\sin 2\pi f t\)의 기울기는 최대 \(2\pi f A\)이므로 시각이 \(\delta t\) 틀리면 전압이 \(2\pi f A\,\delta t\)만큼 틀린다. 이 오차는 신호 진폭에 비례하므로 진폭을 키워도 SNR이 나아지지 않는다.
또 하나는 INL이 만드는 왜곡이다. 전달 곡선이 활처럼 휘면(짝수 차) 2차 고조파가, S자로 휘면(홀수 차) 3차 고조파가 선다. 가장 큰 스퍼와 신호의 비가 SFDR(Spurious-free dynamic range)이다. 아래에서 입력 주파수와 지터, INL 모양을 바꿔 스펙트럼과 주파수 스윕을 함께 본다.
입력 주파수가 오르면 무엇이 무너지나
스윕 그래프는 ADC 데이터시트의 "SNDR vs 입력 주파수"와 같은 모양이다. 낮은 주파수에서는 양자화·열잡음·INL이 만든 평탄한 구간이 있고, 높은 주파수에서는 지터나 표본-유지의 대역 제한이 기울기를 만든다. 나이퀴스트 주파수(fs/2)까지 SNDR을 유지하는 것이 좋은 ADC다. AB-1처럼 입력 대역이 10 kHz인데 1 MS/s로 표본화하면 지터 요구는 느슨하다. 지터 예산의 실제 크기는 클록을 만드는 PLL에서 다시 따진다(18장).
구조 고르기: 해상도–속도 지도와 FoM
지금까지 본 구조들은 해상도와 속도를 서로 다르게 맞바꾼다. 플래시는 한 클록에 끝나지만 비트마다 비교기가 2배다. 파이프라인은 단을 늘려 해상도를 얻고 처리율을 유지한다. SAR는 비교기 하나로 N번 물어 전력은 작지만 클록이 N배 이상 빨라야 한다. ΔΣ(17장)는 속도를 해상도로 바꾼다. 같은 일을 얼마나 적은 에너지로 하는가를 비교하는 숫자가 Walden FoM(Figure of merit)이다.
아래 지도에서 구조별 영역(정성적인 대략의 범위)을 보고, 설계점을 끌어 FoM을 계산한다. Schreier FoM은 신호 대역 BW = fs/(2·OSR)로 계산한다. 나이퀴스트 ADC는 OSR = 1, ΔΣ 등 오버샘플링 ADC는 실제 OSR을 입력한다. AB-1의 목표점(12비트 1 MS/s, ENOB 10.5)이 어느 영역에 들어가는지 확인한다.
해상도–속도 지도와 FoM 계산기
AB-1의 12비트 1 MS/s는 SAR가 가장 잘하는 자리다. 비교기 하나와 커패시터 배열 하나로 정적 전류 없이 만들 수 있고, 커패시터 배열이 표본-유지까지 겸한다. 남은 일은 SAR가 어떻게 이진 탐색을 하는지, 그리고 클록과 커패시터, 비교기에 예산을 나누는 것이다.
SAR ADC: 이진 탐색으로 12비트
축차 비교형(Successive approximation register, SAR) ADC는 스무고개를 한다. "입력이 범위의 절반보다 큰가?" 답에 따라 MSB를 정하고, 남은 절반 범위에서 다시 묻는다. N번 물으면 N비트가 정해진다. 질문에 쓰는 기준 전압은 DAC가 만들고, 비교는 비교기 하나가 한다. CMOS에서는 이진 가중 커패시터 배열이 DAC와 표본-유지를 동시에 맡는 전하 재분배(Charge redistribution) 구조를 쓴다.
아래 종합 시뮬레이터에서 입력 전압을 끌어 놓고 "한 단계"를 눌러 본다. MSB부터 커패시터 하나의 바닥판이 VREF로 올라가고, 비교기가 DAC 전압이 입력을 넘었다고 하면 다시 GND로 돌아간다. DAC 전압은 매 단계 남은 거리의 절반씩 입력에 다가간다. 아래 타이밍도는 AB-1의 1 MS/s를 16 MHz 클록 16사이클로 나눈 모습이다.
SAR ADC 이진 탐색: AB-1 12비트 1 MS/s
SAR는 비교기 하나로 끝나는 대신 시간을 쓴다. N비트에 비교 N번이 필요하고, 그 앞에 표본화 시간이 있다. 표본화는 커패시터 배열 전체(입력 쪽에서 보면 \(C_{\mathrm{tot}}\))를 12비트 정확도까지 충전해야 하므로 비트 한 번보다 길게 잡는다. AB-1은 1 µs를 16사이클로 나눠 표본화 3, 비트 결정 12, 출력·리셋 1로 쓴다. 클록은 16 MHz, 한 사이클 62.5 ns다.
비트마다 비교기 잡음과 DAC 정착 오차가 끼어들 수 있다. 위에서 본 것처럼 이진 탐색은 한 번 틀린 결정을 되돌리지 못한다. 그래서 고속 SAR는 파이프라인의 1.5비트처럼 일부러 비트를 겹치게(radix < 2, 중복 비트) 설계해 앞 결정의 실수를 뒤 단계가 흡수하게 한다. AB-1처럼 클록 여유가 있으면 비트 하나를 더 쓰는 중복을 넣을 수도 있다.
12비트 1 MS/s SAR: LSB 293 µV, 이상 74 dB, 예산을 나눠 ENOB 약 11.1 → 목표 10.5를 넘긴다
기준 1.2 V를 4096칸으로 나누면 LSB ≈ 293 µV, 양자화 잡음 84.6 µV rms, 꽉 찬 사인(0.424 V rms)의 이상 SNDR은 74.0 dB다. 목표 ENOB 10.5는 SNDR 65.0 dB, 곧 잡음과 왜곡의 합을 약 239 µV rms 아래로 묶는다는 뜻이다. 이 예산을 넷으로 나눈다. 양자화 84.6 µV, 표본화 kT/C(배열 전체 1 pF) 64 µV, 비교기 입력 환산 잡음 100 µV(0.34 LSB), DAC 부정합(단위 σu 0.5% → σINL ≈ 0.16 LSB) 약 47 µV. 제곱합은 약 153 µV로 SNDR 약 68.8 dB, ENOB 약 11.1이다. 남는 몫(약 184 µV)은 표본화 지터에 줄 수 있는데, 500 kHz 꽉 찬 입력에서 σt 약 140 ps까지 들어간다. DNL은 MSB 전환에서 σ ≈ 64σu ≈ 0.32 LSB이므로 3σ 기준의 누락 코드 방지 설계 여유를 만족한다. 다만 가우시안 꼬리는 3σ 밖에도 있어 모든 칩의 누락 코드 없음을 보장하지 않는다. 전체 코드·공정 코너와 통계적 수율을 검증해야 한다. 클록은 표본화 3 + 비트 12 + 1 = 16사이클로 16 MHz, 비트당 62.5 ns에서 DAC 정착 τ ≤ 약 4.4 ns, 래치 τ ≈ 50 ps.
핵심 정리
- 양자화 오차는 ±½ LSB 안의 톱니이고, 입력이 충분히 바쁘면 rms \(\Delta/\sqrt{12}\)의 백색 잡음처럼 보인다. 이상 SNDR = 6.02N + 1.76 dB(12비트 74.0 dB). ENOB = (SNDR − 1.76)/6.02.
- 비트 수가 작거나 입력이 표본화와 맞물리면 양자화 오차는 고조파가 된다. 디더나 열잡음이 그것을 잡음으로 바꾼다.
- 이진 가중 커패시터 DAC는 MSB 전환에서 \(2^N\)개 단위 오차가 한 계단에 몰려 DNL이 가장 크다(σ ≈ \(\sqrt{2^N}\sigma_u\)). 온도계 코드는 DNL을 줄이고 단조성을 보장하지만 INL은 단위 정합이 정한다.
- 래치 비교기는 차이를 \(e^{t/\tau}\), \(\tau = C/g_m\)로 키운다. 결정 시간은 입력의 로그에 비례하고, 정해진 시간 안의 준안정 확률은 \(e^{-T/\tau}\)로 준다. 비교기 잡음은 오프셋과 달리 SNDR을 깎는다.
- 플래시는 \(2^N-1\)개 비교기로 한 클록에 변환하고 버블에 약하다. 파이프라인은 단마다 잔차를 2배 키워 넘기고, 1.5비트/단 디지털 보정이 비교기 오프셋을 \(V_{\mathrm{REF}}/4\)까지 견딘다.
- 코드 밀도 히스토그램으로 DNL·INL·누락 코드를 잰다. 사인 입력은 역사인 보정을 한다.
- 지터는 \(\mathrm{SNR} = -20\log(2\pi f_{\mathrm{in}}\sigma_t)\)로 높은 주파수부터 SNDR을 무너뜨린다. INL은 고조파를 세워 SFDR을 깎는다.
- AB-1 SAR: 양자화 85 + kT/C 64 + 비교기 100 + 부정합 47 µV → 약 153 µV, ENOB 약 11.1. σu ≤ 0.5%, 클록 16 MHz(16사이클/변환).
확인 퀴즈
1. 이상적인 10비트 ADC에 −6 dBFS(전 범위의 절반 진폭) 사인을 넣었다. 기대되는 SNDR은 대략?
2. 이진 가중 커패시터 DAC에서 DNL이 가장 크게 튀기 쉬운 코드 전환은?
3. 100 MHz 사인을 받는 ADC의 표본화 클록 지터가 1 ps rms다. 지터만으로 정해지는 SNR 한계는 대략?
4. 1.5비트/단 파이프라인이 1비트/단보다 나은 점으로 가장 알맞은 것은?
5. 12비트 SAR ADC를 2 MS/s로 돌리려 한다. 표본화 3사이클, 비트 결정 12사이클, 출력 1사이클을 쓴다면 필요한 클록과 비트당 시간은?