对象:高速时间交织 ADC 项目中的单通道 10 位 SAR ADC,28nm CMOS,0.9 V 电源,500 MS/s 分工:设计者用自然语言提需求、给参考资料、做判断;AI Agent 负责画原理图、仿真、诊断和写文档;部分机械性任务交给另一个代码 Agent。 全文分两轮:阶段 1–10 是第一轮,从草图做到晶体管级、无噪声闭环;阶段 11–13 是第二轮,补噪声仿真并降噪。 文中电路图都是 Agent 从 EDA 工具中导出后渲染的原理图,波形和频谱都是仿真结果。图片可以点击查看大图。

1. 一句话概括

设计者在一个可视化电路画板里画拓扑草图,提供参考资料,看完波形后提出问题。Agent 把这些”语义”翻译成 EDA 工具里的原理图,跑仿真验证,再把结果和诊断反馈给设计者,如此迭代到闭环。

第一轮得到一个晶体管级的 10 位 SAR ADC(CDAC 仍用理想电容),无噪声仿真闭环。第二轮补上瞬态噪声,按设计者的判断做了两步降噪。当前版本的仿真结果如下,不含版图寄生:

指标结果
静态码字误差±7 LSB(全部为增益误差)
动态性能,无噪声(500 MS/s,近奈奎斯特输入)SNDR ≈ 62.3 dB,SFDR ≈ 72.7 dBc,ENOB ≈ 10
动态性能,带器件噪声SNDR ≈ 54.8 dB,SFDR ≈ 68.4 dBc,ENOB ≈ 8.8
功耗约 0.81 mW

单通道部分从提出需求到无噪声闭环约 12 小时,其中包括仿真的等待时间;噪声这一轮又用了大半天,大部分时间在等带噪声的仿真。

当前版本顶层原理图
当前版本顶层:两个自举采样开关 → CDAC(上下各一个底板驱动 SW)→ StrongARM 比较器 → 异步 SAR 逻辑

2. 工具链

环节工具作用
拓扑草图可视化电路画板(通过 MCP 接入 Agent)设计者画电路和框图;Agent 读取网表、坐标和连线,并渲染截图核对
原理图商用模拟 EDA 工具,脚本化批处理Agent 生成脚本,建库、建单元、画原理图和符号;不碰设计者正在用的图形界面
仿真商用 SPICE 仿真器(长瞬态用加速模式)静态码字回归、单次转换波形、正弦 FFT、功耗统计
后处理Python读码,算 SNDR/SFDR/ENOB,拆分各模块功耗,画图
预览原理图图形导出后在本地渲染不开图形界面也能检查画法(本文的电路图都由此生成)
执行助手另一个代码 Agent按任务书完成机械性的搭建工作
流程固化Agent skill把”画板 → EDA 原理图”的流程、脚本和经验打包复用

3. 总体流程

  1. 设计者给出画板草图、文献或教材例图。
  2. Agent 理解拓扑,确认命名、极性和方案选择。
  3. Agent 生成脚本,批处理画原理图和符号。
  4. 读回检查:连接、器件尺寸、渲染预览。
  5. 仿真:静态码字、波形、FFT、功耗、噪声。
  6. Agent 报告结果并给出诊断。
  7. 设计者判断:指出问题或补充资料就回到第 2 步;满意就进入文档和 skill 沉淀。

设计者只做三件事:给拓扑;在关键选择上拍板;看波形提出物理判断。其余的画图、连线、设尺寸、仿真、读数和写文档,都由 Agent 完成。


4. 过程实录

阶段 1:比较器——从草图到原理图

  • 设计者:在画板上画了 StrongARM 比较器,要求在项目里新建一个真实电路库,并接入工艺。
  • Agent:
    • 读取画板的网表和坐标,按网格映射成原理图;
    • 探查工艺器件的符号、参数和尺寸设置方式;
    • 设好尺寸后写入原理图。
  • 干预:
    • “拓扑严格按画板画,标签用标准字号。”→ 版面 1:1 照搬画板。
    • 设计者的图形界面正打开着这个单元。Agent 停下来请设计者关闭,关闭后才写入,全程不强行解锁。

阶段 2:把流程固化成 skill

  • 设计者:“把这个流程固化成一个 skill。”
  • Agent:打包成可复用的 skill,包括:
    • 画板网表 → 原理图的生成器;
    • 远程批处理脚本(检查编辑锁、限流);
    • 网表比对、比较器测试台、原理图渲染;
    • 工艺相关的经验。
  • 之后每发现一个新坑,都同步回这个 skill。

阶段 3:比较器迭代

  • 设计者:
    • 在画板上更新比较器版本;
    • 规定输出 pin 名和极性(CO = 1 表示正输入更高);
    • 后来亲手加了两个输出反相器,让比较器复位时两个输出都为 0。
  • Agent:
    • 原地重画,用测试台确认极性;
    • 把”复位为 0、判决后其一为 1”作为后面 SAR 逻辑判断”判决完成”的依据;
    • 照画板上的符号重画比较器符号。
StrongARM 比较器
StrongARM 比较器:中间是输入对、交叉耦合对和复位管,两侧是设计者加的输出反相器
比较器符号
照画板样式重画的比较器符号

阶段 4:单通道 SAR 顶层——先用行为模型搭起来

  • 设计者:给出画板上的 SAR ADC 顶层框图(采样开关、CDAC、底板开关、比较器、SAR 逻辑,以及命名规划)。要求保留已有的行为模型,简单任务交给另一个 Agent,并节约 token。

  • Agent 提问,设计者拍板:

    问题设计者的选择
    搭建顺序先搭层次,子块先用行为模型
    CDAC 架构顶板采样 + 单调切换
    命名沿用画板命名
    极性正输入接 DAC 正端
  • Agent:写任务书交给代码 Agent 搭建,然后审查结果、跑回归,静态误差 ±2 LSB。

  • 干预:“你审查一下他画的图,符号不好看。”→ Agent 重画全部符号:开关画成触点加拨杆,其余画成标名方框;顶层改为直连。改完重跑回归,码字逐点不变。

行为模型版顶层
行为模型版顶层:理想开关 + 行为模型底板驱动和逻辑(保留作对照)
CDAC
CDAC:每边 256…1 个单位电容加 1 个 dummy,顶板采样

阶段 5:看波形,改切换方向和比较器

  • 设计者:看完单次转换波形后指出两点:
    1. 比较器是 NMOS 输入,DAC 切换应让共模往上走;
    2. 比较器出结果太慢。
  • Agent:
    • 把单调切换从”往下切”改成”往上切”,共模从约 0.45 V 升到约 0.7 V,转换时间缩短约 3 倍;
    • 做比较器特性测试后,设计者决定加大尾管,判决延迟再缩短 25–35%。
往上切后的转换波形
往上切后:DACP/DACN 一阶一阶往上收敛到约 0.7 V;但比较器输出 CO/COB 只是尖峰
  • 干预:“比较器输出不是方波,从出结果到时钟复位太快了。”→ Agent 在逻辑里加一个短暂的保持时间,比较器输出变成满幅方波。
加保持时间后的波形
加保持时间后:CO/COB 拉满后才复位

阶段 6:正弦 FFT(行为模型版)

  • Agent:写了相干采样的 FFT 脚本,跑 256 点和 1024 点,SNDR 约 61 dB,SFDR 74–78 dBc。
行为模型版 256 点频谱

阶段 7:按参考资料换成晶体管级

  • 设计者提供的资料:
    • 一篇博士论文中讲异步 SAR 逻辑的章节,包括数据锁存器和整体逻辑两张图;
    • 一份经典模拟 IC 资料中的自举采样开关设计例图。
  • 要求:“拓扑画法严格照资料中的样子,不然我看不懂;之前的行为模型都不要删。”
  • Agent:
    • 画晶体管级逻辑门、锁存器、异步逻辑和自举开关;
    • 每张图都渲染出来,与原图对照布局;
    • 行为模型版顶层另存一份。
  • 干预:
    • 采样跟不上输入,满幅附近误差约 11 LSB。Agent 估算出开关导通电阻偏大,建议加大尺寸,设计者同意。
    • “自举开关的拓扑不对,严格照这张图来,尺寸不必照搬。”→ Agent 按指定例图的器件编号和摆放整体重画。
    • 晶体管级 1024 点 FFT 估计要约 4 小时。设计者决定改跑 256 点,并开仿真器的加速模式,结果只用了约 6 分钟。
  • 结果:增益误差约 1.6%(来自开关结电容挂在 DAC 顶板上),SNDR 约 61.5 dB。
自举采样开关
自举采样开关:照例图摆放。上排是自举电容充电通路,中间是栅极驱动 Ma/Mb/Mc,最下面是主开关 M1
数据锁存器
数据锁存器:交叉耦合反相器由两个串联 PMOS 供电,底部是比较结果的传输门,左上角的 NOR 产生"已锁存"标志
异步 SAR 逻辑
异步 SAR 逻辑:10 个锁存器,每位配一个 OR 和一个带反相输入的 NAND 产生使能;左侧是 Valid、比较器时钟和采样时钟反相
带反相输入的 NAND3
逻辑门也是晶体管级,例如带两个反相输入的 NAND3
晶体管级逻辑加入后的 256 点频谱

阶段 8:修工具链问题,经验沉淀进 skill

  • 现象:读回网表时发现,大尺寸器件的参数被工艺库的回调改掉了。
  • 干预:“先修这个问题,再同步到 skill。”
  • Agent:找到正确的参数设置顺序,并对每个器件读回核对;这条经验写进了 skill。

阶段 9:底板开关晶体管化,加强比较器时钟驱动

  • 设计者:“开关也换成实际管子,对目前的切换策略就是一些 buffer 和反相器;比较器时钟看起来像正弦,怀疑驱动不够,改成方波。”
加缓冲前的波形
加缓冲前:比较器时钟 CLKC 边沿很圆,像正弦
  • Agent:
    • 底板驱动:每位一条逐级放大的反相器链,最后一级由参考电压供电,输出管按电容大小等比放大。级数必须是偶数,这样采样期间底板才停在低参考电压。
    • 时钟:诊断出时间常数约 100 ps,原因是三管串联上拉去推较大的负载。加了一个两级缓冲器。
底板驱动
底板驱动:每位 4 级反相器(前 3 级接电源、逐级放大,最后 1 级接参考电压),图中标出了每位的电容和输出管宽度
时钟缓冲
比较器时钟缓冲:两级反相器
最终版转换波形
最终版:CLKC 和 CO/COB 都是方波,码字正确

阶段 10:闭环验证——FFT 与各模块功耗

  • Agent:在仿真网表里给每个模块的电源串电流计(原理图不改),统计各模块平均功耗,并与电源总输出核对,两者一致。
最终版 256 点频谱
模块功耗占比
SAR 逻辑(含时钟缓冲)约 40%
比较器约 21%
底板驱动约 20%
自举开关约 18%
其他约 1%

阶段 11:补上噪声仿真,找出噪声来源

  • 设计者:“跑一个噪声性能吧。”

  • Agent:给仿真脚本加上瞬态噪声选项,按下面的方法跑带噪声的 FFT,再逐个模块只开噪声源,定位噪声来源。

  • 激励:256 点相干采样正弦,输入约 221 MHz(接近奈奎斯特),幅度 −0.5 dBFS。

  • 噪声:打开所有器件的瞬态噪声源,带宽上限 100 GHz,下限 1 MHz(包含闪烁噪声)。仿真器会因此把步长限制在 10 ps 以内,一次仿真约 12 分钟(加速模式)。

  • 噪声提取:输出码减去拟合的正弦及 7 次以内的谐波,得到残差;残差方差再减去同一激励下无噪声仿真的残差方差(量化误差约 0.26 LSB),就是电路噪声折算到输入端的值。

  • 分模块:仿真器支持只打开指定实例的噪声源,每次只开一个模块,就能分出各自的贡献。另跑一组把所有实例都列进去作对照,确认这种开法确实作用到子电路内部的器件。

  • 时序检查:后处理脚本统计每次转换里比较时钟的脉冲个数,以及最后一个下降沿离采样结束的时间。码字在采样结束后 1.6 ns 读取。

第一轮闭环版带噪声的频谱
第一轮闭环版打开噪声后的频谱:噪底整体抬高,SNDR 约 49 dB

只打开某一个模块的噪声源:

只开噪声的模块SNDR等效输入噪声
全部49.3 dB1.12 LSB
比较器48.7 dB1.18 LSB
底板驱动61.2 dB0.11 LSB
采样开关及其时钟61.6 dB0.08 LSB
SAR 逻辑61.9 dB0
  • 比较器一项就和全开时一样,其他模块可以忽略。
  • 采样噪声 0.08 LSB,和用单位电容算出的 kT/C 估算值(约 0.13 LSB)是一个量级。所以单位电容的大小目前不是瓶颈。
  • 码字误差近似高斯分布,在 ±3 LSB 以内,没有偶发的大跳码。

中途出过一次错:按实例开噪声的参数名写错了,仿真器直接忽略、没有报错,那一轮相当于白跑。Agent 从仿真日志的告警里查到原因,改正后重跑,并把正确写法记进了项目文档。

阶段 12:比较器积分节点加电容

  • 设计者:先压比较器噪声,在积分节点挂电容;比较器变慢以后,要检查 SAR 逻辑还能不能正常工作。

StrongARM 的积分节点就是输入对管的两个漏端。Agent 先不改原理图,只在仿真网表里给这两个节点挂电容扫值,每个点都开着噪声,同时检查时序:

每侧电容复位管带噪声 SNDR比较器噪声最后一次判决功耗
0原尺寸49.3 dB1.12 LSB0.78–0.81 ns0.65 mW
10 fF原尺寸52.3 dB0.78 LSB0.84–0.88 ns0.72 mW
25 fF原尺寸36.9 dB大量错码0.92–0.97 ns0.82 mW
50 fF原尺寸22.7 dB大量错码1.01–1.11 ns0.94 mW
20 fF×353.1 dB0.71 LSB0.87–0.91 ns0.81 mW
40 fF×553.6 dB0.66 LSB0.95–1.00 ns0.98 mW
80 fF×953.3 dB0.69 LSB1.11–1.19 ns1.30 mW

扫描中发现了两个问题,Agent 分别做了诊断:

  1. 电容大了出错码。异步 SAR 里,两次比较之间比较器的复位时间很短。原来的复位管只有 1 µm,充不满大电容,上一次判决留下的残压会带到下一次比较里。把复位管按电容等比放大以后,错码就没有了。
  2. 20 fF 以上噪声降不下去,一直停在约 0.7 LSB。只开白噪声(去掉闪烁噪声)重跑,结果一样,所以不是闪烁噪声。原因在结构上:StrongARM 第一级的增益约为 gm·Vth/I,和积分电容无关,后面锁存级的噪声折算到输入端就成了一个下限。电容只能压低积分阶段本身的噪声。

最终选 每侧 20 fF,复位管放大 3 倍,正好在拐点上。再往上加,只会多花功耗、拖慢速度。

加积分电容后的比较器
比较器:输入对管漏端(积分节点)下方各加一个对地电容,两侧上方的复位 PMOS 放大到 3 倍

写进原理图后重新验证:

  • 静态码字误差仍是 ±7 LSB 的增益误差,和改前一样。
  • 每次转换都是 10 个比较时钟,最后一次判决比原来晚约 90 ps,离读码还有约 0.7 ns 余量。
  • 功耗增加约 0.17 mW,主要是每次比较都要给这两个电容充放电。
加积分电容后带噪声的频谱

阶段 13:双向切换,压低末几位的共模

  • 设计者:比较最后几位时共模电压很高,会让输入对管的噪声变大。所以改 DAC 的开关策略,MSB 时让共模往上抬,其余各位让共模往下走(双向切换),其他电路不改。

第一轮是单调往上切:每一步都把较低一侧的底板从低参考切到高参考,共模一路往上走,最后几位比较时已经升到约 0.68 V。对 NMOS 输入的 StrongARM 来说,这时输入对管已经被推到噪声较大的工作点。

改法:

  • 采样时:最高位电容的底板接低参考,其余各位接高参考。
  • MSB 判决后:把较低一侧往上切,共模上升 Vref/4,约 0.125 V。
  • 之后各位:把较高一侧往下切,共模逐位回落,转换结束时回到约 0.44 V。
  • 底板驱动:最高位保持 4 级同相驱动;其余各位去掉第一级,变成 3 级反相驱动,复位态正好输出高参考。
  • 控制线:两侧驱动的控制线按位重新分配(最高位和其余各位分别取比较结果的正、反相),所以输出码的含义不变,SAR 逻辑不用改。
  • 备份:原来的单向版顶层另存一份,可以随时对照。
双向切换的底板驱动
底板驱动:左上为最高位(4 级),其余 8 位为 3 级反相链;输出级 PMOS / NMOS 分别接高、低参考
双向切换后的顶层
顶层:只换了上下两个底板驱动和它们的控制线,其余不变

单次转换的波形里同时画出了 DAC 的共模和差模(差模用对称对数坐标,±1 mV 以内为线性):

双向切换一次转换的波形
输入 +0.2 V 的一次转换:共模在 MSB 切换后跳到约 0.56 V,之后逐位回落,最后几位比较时约 0.44 V;差模从约 200 mV 逐位收敛到 1 mV 以内

波形里还能看到:

  • 采样结束瞬间:共模下沉约 15 mV,这是采样开关断开时的电荷注入。
  • 第 6 次比较前:差模已非常接近 0,比较器输出明显变慢,属于接近亚稳态的正常表现,后续各位不受影响。
  • 每个采样开始时:有一个尖峰,来自底板复位和采样开关导通发生在同一时刻。它在采样阶段内就结束了,不影响采到的值。

验证结果:

  • 静态码字误差仍是 ±7 LSB 的增益误差。每次转换都是 10 个比较时钟。
  • 最后一次判决在 0.98–1.03 ns,比单向版晚约 0.1 ns。原因是共模降低后,NMOS 输入对的过驱动变小、判决变慢。读码前仍有约 0.6 ns 余量。
  • 带噪声 SNDR 从 53.1 dB 提到 54.8 dB,比较器噪声从 0.71 LSB 降到 0.57 LSB;无噪声时 SNDR 62.3 dB,功耗基本不变。
双向切换后带噪声的频谱

5. 设计者提供的资料(概括)

资料类型用途
可视化画板上的电路草图(比较器两个版本及其符号)比较器原理图与符号
画板上的 SAR ADC 顶层框图顶层层次、命名、摆放
一篇博士论文中的异步 SAR 逻辑章节晶体管级锁存器与 SAR 逻辑
经典模拟 IC 资料中的自举开关例图晶体管级采样开关
设计者在 EDA 图形界面里的手工修改比较器输出约定

6. 设计者的干预(概括)

类型例子带来的变化
画法规范“严格按画板 / 资料的样子画,标签用标准字号”原理图可读,设计者能直接对照
接口约定输出 pin 命名与极性;复位时输出为 0全链路的极性与握手统一
架构决策行为模型先行、顶板采样单调切换先把系统跑通,再逐块换成晶体管
审美“符号不好看”重画符号与顶层
物理诊断NMOS 输入要共模上抬;输出慢;时钟像正弦是驱动不够改切换方向、加大尾管、加时钟缓冲
纠错“自举开关拓扑不对”照资料整体重画
方法决策减少 FFT 点数,开加速仿真仿真从约 4 小时降到约 6 分钟
质量先修工具问题,再沉淀进 skill尺寸设置可靠,经验可复用
物理诊断末几位比较时共模太高,输入对噪声变大改成双向切换,带噪声 SNDR 再提高约 1.7 dB
方法与约束积分节点加电容,变慢后检查 SAR 逻辑;双向切换只改开关先在网表里扫值再改原理图,每一步都回归时序
协作“已关闭,重跑”Agent 遇到编辑锁就停下,不抢设计者的会话

有物理判断的那几次干预最关键。Agent 能把电路画对、把仿真跑通,也能定量验证一个猜测;但”这个架构该往哪个方向走""这个拓扑和教材不一样”这类判断,在这个项目里都是设计者先提出来的。


7. 让流程可控的几条约定

  • 不碰设计者正在用的图形界面:写操作都在独立的批处理会话里做;发现编辑锁就停下来询问。
  • 改完必读回:检查连接和器件尺寸,渲染预览图,再跑同一套回归,确认没有意外变化。
  • 旧版本不删:行为模型和旧顶层都保留,新版本另起单元,随时可以对照。
  • 省资源:多步操作合并成一次远程连接;长仿真放后台等完成通知;机械性任务交给另一个 Agent。
  • 结论要有数据:每个判断都附具体数值;没验证过的推测会明确标出。

8. 版本演进

版本采样开关底板驱动SAR 逻辑静态误差转换时间SNDR / SFDR
行为模型初版理想行为模型行为模型±2 LSB约 1.6 ns—
往上切 + 比较器优化理想行为模型行为模型±2 LSB约 0.7 ns61.2 dB / 74 dBc
晶体管级逻辑与开关自举行为模型晶体管级±8 LSB(增益)约 0.8 ns61.5 dB / 70 dBc
第一轮闭环自举晶体管级晶体管级 + 时钟缓冲±7 LSB(增益)约 0.8 ns61.9 dB / 70.7 dBc(带噪声 49.3 dB)
+ 比较器积分电容自举晶体管级同上±7 LSB(增益)约 0.9 ns61.9 dB / 74.1 dBc(带噪声 53.1 dB)
+ 双向切换(当前)自举晶体管级(双向)同上±7 LSB(增益)约 1.0 ns62.3 dB / 72.7 dBc(带噪声 54.8 dB)

9. 局限与下一步

  • 比较器噪声仍是主导:0.57 LSB,约为量化噪声的 2 倍。要到 ENOB ≈ 9.5 还需再降一半左右。候选方向:
    • 提高第一级增益:加宽输入对管,或进一步降低输入共模;
    • 给锁存级的输出节点加电容;
    • 改成双尾(double-tail)结构;
    • 最后几位多次比较、取多数。 这些都要拿速度或功耗来换。当前最后一次判决约 1.0 ns,读码前的余量还有约 0.6 ns。
  • 统计量:每个点只用了 256 点、1 个随机种子。两个种子之间相差约 0.4 dB,表中 0.05 LSB 量级的差别不应过度解读。
  • 还没覆盖的验证:PVT 角、版图与寄生提取;积分电容和 CDAC 都还是理想电容。
  • 之前遗留的问题:自举开关内部节点超过核心器件耐压;约 1.6% 的增益误差。