4. 数字控制逻辑与模拟IP的接口验证

在AMS混合信号SoC中,数字控制逻辑(如寄存器配置、状态机、时钟门控、校准引擎)与模拟IP(如PLL、ADC、LDO、SerDes、温度传感器)之间的接口,是验证中最容易出问题、也最难定位的区域。原因在于:数字侧按离散时钟节拍工作,模拟侧按连续时间和物理量响应,两者在电压域、时钟域、复位域、时序语义上都不一致。接口验证的目标,就是确认控制意图能被正确、完整、及时地传递到模拟端,并且模拟端的状态能被数字端正确采样和判读。

一、接口的四个验证维度

数字与模拟IP的接口可以拆成四条独立的验证线索,每条线索的失效模式不同,检查手段也不同。

  • 信号跨域传递:控制信号从数字时钟域进入模拟域,或模拟状态信号回到数字域。核心风险是亚稳态、脉冲丢失、多比特偏斜。
  • 电平转换:数字逻辑电压(如0.8V core、1.8V IO)与模拟IP供电域(如1.2V、3.3V)之间的电平匹配。核心风险是阈值误判、上电顺序导致的漏电或闩锁。
  • 时序对齐:控制字写入与模拟IP采样时刻之间的建立/保持关系,以及模拟输出有效窗口与数字采样窗口的对齐。
  • 接口协议检查:寄存器读写、握手、使能/就绪、中断上报等协议行为是否符合IP手册约定。

下面这张图给出一个典型的数字控制逻辑到模拟IP的接口信号链,标出了四个维度各自对应的检查点位置。

数字控制域 clk_sys / rst_sys 配置寄存器组 cfg_word[15:0] 控制状态机 en / start / mode 状态采样逻辑 lock / ready / flag 中断/事件上报 irq / err_flag 跨域/电平转换 CDC + Level Shifter 两级同步器 单比特控制 握手/脉冲展宽 多比特安全传递 电平转换器 0.8V ↔ 1.8V/3.3V 上电顺序控制 power-good 门控 模拟IP 连续时间 / 物理量 PLL / DLL lock 建立时间 ADC / DAC 采样窗口 / 转换延迟 LDO / 基准源 使能→稳定时间 温度/电压传感器 模拟输出→数字码 状态回读路径:lock / ready / flag → 数字采样 ① ② ③ ④ 数字控制逻辑 → 模拟IP 接口信号链与检查点 ① 跨域同步 ② 多比特握手 ③ 电平/上电顺序 ④ 状态回读采样

二、信号跨域传递:单比特与多比特要分开处理

单比特控制信号(如 pll_en、adc_start)跨域时,标准做法是两级触发器同步。验证时要检查三点:同步器是否真的存在(有些设计直接跨域,仿真功能正常但硅上会出亚稳态);同步后的信号是否被正确使用(不能既做同步又做组合逻辑);复位释放是否同步(异步复位同步释放)。

多比特控制字(如 cfg_word[15:0])不能简单逐位同步,因为各位到达时间不同会产生中间错误码。正确做法是握手或格雷码。以握手为例:数字侧把数据放稳后拉高 req,模拟侧同步 req 后采样数据并回 ack,数字侧收到 ack 后才能改数据。验证用例应覆盖:req 与数据同拍变化、ack 返回延迟超过预期、连续两次配置背靠背发送。

三、电平转换与上电顺序

电平转换的验证重点不在功能,而在边界条件。典型场景:数字core电压0.8V,模拟IP的IO电压1.8V,中间经过level shifter。需要检查:

  • 输入高电平是否达到shifter的VIH门限,输入低电平是否低于VIL;
  • shifter的使能信号是否在两侧电源都建立后才有效;
  • 双向shifter的方向控制是否在冲突时被正确仲裁;
  • 上电顺序:若模拟3.3V先上、数字0.8V后上,shifter输入悬空是否导致模拟侧误触发。

在仿真中,这些可以通过在testbench里对电源引脚施加不同的上电斜坡、并在shifter输入加X态来复现。一个常见的错误案例是:仿真时电源理想上电,所有信号初始为0,功能通过;但硅上电顺序不同,shifter输出出现毛刺,导致LDO被误使能。

四、时序对齐:控制字写入与模拟采样窗口

以ADC配置为例。数字侧在 clk_sys 上升沿写入 cfg_word,模拟侧ADC在 adc_clk 的采样沿读取配置。如果两个时钟同源但存在固定相位差,需要确认配置字在采样沿前已经稳定至少一个建立时间。假设 clk_sys=100MHz,adc_clk=50MHz,相位差45°,则配置字从数字寄存器输出到ADC采样沿之间的可用时间约为 (360-45)/360 × 20ns ≈ 17.5ns,扣除寄存器Tco和走线延迟后仍应满足建立要求。验证时应在SDF反标下检查这一路径的时序,而不是只看功能仿真。

另一个方向是模拟输出到数字采样。ADC转换完成信号 adc_done 是模拟域产生的脉冲,宽度可能只有几个纳秒。数字侧若直接用 clk_sys 采样,可能完全采不到。正确做法是先把 adc_done 展宽或转成电平握手,再同步到数字域。验证用例应包含:adc_done 脉冲宽度小于一个 clk_sys 周期、adc_done 与 clk_sys 几乎同沿到达。

五、接口协议检查与常见错误案例

接口协议检查通常用断言(SVA)实现,覆盖寄存器访问、握手、使能/就绪、中断四类行为。下面给出一个可直接参考的检查清单,字段对应真实信号和判断条件。

检查项 涉及信号 判断条件 常见错误
配置写入握手 cfg_req / cfg_ack req拉高后,ack应在N个周期内返回;ack未返回前cfg_word不得变化 ack丢失导致状态机卡死
使能与就绪 pll_en / pll_lock pll_en有效后,pll_lock应在锁定时间内拉高;pll_en撤销后lock应撤销 lock提前拉高,数字侧误判已锁定
中断上报 adc_irq / irq_clr irq置位后保持到irq_clr;irq_clr后下一周期irq应撤销 irq脉冲太窄,数字侧漏采
复位释放 rst_n / rst_sync_n 异步复位、同步释放;释放后至少2个周期内无控制输出 复位释放不同步,模拟侧收到毛刺
电源门控 pg_en / pg_good pg_good有效前,不得向模拟IP发控制命令 上电未稳就配置,IP进入非法状态

典型错误案例:某设计用 clk_sys 直接采样PLL的 lock 信号,功能仿真通过。硅上发现PLL偶尔失锁后数字侧仍认为锁定。原因是 lock 是模拟比较器输出,存在毛刺,且未做同步和滤波。修正方法:对 lock 先做数字滤波(连续8个 clk_sys 周期为高才认定锁定),再两级同步,最后才送入状态机。

六、验证环境中的实现要点

在Synopsys AMS验证流程中,数字侧通常用VCS或Verdi调试,模拟侧用Custom Compiler或HSPICE,接口通过Verilog-AMS的connect module或real-to-digital转换桥接。验证时建议:

  1. 在接口处插入协议监视器(monitor),记录每次跨域传递的时间戳、数据值、同步延迟;
  2. 对每个跨域信号绑定SVA断言,覆盖建立/保持、脉冲宽度、握手超时;
  3. 用覆盖率驱动,确保每个控制字、每种上电顺序、每种复位场景都被激励到;
  4. 在门级仿真中反标SDF,检查跨域路径和电平转换路径的时序余量。

接口验证的最终判断标准不是“功能仿真通过”,而是:在电源斜坡、复位释放、时钟相位偏移、模拟输出毛刺等边界条件下,数字侧的控制意图仍能正确到达模拟端,模拟端的状态仍能被数字侧正确判读。只有这四条线索都闭合,接口才算真正验证完成。