1. 项目概述
1.1 为什么要自己动手搭建SAR ADC
接触过模数转换器(ADC)的工程师都知道,市面上有大量现成的ADC芯片,从低速高精度的Σ-Δ型到超高速的流水线型,选型丰富。但在芯片设计领域,很多时候你没法直接“买”一颗ADC回来用——当你需要把模拟前端、数字控制逻辑和ADC集成在同一颗芯片里时,就必须在Cadence环境下从零搭建ADC模块。SAR ADC(逐次逼近型模数转换器)凭借其结构简单、功耗低、面积小、中等精度速度的特点,成为SoC设计中应用最广泛的ADC架构之一。
这篇文章我会完整走一遍8位SAR ADC的搭建流程,从最基础的D触发器开始,一步步把比较器、CDAC电容阵列、SAR逻辑模块组合起来,最后跑完整的瞬态仿真验证性能。整个过程基于Cadence IC617( virtuoso)环境,工艺库使用tsmc 180nm。即便你用的是别的工艺库,只要掌握了原理和操作思路,迁移到其他节点也完全没问题。
1.2 这篇文章适合谁、能解决什么问题
先说清楚,这篇文章适合已有Cadence基础操作能力、但第一次接触数据转换器设计的读者。如果你已经会画反相器、知道怎么建schematic、能跑简单的spectre仿真,那这篇文章就是为你准备的。如果你完全没碰过Cadence,建议先花一两天熟悉virtuoso的基本操作流程,不然看后面的内容会比较吃力。
我在这篇文章里想解决的,是几个实际搭建过程中最容易被卡住的痛点:D触发器怎么搭才能保证SAR逻辑时序正确、CDAC电容阵列的开关时序怎么控制、比较器失调和噪声怎么影响整体精度、瞬态仿真不收敛怎么排查。这些东西教科书上不会写得很细,网上资料也往往只给结论不给过程,真正动手做的时候很容易浪费大量时间在调试上。
2. 8位SAR ADC整体架构与设计思路
2.1 SAR ADC的工作原理
SAR ADC的核心思想是二分搜索算法。8位SAR ADC需要8个时钟周期来完成一次转换,每个周期确定一位数字输出。大致流程是这样:首先采样保持电路把输入电压采到电容阵列上,然后从最高位(MSB)开始,依次把DAC输出电压和输入电压比较,根据比较结果决定该位是1还是0,接着更新DAC输出,进入下一位的比较。
举个例子,假设参考电压是1.8V,输入电压是1.234V。第一步把MSB设为1,此时DAC输出1.8V的一半,即0.9V,比较器输出表明输入大于DAC输出,所以MSB保留为1。第二步把次高位设为1,DAC输出0.9V加上0.45V,即1.35V,比较器输出表明输入小于DAC输出,所以次高位清为0。一路比较下去,8个周期后就能得到输入电压的二进制近似表示。
整个过程看起来简单,但落到电路实现上,涉及的问题就多了:DAC的建立精度必须高于0.5LSB(在1.8V参考下,8位的1LSB约7mV,半LSB约3.5mV),比较器必须在半个时钟周期内完成判断且不能有太大的失调,SAR逻辑的时序必须保持严格的先后关系。这些约束条件决定了每个模块的设计要求。
2.2 模块划分与选型考量
8位SAR ADC可以划分为下面几个子模块:
| 模块 | 功能 | 设计要点 |
|---|---|---|
| 采样开关 | 采集输入电压到电容阵列 | 导通电阻低、电荷注入小 |
| CDAC电容阵列 | 采样保持 + 数模转换 | 单位电容匹配性、开关时序 |
| 比较器 | 判断DAC输出与输入的大小 | 增益足够、速度足够、失调可控 |
| SAR逻辑 | 逐位逼近的数字控制 | 基于D触发器的移位寄存器和锁存器 |
| 时钟产生 | 产生采样和转换时钟 | 时序关系必须严格 |
这里我选择的方案是不带采样保持前端的电荷重分配式SAR ADC,也就是让CDAC本身兼任采样保持功能。这样做的好处是省去单独的前端SHA电路,减少功耗和面积,同时避免SHA和DAC之间由于时序不匹配带来的采样误差。
关于CDAC结构,8位SAR通常有两种选择:二进制加权电容阵列和分段电容阵列。二进制加权电容阵列结构简单、控制逻辑清晰,但最大的电容和最小的电容比值达到128:1(对8位而言),版图匹配性较差。分段电容阵列用衰减电容把高6位和低2位分开,可以显著减小电容展开比,但会引入寄生电容误差和额外的开关逻辑。为了降低初学难度,我在这篇文章里选择了二进制加权电容阵列,结构直观,调试容易,先把功能跑通再考虑优化。
SAR逻辑部分,我采用基于D触发器的异步时序结构。核心思路是:用一组移位寄存器产生逐位有效信号,再用一组锁存器记录比较结果。第一级移位寄存器在采样完成后启动,逐周期把有效信号从MSB传到LSB,同时锁存器把每一位的比较结果记录下来。
2.3 时钟方案与转换时序设计
整个SAR ADC的工作时序分成两个阶段:采样阶段和转换阶段。采样阶段持续至少1个时钟周期,此时采样开关导通,CDAC上的电压跟随输入;转换阶段需要8个时钟周期,每个周期完成一位判决。
在Cadence仿真环境里,我直接用一个理想的电压源产生clk信号,周期设置需要仔细考虑:为了模拟真实的转换过程,至少需要9个时钟周期(1个采样 + 8个转换)完成一次完整的转换,所以瞬态仿真的总时间至少要覆盖9个周期以上,才能看到完整的输出结果。
这里有一个初学者经常犯的错误:只仿真几个时钟周期,结果发现输出还没稳定就结束了,误以为电路有问题。我建议仿真时间至少设置20个时钟周期以上,最好能从第一个转换周期开始就抓取波形,观察数字输出是否按照预期逐位逼近。
3. 底层模块搭建:从D触发器到单元电路
3.1 D触发器:SAR逻辑的基石
所有SAR控制逻辑的核心单元就是D触发器。这里我用的D触发器是上升沿触发、带有异步复位端的结构。异步复位端非常重要,因为它保证电路在上电后能进入确定的初始状态,如果没有复位,移位寄存器启动时输出是随机的,整个转换过程会完全乱掉。
标准CMOS D触发器的门级结构需要两个锁存器串联,主锁存器在时钟低电平时采样输入,从锁存器在时钟高电平时锁存数据,这样就能实现上升沿触发。具体到晶体管级实现,我直接采用了标准的传输门结构,大约需要20个左右的晶体管。初学者如果从零开始画晶体管会很痛苦,建议使用Cadence的schematic editor,借助数字标准单元库或者自己用门电路搭建。
如果工艺库里有现成的标准单元(比如tsmc180nm库通常包含D触发器单元),可以直接调用,加快设计流程。但作为学习目的,我建议自己用门级电路搭一遍,这样你对时序的理解会深入很多。
D触发器在SAR逻辑里有两个用途:一是构成移位寄存器,产生逐位有效的控制信号;二是构成数据锁存器,在比较完成后锁存结果。前者需要同步时序设计,后者需要与比较器的valid信号配合。
3.2 与非门、或非门等基础门电路
在搭建SAR逻辑之前,需要确保基础门电路库是完整的。我用的tsmc180nm工艺库里,数字门电路是作为标准单元提供的,有完整的symbol和layout。如果你是第一次建库,需要确认下面这些单元是否可用:
- INV(反相器):基础中的基础,几乎所有逻辑都需要
- NAND2、NAND3(与非门):用于译码和逻辑组合
- NOR2(或非门):用于复位逻辑
- DFF(D触发器):SAR核心寄存器
- MUX(选择器):用于开关控制信号产生
确认库单元可用的方式是打开Library Manager,找到你的目标库,逐个展开单元查看是否有schematic和symbol。如果发现某个单元缺失,就需要自己从晶体管级开始画,这会大大增加工作量。所以建库的时候务必检查完整。
3.3 比较器的选择与电路实现
比较器是SAR ADC里对模拟性能影响最大的模块。8位SAR ADC的精度是8位,比较器需要能够分辨的最小电压差是0.5LSB,也就是约3.5mV。这就要求比较器的增益足够高、失调电压足够小、噪声足够低。
常用的比较器结构有两种:开环高增益比较器和锁存比较器。开环比较器本质上是一个高增益运放,响应速度快,但要消耗较大的静态电流;锁存比较器先用前置放大器放大输入差模信号,再由锁存级快速做出数字电平判断,功耗低、速度快,是SAR ADC的主流选择。
综合考虑8位精度和180nm工艺的实际情况,我选择了两级开环比较器结构:第一级是差分输入单端输出的折叠共源共栅放大器,提供约40dB增益;第二级是共源放大器,再提供约20dB增益,总的开环增益在60dB左右,完全满足比较器的分辨率要求。为了避免输出饱和影响下一级的判断,在输出端加了两个反相器整形,保证输出是干净的数字电平。
有人说60dB增益会不会太高了,实际上增益高一点没关系,只要不引起振荡就行。比较器内部加了米勒补偿电容,保证相位裕度在60度以上,稳定性没有问题。
3.4 CDAC电容阵列设计
CDAC是整个SAR ADC里最核心的模拟模块,它同时兼负采样保持和DAC的功能。8位二进制加权CDAC的电容值设置如下:从MSB到LSB,电容值依次为64C、32C、16C、8C、4C、2C、C、C。注意最低位是两个C并联,其中一个用于半LSB移位,这是电荷重分配DAC的标准结构。
单位电容C的选择需要综合考虑匹配性、速度和功耗。180nm工艺下,单位电容取20fF左右比较合适。如果太小,版图的寄生电容和失配会很严重;如果太大,总面积和功耗都会上升。我用的是20fF的MIM电容,整体电容阵列的总电容值是128C = 2.56pF,面积不算大,建立时间也可以接受。
有两点设计上的细节想强调:
第一,最高位电容(MSB)的权重是64C,也就是整个阵列的一半。这是因为在电荷重分配过程中,MSB的切换决定了DAC输出跳变的一半量程。如果MSB电容失配0.5%,就会产生约2.5LSB的误差,这在8位设计里是不允许的。所以版图上MSB电容需要用common centroid布局来保证匹配。
第二,开关控制信号的顺序很重要。CDAC的下极板接输入或地的开关必须由SAR逻辑严格控制。在采样阶段,所有下极板开关都接到输入信号;转换阶段开始后,先断开输入开关,再把MSB对应的下极板切到参考电压,完成第一次比较器的判断。这个过程我后面会详细讲。
3.5 采样开关设计
采样开关的作用是在采样阶段把输入电压传到CDAC的上极板。最简单的实现是单个NMOS晶体管,但缺点是导通电阻随输入电压变化,会产生非线性误差。
在180nm工艺、1.8V电源电压下,输入信号的范围是0到1.8V。如果只用一个NMOS,当输入电压接近1.5V以上时,过驱动电压非常小,开关几乎打不开,采样出来的电压误差会非常大。所以我这里用了CMOS互补开关,即NMOS和PMOS并联,两个管的导通电阻曲线互补,可以保证在整个输入范围内总导通电阻都比较低。
采样开关的尺寸选择也要注意。我用的NMOS宽长比是2.4u/180n,PMOS是4.8u/180n,PMOS做宽一些是因为它的迁移率较低,需要更大的尺寸才能获得与NMOS相当的导通电阻。如果通道太窄,RC常数太大,采样建立时间不够;如果通道太宽,电荷注入和时钟馈通效应又会增强。实际设计时需要用瞬态仿真来确定合适的尺寸。
4. SAR逻辑的完整实现
4.1 基于D触发器的逐位逼近控制逻辑
SAR逻辑是整个ADC的“大脑”,负责在正确的时间点产生正确的控制信号。它的核心结构是移位寄存器 + 锁存器的组合。
我设计的SAR逻辑结构如下:8个移位寄存器单元级联,第一级在采样阶段结束后被预置为1,其余为0。每个时钟上升沿,有效信号向右移动一位。这样从第1个转换周期开始,依次产生MSB、MSB-1、...、LSB的有效信号。
每个有效信号控制两件事:一是把该位对应的CDAC下极板开关切换到参考电压,二是把比较器的输出锁存到该位对应的寄存器里。时间顺序上,必须先切换DAC,等DAC输出稳定后再启动比较器,最后在时钟上升沿锁存比较结果。这个时序关系决定了SAR逻辑电路的延迟路径必须满足对应的时序约束。
我实际用了两次分频的逻辑思路来理解这个过程:如果把整个转换过程当作一个状态机,采样阶段是状态0,转换的8个时钟周期是状态1到状态8。每个状态的切换由时钟上升沿触发,状态内部完成DAC切换和比较。这本质上就是一个时序逻辑电路设计的经典例子。
4.2 复位逻辑的设计细节
复位逻辑决定了SAR ADC启动时的初始状态。我用的是全局复位信号RST,低电平有效。复位时,所有移位寄存器的输出清零,所有锁存器清零,CDAC的下极板开关全部接到地。
这里有一个很关键的细节:复位不仅要清移位寄存器,还要清输出锁存器。只清移位寄存器的话,第一次转换时输出端口是上一个状态的残留值,显示出来的波形会让人误以为电路出错。我一开始就踩过这个坑,输出波形看起来奇奇怪怪的,后来检查才发现是锁存器没有复位导致的。
复位信号在仿真开始时由脉冲源产生,持续一个时钟周期的高电平(对于复位信号来说是拉低),然后回到正常工作电平。在Cadence里,我用一个独立的脉冲电压源产生这个信号,设置好延迟和脉宽即可。
4.3 译码与开关驱动电路
CDAC的每个下极板开关都需要一个控制信号。控制信号的产生逻辑如下:采样阶段,所有开关都切换到输入IN;转换阶段,根据SAR寄存器的值,决定每个电容下极板接VREF还是接GND。
以MSB位为例,控制信号的逻辑是:采样信号为高时,MSB开关接输入;采样信号为低且对应有效信号为高时,MSB开关接VREF;其他情况接GND。这个逻辑可以用一个简单的组合电路实现:用采样信号和有效信号组合成三个选择输入。
我在实际实现中,用了一个二选一MUX级联的方式来做开关控制。第一级MUX选择输入还是DAC模式,第二级MUX在DAC模式下选择VREF还是GND。这样逻辑清晰,便于调试。
开关驱动电路要注意的是信号的驱动能力。CDAC的开关是传输门结构,栅极电容不小,如果驱动能力不足,开关切换速度会变慢,影响DAC建立时间。我在每个开关控制信号的末端加了两级反相器作为缓冲器,有效解决了驱动问题。
5. 仿真环境搭建与完整仿真
5.1 Cadence仿真环境准备
开始仿真之前,确保你的Cadence环境已经配置好。我使用的是IC617,配置了tsmc180nm工艺库。仿真的整个流程是:在virtuoso schematic里完成电路图绘制,再创建testbench调用spectre仿真器进行瞬态分析。
Testbench需要包含这些模块:被测试的SAR ADC顶层模块、理想电压源(电源VDD、地VSS、参考电压VREF、采样时钟CLK、复位信号RST)、输入信号源(可以是斜坡或正弦波)、数字输出负载(通常是理想的电容负载)。
参考电压VREF我设置为1.8V,输入信号用分段线性源(PWL)或者正弦波源。如果是验证ADC的静态性能(DNL/INL),输入用斜坡信号比较合适;如果是验证动态性能(SNR/SFDR),输入用正弦波。第一次跑通功能验证,建议用斜坡信号,容易观察输出码是否单调递增。
5.2 瞬态仿真的参数设置与操作步骤
创建一个瞬态仿真的具体操作如下:
在virtuoso中打开testbench顶层schematic,选择Launch ADE L(或者ADE XL),设置仿真类型为transient(瞬态仿真)。关键参数设置如下:
- 仿真总时间:至少20个时钟周期。如果时钟频率是1MHz,周期1us,那么总仿真时间至少20us。我习惯多留一些余量,设置成50us,这样后面增加输入信号扫频方便一些。
- 最大步长(maxstep):这个参数非常关键。默认值往往太大,导致关键瞬态过程(比如比较器翻转瞬间)被漏掉,仿真结果看起来波形严重失真。我一般设置成时钟周期的百分之一,也就是10ns。如果你发现某个瞬间波形很奇怪,先把maxstep调小再试。
- 精度参数:使用默认的moderate精度即可。如果遇到不收敛问题,可以尝试改成liberal(加快收敛但精度略降)。
运行仿真的操作很简单,点击绿色运行按钮等待Spectre跑完。如果一切正常,就能在波形窗口看到各个关键节点的电压波形。
5.3 仿真波形的分析方法
仿真跑完之后,如何判断电路工作是否正常?我的分析方法是按照以下步驟逐一检查:
首先看CLK输入波形是否正常。这个看似废话,但实际仿真中很多人用脉冲源设置错了周期或占空比,导致时钟根本不是预期的频率。检查时钟的上升沿时间点是否符合预期。
其次看采样保持信号,也就是CDAC上极板电压。波形应该表现为:采样阶段跟随输入信号,进入转换阶段后保持稳定。如果上极板电压在转换阶段出现明显的漂移或台阶,说明开关漏电或者CDAC电荷泄漏严重,需要检查开关管。
接着看比较器的输出。比较器应该在每个转换周期内完成一次有效的翻转,输出从上一位的比较结果变为当前位的比较结果。在波线上可以看到8个周期的脉冲式变化。
最后看数字输出。这是最直观的判断方式:把8位数字输出信号画在一起,转换成模拟曲线(可以用Calculator里的bus功能),观察是否是一条随输入线性变化的曲线。如果输入是斜坡,输出曲线应该是一条单调递增的阶梯线。如果有跳码或非单调性,就要回头排查具体是哪一位出了问题。
6. 常见问题与避坑指南
6.1 瞬态仿真不收敛的排查思路
Cadence瞬态仿真不收敛,是初学者遇到最多的报错之一。报错信息通常会提示哪个节点没有收敛,或者让你调整积分容差参数。这个问题我在第一次搭建SAR ADC时也遇到过,分享一下常见的排查方向。
最直接的方法是调整仿真器的收敛参数。在ADE L中选择Simulation Options,把gmin(最小电导)从默认值调大一些,比如1e-12调到1e-10,这能有效帮助仿真器找到直流工作点。另外把iabstol(电流绝对精度)从默认的1e-12调到1e-13或更小,也有助于收敛。
如果调参还不收敛,就要考虑是不是电路本身有问题。有一种非常常见的情况:没有设置初始条件。比如CDAC的上极板电压是浮空的(没有初始电荷),仿真器无法确定初始状态,就会导致不收敛。解决方案是在仿真设置里给关键节点添加初始条件。具体做法是选中该节点,右键设置初始电压,比如V=0。
我碰到的另一个坑是时钟脉冲上升沿时间设置得太短。如果上升沿是0(理想跳变),Spectre会很难处理这种无限斜率的信号。解决方案是把上升沿设为1ns甚至更宽的时间。你可以把理想脉冲源的上升时间从默认的0改成1ns(大约是时钟周期的千分之一),收敛问题往往就解决了。
6.2 比较器失调导致的转换错误
有时仿真能跑完,但输出结果不对,最常见的原因就是比较器设计有缺陷。如果比较器的失调电压过大,超过了0.5LSB,转换结果就会发生错误。
判断方法很简单:比较器两个输入端短接,输出应该稳定在逻辑中间值(对1.8V电源来说大约是0.9V)。如果输出明显偏到高电平或低电平一侧,说明失调很大。
减少失调的方法有几个:加大输入管的尺寸可以减小失配(根据工艺失配模型,失调和栅面积的平方根成反比);用Auto-Zeroing(自动调零)技术可以完全消除失调,但会增加电路复杂度。对8位SAR ADC来说,前一种方法通常就够了。
如果比较器的增益不够,也会产生类似的错误表现。增益不足导致比较器在输入差模电压很小时无法可靠输出高或低电平,而是输出中间电平,后面的锁存器会误判。这时需要检查比较器的直流增益是否达到了设计值(我设计的是60dB)。在ADE中跑一个dc仿真,扫描差模输入电压,观察输出变化曲线,增益可以从曲线的斜率读出来。
6.3 CDAC建立的精度问题
如果比较器没有问题,但ADC仍然存在错误输出,下一步就要检查CDAC的建立是否不充分。对一个8位SAR ADC来说,每次DAC切换后,建立误差必须小于0.5LSB。
DAC建立的RC时间常数由开关导阻和电容阵列总电容决定。总电容是2.56pF,如果开关导通电阻是10kΩ,时间常数是25.6ns。要在半个时钟周期内建立到0.5LSB精度(约0.002),需要的建立时间是ln(256)乘以时间常数,约等于5.5乘以25.6ns,约140ns。这就意味着时钟半周期必须大于140ns,换算成频率就是时钟周期超过280ns,即时钟频率低于3.57MHz。
如果你的时钟频率太高,DAC来不及建立,就会出现转换错误。解决的方法有两个:增大开关尺寸降低导通电阻,或者降低时钟频率。我实际设计中,把传输门开关的宽长比加大到NMOS 4.8u/180n,PMOS 9.6u/180n,导通电阻降到5kΩ左右,建立时间缩短到140ns的一半,时钟可以跑更高。
6.4 避免“铜皮”与“禁止铺铜區”的干扰
这个标题下的热词里出现了“cadence 铜皮 优先级”和“cadence禁止铺铜区”,这其实主要是PCB Layout阶段的概念。但在SAR ADC的版图阶段,类似的问题也会出现:在电容阵列下方,你必须用屏蔽层(通常是接地的n-well或者p-substrate接触)隔离衬底噪声。不要为了省面积把数字控制信号的走线布在电容阵列正下方,这会引起耦合噪声,直接影响DAC精度。
我在实际版图里,会在电容阵列下方画一圈接地guard ring,同时在Cadence里设置禁止铺铜区域,防止自动布线工具把数字信号线布到敏感区域。这个操作逻辑和PCB设计里的禁止铺铜区是一模一样的,换到版图工具里同样适用。如果你的项目后面要走到版图这一步,记住这个经验。
6.5 常见问题速查表
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 瞬态仿真报错不收敛 | 浮空节点无初始值 | 给关键节点添加初始条件 |
| 瞬态仿真报错不收敛 | 脉冲源上升沿为0 | 设置上升时间为1ns左右 |
| 输出码跳变不单调 | 比较器失调过大 | 加大输入管尺寸或加自动调零 |
| 输出码在特定值反复 | CDAC建立不充分 | 降低时钟频率或增大开关尺寸 |
| 输出码整体偏大/偏小 | 参考电压设置错误 | 检查VREF电源连接 |
| 第一个转换周期输出乱 | 锁存器未复位 | 确保所有输出锁存器接复位信号 |
| 波形出现大量毛刺 | 时钟馈通 | 减小采样开关尺寸或增加dummy管 |
6.6 仿真器件未定义的处理
另一个高频报错是“仿真器件未定义”,通常在调用库里的某个器件时出现。原因通常是仿真库没有正确配置,或者调用的器件缺少spectre模型。
解决办法很简单:打开Library Manager,确认你画的每个器件(比如NMOS、PMOS、电容、电阻)都属于已经添加了model的工艺库。在ADE里打开Model Library Setup,确认tsmc180nm的模型文件路径是否正确添加。如果器件是数字标准单元(比如D触发器),还需要确认数字库的仿真模型也添加进去。
这个错误一般出现在换了工艺库或者换了仿真器的场景下,排查思路就是逐级确认模型库路径是否完整。多数时候问题出在模型库文件路径写错了,重新添加一次就好了。
7. 性能优化与后续扩展方向
7.1 从8位扩展到10位或12位的改动思路
8位SAR ADC跑通之后,扩展到更高位数的思路是类似的。以10位为例,需要把CDAC从8个单位电容扩展到10位,重新计算电容权重。SAR逻辑也需要增加两个移位寄存器和两个锁存器。比较器的精度要求会提升——10位的半LSB在1.8V参考下约0.88mV,对比较器的失调和噪声提出了明显更高的要求。
扩展时最容易忽略的是DAC建立时间的约束。位数越多,DAC需要建立的精度越高,而电容阵列的总电容也在增大,建立时间反而可能变长。所以从8位扩到12位,不是简单地把电容翻几倍就行,而是需要重新设计开关尺寸、重新确认时钟频率,有时候甚至需要改变DAC架构(比如从二进制加权改成分段结构才能合理控制电容展开比)。
7.2 降低功耗的常见优化手段
SAR ADC的核心优势之一是功耗低,但低功耗设计也有一些技巧。首先在比较器方面,可以用动态比较器替代静态比较器,动态比较器只在比较阶段导通电流,因此功耗可以大幅降低。
其次是CDAC的开关策略优化。我用的传统开关方式需要4个参考电平(VREF、GND、输入、共模),改成单调开关方式只需要VREF和GND两个电平,同时可以减少约一半的开关功耗。代价是输出结果变成非二进制码,需要在后端做码转换。
最后是电容阵列的单位电容缩减。如果工艺匹配性允许,用更小的单位电容(比如10fF甚至5fF)可以成比例降低DAC的动态功耗。我建议在最低设计裕量内尽量选小电容,功耗收益会很可观。
7.3 异步SAR ADC的探索
这次文章里用的SAR逻辑是同步的,也就是每个时钟周期完成一位判决。还有另一种设计思路叫异步SAR,它不需要外部提供高频时钟,而是由比较器的valid输出触发下一位的转换。异步SAR的好处是每一级的比较时间可以根据实际情况动态调整,不需要为了最坏情况预留裕量,因此总体转换速度更快。
异步SAR的设计难点在于时序控制。因为每一位的转换时间不再由一个统一的时钟决定,而是由前一位比较器的完成时间决定,所以需要设计比较器的valid检测电路。这个电路要能检测比较器输出是否已经做出决策,同时不能增加太大的延迟。
如果你有兴趣,可以在8位同步SAR ADC跑通的基础上,把同步SAR逻辑改成异步SAR逻辑,这会是一篇进阶文章的好素材。
8. 实操心得与建议
走完整个8位SAR ADC的设计流程,我最深的体会是:SAR ADC的设计成败,七成在时序,三成在模拟。与其花大量时间去优化比较器的增益带宽,不如先把SAR逻辑的时序关系理清楚。时序错乱带来的问题,比模拟性能不足带来的问题难查得多。
另外想强调一点:仿真环境和模型库的配置一定要提前确认清楚。我见过不少同学在电路搭了一半之后才发现某个器件的model没有添加,结果只能回头重来。在设计开始前,先在工程里画一个最简单的反相器,Run一遍仿真确保环境没问题,再开始搭复杂电路,这是节省时间的最好方法。
关于调试节奏,我推荐“自底向上”的策略:先把D触发器单独仿真验证(输入一个时钟和数据,观察Q是否在上升沿正确捕获数据),再把SAR逻辑单独仿真(用理想的比较器输出替代真实比较器),确认控制信号波形符合预期后,最后再接入真实比较器和CDAC,进行整体集成仿真。这样每一步的问题都能被快速定位到具体模块,不会出现“整个电路连在一起,不知道哪部分出错”的局面。
最后留一个小技巧:在仿真中给SAR ADC施加一个缓慢变化的斜坡输入,观察输出码的转换情况,是排查问题最快的测试方案。如果某个码阶出现跳变或者缺失,就能迅速定位到出问题的那一位,对应的电容、开关和逻辑都能顺藤摸瓜找到。当年这个技巧帮我节省了至少一个下午的调试时间,相信对你也会有用。