4. 数字控制逻辑与模拟IP的接口验证
在AMS混合信号SoC中,数字控制逻辑(如寄存器配置、状态机、时钟门控、校准引擎)与模拟IP(如PLL、ADC、LDO、SerDes、温度传感器)之间的接口,是验证中最容易出问题、也最难定位的区域。原因在于:数字侧按离散时钟节拍工作,模拟侧按连续时间和物理量响应,两者在电压域、时钟域、复位域、时序语义上都不一致。接口验证的目标,就是确认控制意图能被正确、完整、及时地传递到模拟端,并且模拟端的状态能被数字端正确采样和判读。
一、接口的四个验证维度
数字与模拟IP的接口可以拆成四条独立的验证线索,每条线索的失效模式不同,检查手段也不同。
- 信号跨域传递:控制信号从数字时钟域进入模拟域,或模拟状态信号回到数字域。核心风险是亚稳态、脉冲丢失、多比特偏斜。
- 电平转换:数字逻辑电压(如0.8V core、1.8V IO)与模拟IP供电域(如1.2V、3.3V)之间的电平匹配。核心风险是阈值误判、上电顺序导致的漏电或闩锁。
- 时序对齐:控制字写入与模拟IP采样时刻之间的建立/保持关系,以及模拟输出有效窗口与数字采样窗口的对齐。
- 接口协议检查:寄存器读写、握手、使能/就绪、中断上报等协议行为是否符合IP手册约定。
下面这张图给出一个典型的数字控制逻辑到模拟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转换桥接。验证时建议:
- 在接口处插入协议监视器(monitor),记录每次跨域传递的时间戳、数据值、同步延迟;
- 对每个跨域信号绑定SVA断言,覆盖建立/保持、脉冲宽度、握手超时;
- 用覆盖率驱动,确保每个控制字、每种上电顺序、每种复位场景都被激励到;
- 在门级仿真中反标SDF,检查跨域路径和电平转换路径的时序余量。
接口验证的最终判断标准不是“功能仿真通过”,而是:在电源斜坡、复位释放、时钟相位偏移、模拟输出毛刺等边界条件下,数字侧的控制意图仍能正确到达模拟端,模拟端的状态仍能被数字侧正确判读。只有这四条线索都闭合,接口才算真正验证完成。