近五年来,系统和芯片设计厂商不但面临着Time-to-market的压力,还要承受异构多核、高算力、差异化创新、系统与软件堆栈所带来的技术挑战,由此带来的软硬件协同设计和超过80%的IP复用问题,直接导致验证工作日趋复杂。因此,在芯片正式流片之前,越早通过完整的系统级验证与仿真对芯片性能、功耗、软硬件协同进行测试越好,这也符合当前主流设计流程中所体现的“Shift Left”趋势。
提升芯片验证覆盖率有多难?
在数字化、智能化等多重因素的推动下,无论是芯片的性能还是设计复杂性都得到了突飞猛进的发展。以英伟达在GTC 2024发布的Blackwell GPU为例,作为当前面积最大的GPU,它由两颗Blackwell裸片拼接而成,采用台积电4nm工艺制造,拥有2080亿颗晶体管,AI性能达到20 petaflops。相比于上一代产品Hopper GPU,Blackwell GPU的AI性能提升了5倍,片上存储提升了4倍。
然而,如果事先没有对功能模块和IP进行充分验证,就寄希望于数千亿颗晶体管像人体细胞一样组成器官,然后再正常工作,是一件既不可能也不容易的事情。众所周知,高效的验证工具能够从两个维度帮助芯片设计公司:一是降低成本,实现一次性流片成功,避免无休止的验证和调试循环;二是缩短研发周期,加速产品上市时间。根据行业经验,验证成本目前已经占到整个SoC前端设计的70%。
对芯片验证工程师来说,一旦完成了芯片设计的RTL并配置了设计状态空间,验证过程就开始了。他们需要检查每个空间,以确保最终的SoC设计能够正常工作。而作为验证时程中耗时最久的一部分,覆盖率收敛(coverage closure),包括功能覆盖率和代码覆盖率,其目标是确保整个设计能够按照预期的功能正常工作。
但就目前的实际应用情况来看,覆盖率面临来自三方面的挑战:
1. 规划覆盖范围。因为很难知道在测试平台的覆盖定义中写些什么(需要什么类型的覆盖组别?差距在哪里?还需要写些什么?…等等),但这对于确保100%的覆盖率又是至关重要的。
2. 覆盖率。我们很难知道哪些测试对覆盖率贡献最大。例如,工程师可能运行相同的测试1000次,只能达到50%的覆盖率。当接近100%的覆盖率时,会发现如果要达到最后几个百分点的覆盖率可能还需要几周的时间。所以,有针对性的测试是关键,但开发这些测试有需要耗费大量的人力。
3. 激励开发(Stimulus development)和根本原因分析。因为您可能会遇到激励不应该执行特定配置或bug的情况,更有甚者,这种激励完全有可能是以一种根本不会达到覆盖目标的方式编写的。
在传统的芯片验证周期中,验证工程师会设定目标并运行回归环境。作为流程的一部分,工程师会配置测试平台来生成随机激励,以观察设计如何响应。对于给定的设计,进行10,000到15,000次测试并不罕见,但验证团队通常对每次测试的投资回报率没有概念,导致回归测试可能会持续数天,占用宝贵的计算资源。
仔细分析之后会发现,在SoC验证周期中,有两个迭代循环占据了大量时间:定位错误和运行回归与覆盖率结束后的错误修复。这两个循环都包含耗时的迭代工作,涉及覆盖率分析、在发现覆盖率漏洞后进行调整、以及一次又一次地重复……然后,当团队发现用例错误时,他们需要分析错误,在RTL或测试平台上进行更改,并重新运行回归以确保错误得到实际修复。这部分其实也是一个迭代循环。
实际上,上述这些内容主要是从测试质量(QOR)和测试时间(TTR)角度来考虑。作为验证开发者,还需要关注达成结果所需的成本(COR),随着芯片复杂度提升,增加验证开发者和运算服务器都会增加额外的成本。并且,每次芯片改版(re-spin)都会带来不小的成本增加。
学习如何更快地完成验证覆盖率
通过前文的分析,我们可以很明确的得知,对整个验证过程生成的大量数据进行彻底的人工分析实际上是不可行的,团队通常需要对芯片设计错误的根本原因有更多的了解。而在验证开发者人工的经验成为芯片验证的明显瓶颈时,产业发现人工智能(AI),特别是机器学习(ML)可以发挥关键作用。
原理不难理解,因为ML最大的魅力就在于能够在迭代循环中不断成长,并基于大数据发现代码中难以察觉的错误,进而实现更快速、更高质量的覆盖率收敛。也就是说,如果ML引擎可以从某些模式中学习,例如,它能够识别测试台中一行代码中的错误,那么它就可以将这种洞察力应用于未来的回归,从而加快覆盖范围,特别是随着系统的训练,可能达到更高的覆盖率。
Synopsys已经开发了相当长一段时间的AI辅助设计能力。2020年发布的设计空间优化(Design Space Optimization)工具DSO.ai就大大扩展了AI辅助的足迹,通过在芯片设计的大解决方案空间中自动搜索优化目标,DSO.ai有助于提高工程生产力以及芯片的功耗、性能和面积(PPA)。而今天的主角,将是侧重于验证空间优化(Verification Space Optimization)的工具VSO.ai。
如前所述,测试覆盖率是半导体设计验证环节的核心问题。而激励向量(Stimulus vectors)是通过各种技术生成的,其中约束随机(constrained random)是一种流行的方法。然后,这些向量被用于对设计进行仿真运行,寻找与预期结果不匹配的测试结果。
验证团队选择感兴趣的结构代码覆盖率指标:行(line)、表达式(expression)、块(block)等,并自动将其添加到仿真运行中。由于每次测试迭代都会生成符合规则的约束随机激励,仿真器会收集所有形式的覆盖率指标。而对结果进行监控,目的是调整约束,以提高覆盖率。在某些时候,团队可以在项目时间表和资源限制范围内,自行判断和决定是否已经做到最好,并最终完成流片。
一个典型的芯片项目会运行数千个约束随机仿真测试,其中带有设计中大量重复性工作。因此,新覆盖率的增长速度会减慢,并且随着时间的推移,每次新测试的收益也会降低。这意味着,在目标实现之前,团队必须设法弄清楚发生了什么,并在时间和资源限制范围内尽可能提高覆盖率,以确定最佳前进路径。而且,这个过程中的“最后一公里”非常具有挑战性。
那么,对于覆盖率定义(coverage definition),Synopsys VSO.ai能够推断出一些超出传统代码覆盖率的覆盖率类型,以补充用户指定的覆盖率。机器学习可以从经验中学习,并在适当的时候智能地重用覆盖率。即使在单个项目中,从早期覆盖率结果中学习也可以帮助改进覆盖率模型。
对于验证开发者而言,覆盖率并没有具体的指标,并存在大量的重复性工作,因此手动进行回归优化的效率非常低,对给定设计进行上万次测试是很常见的。VSO.ai可执行粗粒度基准测试,提供自动化的、自适应的测试优化。在运行过程中,VSO.ai会率先运行具有最高ROI的测试,同时消除冗余测试,从而加速覆盖收敛并节省计算资源。
由于传统工作流中功能覆盖率主要依赖验证开发者的经验,导致很多时候覆盖率收敛的效果很差。VSO.ai也可执行细粒度的基准测试,通过调整随机约束激励来针对未被验证的覆盖点,自动发现测试覆盖率中难以捉摸的错误,进而提升测试质量。
在验证的最后阶段,过往验证工程师的手动调整到这个时候覆盖率收敛和ROI都会显著降低,原因在于此时验证工程师对已获取的验证大数据所具有的洞察力和分析能力已经很低。VSO.ai可执行根本原因分析(RCA),以确定为什么没有达到特定的覆盖点,通过AI解决最后的难题。
当然,AI辅助设计要在EDA领域发挥作用,依然需要融入到传统工具中,VSO.ai也不例外,因此工具的可集成特性是非常重要的。目前,VSO.ai可以轻松集成到现有的新思科技VCS(R)回归环境中,而无需对设计或测试平台进行任何代码更改。
下图总结了VSO.ai可以提供的优势。总结而言,就是设计人员可以在更短的时间内实现更快的覆盖率收敛、更高的测试质量、并攻克“最后一公里”的验证难题。
VSO.ai的典型应用
AMD通过在几个设计上使用VSO.ai而受益匪浅。数据显示,通过小规模的RTL更改和设计变动,AMD方面以优化的自动化方式实现了100%的覆盖率。下图总结了AMD使用VSO.ai在四种不同设计的回归样本中应用同一种方法学时获得的测试数据。
四种设计的回归特征
如果与没有使用VSO.ai的原始设计进行比较,AMD发现:
- 在四个设计中运行测试的数量减少了1.5-16倍,以实现相同的覆盖率
- 快速、按需回归,如果用户不确定所需的迭代次数,则可用于衡量回归测试分布的效果
- 在相同预算下,可能打到更多的覆盖率分仓。如果默认回归不能达到100%的覆盖率,VSO.ai可能会超过这个目标(即实验1)
- 如果测试用例没有贡献,则将其从覆盖率回归中删除
- 对受约束的随机测试进行更可靠的测试评分
- 调试,发现比预期更低概率的覆盖项目
日本芯片厂商瑞萨科技则展示了VSO.ai的一个典型场景——验证IP功能。目前,在汽车市场,上市时间的压力非常大,工程师们面临着一系列不同的挑战,包括手动分析和分类以确定未被覆盖到的验证领域,并彻底验证是否存在任何逻辑或功能问题,而所有这些都必须在每个IP或项目的特定计算预算内完成。
结果显示,通过使用VSO.ai的人工智能驱动验证,瑞萨在减少功能覆盖率缺陷方面取得了高达10倍的改进,IP验证生产率也提高了30%,并实现了99%的IP覆盖率,表明人工智能有能力帮助芯片厂商应对日益复杂的设计带来的挑战。
结语
新思科技VSO.ai是一套自主工作系统,用以替代验证开发者负责的编译设计和编排测试用例等工作,以尽可能快、尽可能低开销地达到覆盖率目标,并获得最高质量的验证结果。这样,芯片设计开发者和验证开发者就能够从反复循环的工作中解脱出来,更专注于创建差异化和创新化的IP与SoC系统。