尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

混合信号验证MSDV实战:从RNM建模到Verilog-on-Top网表落地

混合信号验证MSDV实战:从RNM建模到Verilog-on-Top网表落地 混合信号项目做久了你会发现一个很扎心的事实一款芯片里真正需要精确到晶体管级仿真的模拟电路往往只占整个die面积的皮毛但全芯片SPICE仿真要跑的时间却能把整个项目组的耐心耗干。这就是MSDVMixed-Signal Design Verification混合信号验证存在的意义也是我这次想跟你认真聊聊的东西。MSDV这套方法论核心就三件事用RNMReal Number Modeling实数建模把模拟行为抽象成数字仿真器能识别的实数模型用Verilog-on-Top把数字顶层和模拟IP捏在一起搭验证环境最后把这些验证过的模型和视图落成一份后端真能拿去跑流程、拿去流片的网表。听起来好像不复杂但真正操作过的人都知道每一步都藏着不少讲究。这篇文章我就从RNM抽象怎么选型讲起再把Verilog-on-Top的架构思路捋一遍最后落到网表落地这条最容易出问题的路上把我自己踩过的坑和验证过有效的做法一并写出来。1. 混合信号验证的整体思路拆解1.1 为什么不再全靠SPICE仿真速度与覆盖率的死结很多刚接触混合信号验证的同学会有个误区觉得混合信号嘛直接把数模接口交给模拟工程师用SPICE跑不就完了。实测下来这个思路只适用于单模块验证比如一个LDO带几个负载、一个ADC的前端采样保持电路。一旦把整个SoC拿过来包含几百万门数字逻辑、几十个模拟IP、复杂的上下电时序和时钟复位策略全SPICE仿真基本等于不可行。我见过一个真实的项目全芯片SPICE仿真跑一次上电流程花了9天时间。9天跑出来的结果还是只覆盖了最高层的电源域切换内部数字逻辑和模拟IP之间的交互几乎没验证到。等流片回来发现DCDC纹波在特定负载下触发了数字模块的复位而这个场景在全SPICE仿真里根本跑不到那么深。MSDV的思路就是把验证工程化拆开模拟IP内部的关键性能用晶体管级仿真保证精度数模交互行为和全芯片系统行为用RNM抽象成实数模型放到数字仿真器里跑。这样做的结果是原本9天的全芯片仿真压缩到几小时甚至几十分钟。代价是你要花时间建好RNM模型并且保证模型保真度够用。1.2 RNM抽象的核心价值用实数换速度RNM的核心思想其实一句话就能说清不把模拟信号当电压或电流的连续函数来解而是当一个带精度的“实数”值来传递。数字验证环境里的logic四态值0、1、Z、X表达不了3.3V、1.8V这些模拟信息但real类型可以而且仿真器处理real的速度远比解微分方程快。RNM有四个抽象级别RNM-1到RNM-4。RNM-1最简单只区分0和1可以认为是带阈值的数字化表示RNM-2引入实数值和阈值比较能表达摆率限制RNM-3进一步支持分段线性行为能模拟充放电曲线RNM-4最复杂支持连续函数和动态行为。实际项目中RNM-1往往不够用RNM-4又太重用最多的是RNM-2和RNM-3的组合。比如做ADC的模型输入信号用RNM-2描述模拟输入电压和采样时刻内部转换过程用RNM-3描述比较器翻转和电荷重分配的行为。这样既保证了时序精度又避开了在数字仿真器里写微分方程的尴尬。1.3 Verilog-on-Top的架构定位谁是“老大”混合信号验证的顶层集成有几种风格SPICE-on-Top、Verilog-on-Top、还有更少见的SystemVerilog-on-Top。我个人的项目经验是除非你做的是一颗纯模拟芯片否则Verilog-on-Top几乎是唯一合理的选择。Verilog-on-Top的意思是验证环境的顶层用Verilog/SystemVerilog搭起来模拟IP通过行为模型或者RNM封装成黑盒挂在顶层下面。数字部分跑原生的RTL模拟部分跑RNM模型数模接口处用专门的模拟接口层转换信号。这样做有几个实际好处第一数字验证工程师可以直接复用现有的UVM环境、断言和覆盖率收集机制不用另起炉灶学模拟仿真器。第二回归测试跑得动。第三如果设计的顶层有大量数字逻辑Verilog-on-Top能保证数字代码的风格统一避免仿真器切换带来的兼容性灾难。我之前参与过一个项目顶层本来是SPICE-on-Top每次回归要等两三天后来切换到Verilog-on-Top回归时间降到40分钟覆盖率和debug效率都上了一个台阶。这个切换本身也踩了不少坑后面细说。2. 核心细节解析RNM模型怎么建才靠谱2.1 从晶体管级抽RNM模型不是简单“翻译”把SPICE网表“翻译”成RNM模型听起来像是照着原理图写一遍行为描述实际操作起来远没那么简单。RNM模型必须抓住被建模模块对系统行为影响最大的那几个特性而把次要特性舍掉否则模型会变得又慢又难调。以DCDC转换器为例系统验证最关心的是输出电压范围、负载调整率、纹波大小和上下电时的软启动行为。至于误差放大器内部的极点零点位置、补偿网络的具体RC值系统级验证完全可以不管。所以DCDC的RNM模型我一般写成输入侧接受电源电压和使能信号输出侧用RNM-3描述软启动时的电压爬升、稳态时的电压输出和负载突变时的瞬态响应。关键参数映射要特别注意。SPICE仿真里你习惯说的负载电流是安培级、电压是伏特级RNM模型里还是要保持一样的量纲单位因为验证环境里的断言和参考模型都按真实电气值来写。我之前见过有人图省事把电压单位改成毫伏结果顶层数字模块的阈值判断全部偏了排查了两天才定位到单位问题。从晶体管级抽模型还有个技巧先跑一个典型corner下的SPICE瞬态波形把波形文件导出来用脚本提取关键特征点启动时间、建立时间、超调量、纹波幅值等再把这些特征点填进RNM模型的参数里。这个流程比直接回忆电路行为去写参数要准确得多尤其适合那些性能受工艺影响较大的模拟IP。2.2 模拟IP行为封装黑盒里的接口协议RNM模型建好之后下一步是要把它封装成验证环境方便调用的东西。我常用的做法是把每个模拟IP都封装成一个独立module统一接口风格。以ADC为例接口至少包含模拟输入引脚、时钟、复位、数字输出总线、转换完成标志还有一个可选的“busy”信号方便数字逻辑做握手。接口定义这块有个特别容易翻车的点模拟输入引脚的信号类型。在Verilog-on-Top环境里真实模拟IP的输入是wire类型接的是带电气特性的模拟信号但RNM模型里输入信号是real类型。这两种类型的转换要有一层专门的interface来做不能直接在顶层里把real信号接到logic端口上否则仿真器会报类型不匹配或者悄悄做隐式转换导致精度丢失。这里我踩过一个很深的坑。某个项目的比较器模型输入用real类型输出是logic类型顶层集成时我图省事直接把real信号连到logic端口结果比较器翻转和实际电路有几十纳秒偏差。原因就是隐式转换把real值0.5当成1、else当成0但比较器真实的阈值是0.4V且内部有迟滞。正确的做法是在接口层明确写出阈值比较逻辑把real信号转成logic信号。2.3 时序与精度权衡仿真速度vs保真度RNM模型的精度不是越高越好。精度越高意味着模型越接近真实电路行为但也意味着仿真速度越慢、参数越难调、收敛性问题越频繁。项目实践中要明确一个原则RNM模型只要满足验证目标所需的最小精度即可“过拟合”反而拖慢整个验证周期。精度取舍要看被验证的是什么。如果目标是验证数字模块对ADC输出数据的处理逻辑那ADC模型只需要保证采样时刻正确、转换结果在规定码值范围内即可不必精确到每个码值的DNL/INL误差。如果目标是验证数字LDO的PWM调制策略那模型需要能反映负载突变时的环路响应速度和稳定性这时RNM-3的分段线性描述可能就不够了需要用RNM-4的连续函数建模来保证瞬态行为逼真。还有一个实际工程里的权衡经验对仿真步长不要设得太激进。RNM模型在数字仿真器里跑默认事件驱动步长不固定。如果模型里有快速变化的信号比如亚纳秒的边沿事件数量会爆炸仿真时间指数级上升。合理的做法是在模型里主动加延迟和滤波让信号变化速率与验证需求匹配。我建PLL模型时故意把VCO的控制电压变化速率限制在一个合理的斜率范围既不影响锁定和失锁行为的验证又避免仿真器被高频抖动信号折腾到虚脱。3. 实操落地从验证环境到能跑的网表3.1 验证环境搭建步骤实操记录理论铺垫得差不多了来说怎么一步步落地。我以一颗带DCDC、LDO、ADC、PLL和数字电源管理单元的混合信号SoC为例把搭建整个MSDV环境的流程走一遍。第一步梳理数模接口清单。把芯片里所有模拟IP的数字控制信号、状态输出信号、模拟输入输出引脚列成表格标注信号方向、电平域、时序要求。这份清单是整个验证环境的“宪法”后续建模、搭环境、写断言都要围绕它展开。第二步为每个模拟IP建立RNM模型。先跑一遍典型corner下的SPICE瞬态仿真提取关键行为特征再用SystemVerilog的real类型写行为模型。每个模型要单独做一次“模型对标”Model vs Schematic——拿模型输出跟SPICE输出对比确认关键行为一致。第三步搭建Verilog-on-Top环境。顶层用Verilog模块承载所有数字RTL和模拟IP的RNM模型实例化模拟信号通过interface连到RNM模型端口数字信号直接连到RTL端口。整个环境里只保留一个顶层testbench负责时钟复位生成、测试激励注入和结果检查。第四步写断言和覆盖率模型。断言负责监控关键时序关系比如ADC转换完成信号最多两个时钟周期内必须被数字逻辑读走、DCDC的反馈使能信号不能和PFM模式切换同时发生等。覆盖率模型重点收集数模接口处的信号翻转和跨时钟域行为。第五步跑回归。把MSDV环境接入原有的数字回归流程跑全芯片的上电、低功耗、功能测试等场景统计仿真时间、覆盖率和失败用例。这套流程走下来整体工作量大部分集中在第二步和第三步因为RNM模型的质量直接决定验证结果的可信度。我第一个MSDV环境花了三周才跑出可信结果一半时间都花在调模型与SPICE行为对标上。3.2 网表是怎么来的几条路径标题里“模型怎么落地成一份能跑的网表”这里说的网表并不只是后端用的那唯一一种SPICE网表或Verilog网表。在验证语境里至少涉及以下几种网表的流转一是数字后端用的门级网表。这是从综合工具比如Genus、Design Compiler出来的Verilog网表里面已经是标准单元和连线关系不包含模拟IP的内部电路。二是模拟IP的晶体管级网表。这是模拟工程师从电路原理图导出的SPICE网表包含每个晶体管、电阻、电容的参数和连接关系通常用来做后仿和版图验证。三是全芯片混合网表。芯片级验证有时要把数字门级网表和模拟SPICE网表放在同一个环境里跑这时需要一个顶层网表把这些片段拼起来。这个顶层网表的连接关系必须和芯片真实版图一致才能保证后仿结果有意义。在MSDV流程中现网表的路径通常是这样的RTL代码经过逻辑综合出门级网表模拟IP的RNM模型在此期间并不同步生成物理网表模拟IP在后端阶段通过virtuoso或者定制版图流程产生晶体管级网表。验证团队要做的就是保证两类网表之间的接口定义一致——数字网表看到的模拟IP引脚名字、方向、负载能力必须和模拟后端提供的物理网表一致。这块最容易出的问题就是引脚命名不一致。数字综合时用的是行为模型里的端口名比如vin、vout、enable、busy模拟后端却习惯用原理图里的网络名比如AVDD、DVDD、VOUT_ANA、ENB。两边不统一握合的时候要么手动改网表要么加转换层非常痛苦。3.3 网表一致性与前后仿验证网表生成后不能直接送去流片或做板级验证至少要做两类检查。第一类是LVSLayout vs Schematic检查——版图提取出来的网表要和原理图网表网络一一对应第二类是前仿/后仿一致性检查——门级网表跑出来的行为要和RTL行为一致。在MSDV环境里网表一致性检查我特别建议用“模型对标”的思路来做把RNM模型跑出来的行为作为基准再让门级网表和模拟SPICE网表在同一个测试激励下跑对比关键输出波形。做过几个项目后我认为这个方法能在流片前发现大量接口时序和负载匹配问题。有一个很典型的case某项目的ADC输出总线在RTL级仿真里一切正常门级网表后仿却偶发出现数据毛刺。追查后发现是总线翻转时间跨度过大数字逻辑采样时采到了中间态。RTL仿真里总线是理想瞬间翻转的RNM模型也是理想行为但门级网表有真实的门延迟和走线延迟导致数据保持时间不足。这种问题只有在网表级仿真才能暴露所以“模型落地成网表”之后的仿真绝对不能跳过。3.4 从芯片网表到板级系统还有个容易被忽略的环节网表不光在芯片内部流转到了系统级和板级验证阶段网表的导出和导入也是个高频操作。你搜索里看到的OrCAD导出网表、Allegro导入网表就是板级设计里最常见的网表传递动作。这块虽然偏封装和PCB方向但芯片验证工程师偶尔也要配合。芯片的IO pad排列、关键信号在封装上的分布、电源引脚的去耦策略往往要从芯片网表导出后转到板级设计工具里做联合检查。我遇到过不止一次芯片仿真里完美的电源域管理到了板级导入网表之后发现去耦电容摆放离得偏远导致电源完整性问题又要反馈回芯片设计调整引脚分配。所以建议验证团队在MSDV环境里预留一个“板级可导入”的端口信息文件至少包含每个IO pad的电气特性、方向、供电域和ESD等级。方便后续跟板级工具链对接时直接导出和导入不用回头翻设计文档。4. 踩坑实录混合信号验证中的常见问题与排查4.1 RNM模型不收敛仿真器直接卡住或报错RNM模型在数字仿真器里跑理论上不应该出现SPICE那种不收敛问题但实际经常遇到的是“事件风暴”——模型里的某个信号在两个值之间高频振荡导致仿真器事件队列爆满看起来就像死循环。我遇到最典型的一次是LDO的RNM模型负载电流突然减小时模型内部的反馈环路在realtime域产生了一个极限环仿真器卡了一个晚上没跑完。排查下来是模型里的环路增益参数设得过高且缺少对电压变化速率的限制。解决办法是给模型加一个一阶惯性环节也就是low-pass filter限制输出电压的deltalim。经验值是把deltalim设为输入电压变化步长的2-3倍振荡就消掉了。这类问题的排查要点看仿真器警告里事件频率最高的信号是哪个再用波形把那个信号的局部放大基本能锁定是哪个模型内部的反馈路径出了问题。4.2 数模接口时序错位数字侧和模拟侧各说各话数模接口的时序问题在MSDV里几乎无法避免尤其是跨时钟域的信号同步。模拟IP往往有自己独立的时钟或内部延迟数字侧主时钟和模拟时钟之间没有确定的相位关系。RNM模型如果忽略了模拟时钟的异步性就会把实际硬件中不可能发生的事件序列变成可能或者反过来。我有过一个ADC模型的教训采样时钟建模成和数字主时钟严格同步仿真里数字逻辑在采样完成信号上升沿后立刻读取数据总线一切正常。但实际芯片因为时钟偏移采样完成信号到达数字逻辑时数据总线还没完全建立导致偶发读到错误数据。后来在模型里加了固定的采样保持延迟并且设定采样完成信号与数据有效之间的最小间隔回归立刻拦下了这个问题。结论就是RNM模型的时序参数不能“太乐观”必须留出真实的物理延迟余量。4.3 网表导入后的电气规则错误网表从数字后端导出或者从模拟版图提取出来之后导入MSDV环境或者板级工具时最常遇到的问题是电气规则检查报错。电源引脚悬空、信号方向不匹配、未连接端口数量超过阈值等等每个都能让工具直接拒跑。这类问题大多是网表生成阶段的连接关系问题本质是信号命名和端口属性在多次转换过程中被弄丢了。有一个我常用的排查思路先做一次“端口名对比”把网表里所有端口和验证环境里的接口定义逐条对比找出多出来或缺失的端口再重点看这些端口附近的逻辑连接。做过两次后你会发现大部分网表导入问题的根因都出在顶层实例化的端口映射抢而不是网表本身的电路错误。还有个细节是电源地的处理。数字网表有的用全局net命名比如VDD、VSS有的用带层次化路径的命名。Allegro导入网表时对这种层级命名的解析非常敏感差一个斜杠就是开短路。建议在整个流程里统一使用平铺式的电源地命名规范避免用层次化命名。4.4 复位与上电时序最容易“假通过”的验证项MSDV环境里最容易“假通过”的验证项就是上电复位和电源域切换。为什么因为RNM模型里电源电压是理想电压源数字逻辑的复位信号也是理想驱动所有事件都是确定性的仿真结果当然整整齐齐全绿。真实芯片里电源上电是一个渐进的斜坡过程不同电源域之间还有先后顺序复位释放跟随电源域状态稍有不慎就会产生毛刺和亚稳态。验证时如果只用理想上电激励流片后大概率会有复位时序问题。我的建议是至少在MSDV环境里构造一个非理想上电场景电压斜坡用RNM-3描述每个电源域的开启时间错开几十微秒复位释放延迟到所有电源域都稳定后再发生。在这个场景下把整个系统初始化流程跑通再看有没有因为电源域未就绪导致的错误行为。这个方法在我们的项目里抓到一个真实的bug某个IO控制模块在上电时因为电源域未稳定就收到了使能信号内部寄存器进入了一个错误的初始状态导致后续所有配置都错位。如果只做理想上电测试这个bug根本不会被发现。5. 模型选型与团队协作的进阶心得5.1 建模抽象的层次怎么定每个团队对RNM模型抽象程度的把握差异很大。我见过有的团队把DCDC建模成了纯数学公式输出和负载完全按公式算和真实电路行为相差太远也见过有的团队在一个LDO上倾注了半年的建模心血精度接近晶体管级但验证没跑几次就被弃用了。我的实践经验是RNM模型的抽象层次要按“被外部电路感知的行为”来定。所谓被外部感知就是其他模块能不能通过端口信号观察到模型的内部状态变化。以PLL为例外部电路最关心的是锁定指示信号的翻转时机、输出时钟频率的精度和抖动特性至于电荷泵里充放电电流的失配多大外部模块并不关心建模时就简化掉。按照这个原则每个模型都先列一个“外部可见行为清单”只对清单上的行为建模其他的全部忽略。这样搭出来的模型速度快验证频次高真实效果反而比追求精确的庞大模型要好。5.2 与数字团队、模拟团队的项目协作模式MSDV环境的搭建和维护天然需要数字验证工程师和模拟设计工程师坐在一起对需求。我刚开始做的时候习惯拉一个共享文档把所有模拟IP的行为模型参数表放在里面模拟工程师填写验证工程师使用。但效果很差参数更新不同步经常模型里用的参数和最新仿真结果不一致。后来改成每周一次“模型评审会”验证工程师和模拟工程师逐个IP过参数状态哪些参数已经冻结、哪些还在调、哪些可能影响系统行为。会议开起来之后因为参数不一致导致的返工少了一大半。协作中还有一个关键角色是数字后端工程师。网表落地时必须是验证团队先用RNM模型把接口行为定义好再交给数字后端去综合和做物理实现。如果验证环境里还没有明确的接口行为定义数字后端就只能自行脑补模拟IP的时序边界出来的网表八成有问题。5.3 扩展思考MSDV还能往哪个方向走MSDV这套方法论用熟了之后可以往两个方向扩展。一个是往更高层次走也就是把MSDV环境接入虚拟原型或者系统级仿真平台和嵌入式软件联合验证。这样能在芯片回来之前就把驱动代码跑通对项目进度帮助很大。另一个是往下走向模拟IP的良率分析和可靠性验证RNM模型可以嵌入统计参数来做蒙特卡洛仿真虽然比纯SPICE快很多但因为模型本身做了抽象统计结果的精度需要在建模时预留参数变化区间。我个人更看好的方向是前者因为芯片复杂度的瓶颈越来越转移到“硬件-软件-模拟交互”上纯RTL验证只是第一关。MSDV环境里的RNM模型可以直接复用成系统级仿真的模拟IP模型这在工具链上是一致的把验证资产的价值真正延伸到项目后端而不是流片就作废。最后再分享一个实际工作中的小技巧RNM模型里所有可能影响系统行为的参数都要集中定义在模型头部并加上注释说明来源和适用条件。坚持半年下来你会发现排查问题的时候翻模型参数远比翻SPICE仿真报告要快。混合信号验证这个方向入门门槛不高但每个小决策都能带来蝴蝶效应沉淀下来这些经验和规范才是项目能否顺利流片的关键。
返回列表