# Single-slope ADC

:::goals
- single-slope ADC가 "내려가는 ramp와 카운터"로 전압을 숫자로 바꾸는 원리를 안다.
- 분해능, clock, 변환 시간의 관계 $2^N/f_{clk}$를 계산할 수 있다.
- reset과 signal을 각각 변환해 빼는 digital CDS를 설명할 수 있다.
- 양자화 noise $\text{LSB}/\sqrt{12}$의 뜻과, read noise와의 관계를 안다.
:::

## 한 문장으로
물탱크의 수위를 재는 가장 단순한 방법은 수면이 내려가는 속도가 일정할 때 **몇 초 만에 목표 높이에 닿는지 세는 것**이다. ==Single-slope ADC==가 바로 그렇게 한다. 일정한 기울기로 내려가는 ramp 전압을 만들고, 카운터가 clock을 세다가, 비교기가 "ramp가 입력을 지났다"고 알려 주는 순간 센 숫자가 코드가 된다.

## 구조
- **Ramp 발생기**: 모든 column이 공유하는 하나의 기울어진 전압.
- **비교기**: column마다 하나씩. 입력과 ramp를 비교해 지나치는 순간 뒤집힌다.
- **카운터**: 비교기가 뒤집히는 순간의 clock 수를 저장한다.

column마다 비교기와 카운터가 있으므로 **한 행의 모든 픽셀을 동시에** 변환한다. 하나의 ADC가 느려도 수천 개가 병렬로 일하는 셈이다.

## 분해능과 시간
N bit 코드를 얻으려면 ramp가 전체 범위를 지나는 동안 $2^N$번 셀 수 있어야 한다.

$$
T_{conv} = \frac{2^N}{f_{clk}}, \qquad \text{LSB} = \frac{V_{range}}{2^N}
$$

100 MHz clock에서 10 bit는 10.24 µs, 12 bit는 41 µs다. **bit 하나를 늘리면 변환 시간이 두 배**가 된다. 06장의 정착 시간이 bit에 비례해 늘던 것과 대조된다. 그래서 고해상도·고속에서는 ramp를 두 단계로 나누거나 clock을 빠르게 하는 방법을 쓴다.

[[lab:ramp]]

## Digital CDS
4T 픽셀의 reset 값과 signal 값을 각각 변환해 **코드에서 뺀다**. 아날로그에서 빼는 대신 숫자로 빼므로 ==digital CDS==라고 한다. 두 변환에 똑같이 들어간 성분, 예를 들어 비교기의 offset이나 ramp 시작점의 차이도 함께 지워진다. reset 값은 범위가 좁으므로 짧은 ramp로 빨리 변환하고, signal 값은 전체 범위로 변환하는 경우가 많다.

## 양자화: 계단의 오차
연속적인 전압을 LSB 단위의 계단으로 바꾸면 −½에서 +½ LSB 사이의 오차가 생긴다. 입력이 충분히 흔들리면 이 오차는 고르게 퍼진 무작위 값처럼 보이고, 그 RMS는 다음과 같다.

$$
\sigma_q = \frac{\text{LSB}}{\sqrt{12}} \approx 0.29\ \text{LSB}
$$

[[lab:quant]]

- read noise가 1 LSB보다 충분히 크면 양자화 noise는 RSS 합에서 거의 묻힌다.
- read noise가 LSB보다 훨씬 작으면, 같은 입력은 늘 같은 코드가 되어 오차가 무작위처럼 행동하지 않는다. 평균해도 줄지 않는 계단 오차가 남는다.

그래서 LSB를 입력 환산 read noise 근처나 그보다 조금 작게 잡는 경우가 많다. 전자 수로 말하면 "1 LSB가 전자 몇 개인가"를 CG로 환산해 비교한다.

> 주의: 실제 ADC는 범위 밖 입력에서 코드가 최솟값·최댓값에 걸리고(clipping), 비교기의 지연과 noise, ramp의 휘어짐(비선형)이 더해진다. 이 장의 식은 이상적인 ramp와 비교기를 가정한다.

## 핵심 정리
- single-slope ADC는 ramp가 입력을 지나는 시간을 clock으로 센다.
- $T_{conv} = 2^N/f_{clk}$: bit 하나에 변환 시간 두 배.
- reset·signal 코드를 빼는 digital CDS는 공통 offset을 지운다.
- 양자화 noise는 $\text{LSB}/\sqrt{12}$. read noise와 비교해 LSB 크기를 정한다.
