Comparator 는 amplifier 와 함께 가장 PVT에 민감한 analog block 중 하나입니다. Process, Voltage, Temeprature 뿐만 아니라 Layout effect 등 여러 요인에 의해 offset 이 생기죠. 특히나 이 comparator는 일반적으로 analog signal을 digital signal 로 변환할 때 쓰이기 때문에 이 offset 이 더 critical 합니다.
일반적으로 먼 거리로 signal 을 전송할 때 우리는 noise에 더 immune 한 digital signal 로 변환하여 전송합니다. analog signal 은 약간의 noise 만 끼어도 그 영향을 무시할 수 있지만, digital signal 은 DSP 기술을 사용해서 일정 수준 noise 를 걸러낼 수 있기 때문이죠. 하지만 이 digital signal 을 만드는데 필수적인 comparator 에서부터 offset 이 낀다면, 만들어진 digital signal이 잘못된 것이므로 꼭 이 offset을 잘 관리해주어야 합니다.
가장 기본적인 comparator 구조는 위와 같습니다. preamplifier 를 통해 analog signal의 크기를 키워주고 decision circuit 이라 불리는 dynamic latch를 통해 amplified 된 signal 을 비교하여 digital output인 0 혹은 1을 얻어냅니다. 이 구조의 comparator 와 여러 개의 reference voltage 가 있다면 우리가 흔히 아는 flash-ADC를 만들 수 있죠.
하지만 이 comparator에는 offset이 낄 수 있는 곳이 여러 곳이 있습니다. 먼저 Preamplifier 에서 vos1이라는 offset voltage가 끼고 decision circuit 에서는 vos2라는 offset voltage가 낀다고 해봅시다. post amplification에서도 offset voltage가 낄 수 있지만, 일반적으로 많이 생략하는 stage이기도 하니 제외하고 생각해보겠습니다. Output reffered voltage로 offset voltage를 해석해보면 아래와 같습니다.
결국 preamplifier 에서 생기는 offset voltage vos1 은 A * vos1 로 vos2 보다 훨씬 더 큰 영향을 주게 됩니다. 이러한 offset voltage는 결국 calibration scheme 없이는 사용하기 힘든 경우가 많습니다. variation 을 없애려면 comparator 사이즈를 엄청나게 크게 그려야할텐데, 이렇게 되면 고속의 동작에서는 사용하지 못하기 때문이죠.
이러한 offset 을 calibration 할 수 있는 간단한 scheme 은 바로 capacitor를 이용하는 방법입니다. auto-zeroing과 같은 방법도 있지만 여러 clock signal 이 필요하기 때문에 위와 같은 scheme 이 더 간단할 수 있죠. Comparator 구조에서 decision 을 내리는 dynamic latch 여러개의 capacitor 를 달게 됩니다. 여기서 capacitor 에는 switch 를 달아서 보이는 parasitic cap을 조절할 수 있는 구조이죠.
Dynamic latch 같은 경우에는 일반적으로 fighting inverter를 사용해서 input1 이 큰지, input2 가 큰지를 판단하게 됩니다. 여기서 한쪽 inverter에 보이는 parasitic cap 이 다른 쪽에 비해 더 크다면 inverter의 driver strength 가 상대적으로 약해지게 되고 결국은 offset 이 생기게 되죠. 결국 input1 에 offset 이 낀다면 input2 쪽에 parasitic cap을 늘려 offset을 보상해주는 방법입니다.
본격적으로 input 을 비교하는 comparator 의 동작을 시키기 전에 comparator 의 input을 short 시키고 calibration scheme 을 동작시킵니다. 만약에 완벽한 comparator 의 경우에는 comparator 의 output 이 metastability 영역에 가있겠지만 실제로는 0 혹은 1의 output이 나오게 될겁니다. 그 output code를 사용해 comparator 의 offset compensation cap 값을 조절해주고 다시 comparator 동작을 시켜보는 겁니다.
해당 동작을 이용하면 위와 같이 output code가 증가 혹은 감소를 하다가 특정 값이 되었을 때 계속해서 증감을 반복하면서 toggle 하게 될것입니다. 이렇게 되면 offset이 compensation 된거죠. compensation cap의 bit 수를 늘릴수록 더 정교하게 동작하는 comparator 를 얻을 수 있을 겁니다. 하지만 또 너무 달게 된다면 그만큼 parasitic cap이 크게 보여 고속의 동작은 힘들수도 있겠죠.
이러한 동작을 사용한다면 comparator의 offset 을 쉽게 calibration 할 수 있습니다. 기존의 jssc 논문에 가볍게 소개된 scheme 중 하나이죠. 다음 번에 기회가 된다면 auto-zeroing 과 같은 다른 scheme 에 대해서도 다뤄보겠습니다.