中文 英语

增量验证的挑战

是否有可能进行设计更改而不必重新运行整个回归套件?

受欢迎程度

验证比设计消耗更多的时间和资源,但在优化它方面几乎没有进展。

原因很复杂,问题比答案多。比如,最小值是多少验证需要在设计变更中获得信心?如何最小化发现变更是坏的,或者它有意想不到的后果的成本?

在设计流程中,已经创建了工具和方法,通过安全、非优化的修正,将问题的可能性降至最低,特别是在接近带出时。但目前还没有这样的工具或方法进行验证。

公司创始人兼首席执行官西蒙•戴维曼表示:“你有大量的资源专注于验证治之软件.“我们的目标是尽量减少你所做的设计更改,因为在当今可用的技术下,当你改变设计中的某些内容时,你需要重新运行所有内容。”

这个问题有许多变化的部分,但它们都涉及困难的问题。例如,应该运行产生最高结果的测试,这听起来可能很简单报道首先,所有的覆盖率都是相等的吗?您如何知道过去测试产生的覆盖率在设计更改之后是相同的呢?

在这个优化过程中有很多问题。动态验证应该是第一线,还是正式的技术能更快地发现问题?随着仿真在验证中的作用越来越大,您如何恢复能够快速地进行仿真呢?将机器学习(ML)能够帮助识别RTL和测试用例之间的联系吗?设计或验证方法的某些方面需要改变吗?

虽然很容易将精力集中在验证的功能方面,但这只是冰山一角。性能、电力、安全和安保怎么样?信号和电源完整性等其他影响如何?这些都是每个公司必须面对的现实问题。

持续集成
许多公司都有适当的方法来处理变化,主要目标是找出是否存在可以快速修复的问题。“增量验证的目的不是完全验证设计,”OpenHW集团的工程总监Mike Thompson说。“相反,其目的是确保设计的稳定性,以便在集成之前对项目提出的更改进行审查,并且设计的成熟度继续向前发展。”

随着设计的成熟,测试运行的范围可能会发生变化。“你不希望在设计的每一个阶段都进行所有的检查,”at的产品营销总监Kiran Vittal说Synopsys对此.“多年来,我们已经开发出一种方法,如果你处于RTL的早期阶段,你可以运行一种检查,如果你处于RTL的后期签收或最新阶段,你真的想把它交出去,你可以运行一套不同的检查。这既适用于IP或子系统,也适用于SoC,因为在所有阶段都需要进行更改,并且需要进行一些增量验证,而无需进行详尽的验证。”

对于新设计来说尤其如此。Imperas的大卫曼说:“核实需要有弹性。”“一开始你没有很多测试,但几乎每周测试的数量都会翻倍,所以你需要有越来越多的验证资源。在某种程度上,你必须发布你的产品,然后一些人开始测试硅,而不是在模拟中做它。但没有什么灵丹妙药。你必须不断投入越来越多的资源。”

这涉及到很多价值判断。OpenHW的Thompson说:“团队面临的挑战是确保持续集成(CI)回归,这最终将涉及多个静态检查,以及数十次模拟运行,足够全面,以充分实践设计,同时足够小,以在合理的时间内完成。”“今天,通过查看测试计划和覆盖率报告,从完整回归中选择‘最好的’测试集来添加到CI回归中,以一种特别的方式来管理这个问题。这可能是一项费力的任务,自动化的时机已经成熟。对每晚回归进行数据挖掘,以提取关于代码更改、覆盖率结果和最近的错误位置的信息,可以用于自动化选择要在CI中运行的测试。”

选择最好的测试集并不容易。公司高级技术营销经理保罗•格雷科夫斯基(Paul Graykowski)表示:“你想要确定真正能给你带来最大效益的测试。Arteris IP.“每次你做一些可能影响深远的改变时,都要运行这些测试,看看情况如何。这也可能包括查看这些测试需要运行多长时间,然后对如何最佳平衡进行一些有根据的猜测。”

问题是缺少了一项基本的技术。Davidmann说:“理想情况下,你想要这样的东西,‘如果我改变了RTL的这一部分,那么你就需要运行这些测试。“这个行业的做法恰恰相反。它开发了这样一种技术:“如果我们运行回归,测试失败了,我们可以通过签入反向返回,找到被更改并导致测试中断的三行代码。’那是相反的锥体。”

Testbench相关性
虽然一些公司定义了针对设计的特定方面的特定测试,但大多数验证依赖于有约束的随机测试模式生成,其中必须在运行后确定特定测试平台的相关性。Arteris的Graykowski表示:“这两种资源必须一起发挥作用。“一组测试可能针对您正在测试的组件的整体功能。更有可能的是,它们由几个不同的过程识别。它可能是架构师说,“我想确保这个关键功能总是被测试。高级验证人员当然需要掌握一些知识,他们知道哪些东西正在接触芯片的关键区域。其中一些只是了解架构,了解不同的块如何交互。另一方面是我们忠实的功能覆盖。假设您有一个良好的功能覆盖模型,您可能会确定哪些测试为您提供了最互斥的覆盖。”

后一种方法必须是迭代的。Synopsys的Vittal说:“在最初的几次运行之后,不管出于什么原因,你都可以智能地选择对设计影响最大的测试。”“这可能是最令人兴奋的节点数量,如果你可以根据特定的已知行为智能地重新排序测试,你就不必运行1000个测试。相反,您可以选择前100个测试并运行它们。也许这可以帮助你更快地发现这些问题,而不是精疲力竭地运行所有1000个测试。”

这是EDA公司采用的一种流行策略。“我们已经实现了分析技术,帮助我们的客户确定在特定的垂直细分市场中,哪些工作负载与该应用程序更相关,”Vijay Chobisa说西门子EDA.“假设他们有50个工作负载,在这些工作负载中,有5个被证明是最相关的。在进行这些增量更改时,将运行这5个工作负载。如果时间允许,你就把它们都运行一遍。”

但这种方法存在问题。“将完整设计的验证子集与增量设计更改联系起来的能力,这样验证就可以适当地有针对性,因为可能会出现意想不到的后果,因此很难解决,”Daniel Schostak说,他是建筑设计学院的建筑师和研究员手臂.“然而,数据科学和机器学习可以提供帮助,因为它们可以用来建立设计领域中可能引起的错误类型的模型,以及用于执行特定设计领域和发现特定类型错误的最佳测试。”

一个类似的问题是,一旦一个测试被放到回归套件中,没有一家公司会让它退役。“一家大型处理器公司有这么多遗留测试,”Graykowski说。“许多都是用古老的语言写的,但他们总是说这些必须运行。一旦你有了这个包袱,它就会一直跟着你。你只需要拖着它到处走,回归就会从运行一晚上变成一个周末。作为验证过程的一部分,您必须不断地查看回归运行结果的质量,并确保您没有浪费周期。你真的需要有人负责优化测试列表。”

验证设计
几十年来,人们已经证明,对设计过程进行小的改变或限制可以在其他过程中产生大的结果。例如,针对测试的设计曾经被认为过于昂贵,但今天没有设计依赖于旧的测试方法。相反,某种形式的扫描方法是内置的。但是为了验证而设计呢?这意味着什么?

“我们一开始为什么要改变设计?Synopsys公司人工智能解决方案高级总监斯泰利奥斯•迪亚曼提迪斯问道。“可验证性设计作为一个概念已经存在很长时间了,但我们真的没有一个实用的可验证性设计方法。如果我要引入一个高风险的变更,这将要求我重新运行所有的验证,那么我需要有意识地进行它。如果有一个风险较低的替代方案,我的策略可能会改变,我可能会在重用先前的验证数据、推断和向前推进方面变得更加积极。在某一点上,我将回归整个系统。但与此同时,我可以利用我所拥有的东西迅速取得进展,并对解决方案一开始的风险很低充满信心。”

问题是有些设计很难很好地进行分区和封装。“你需要试着限制任何变化的影响,”大卫曼说。“但当涉及到处理器时,挑战在于很难修复小块而不触及所有东西。如果你在管道中发现了问题,它就在中间。对于RISC-V验证来说,要保护不更改的比特并不容易。因此,挑战在于如何让你的验证更有效。”

这通常需要不同的方法。Thompson说:“尽管功能测试仍然占主导地位,但静态检查在CI中的使用正在增长。”“我们越来越多地看到CI环境涉及静态检查,如检测、时钟域交叉、合成和编码风格。这种转变的一个主要驱动因素是成本。静态检查在计算和授权方面通常更便宜。”

它们可以更完整。SmartDV应用工程总监Bipul Talukdar说:“在模拟中,可能很难覆盖输入的整个状态空间,并研究它们对输出的影响,以获得100%的覆盖率进行验证。”形式化验证可以帮助练习整个状态空间,并快速生成改变行为的反例。形式化验证方法的关键是将更改的行为编码到属性中。”

这种方法涵盖的不仅仅是功能。“设计和验证不仅仅是RTL和测试台。还有更多,”维塔尔说。“你有实施的设计限制,你可以事先验证这些限制。您甚至可以捕获异常错误,如错误路径和多循环路径。如果你在写作趟车对于功率意图,你不必等到你做功率感知模拟。有一些静态工具可以进行低功耗UPF检查。同样,也有静态工具用于SDC验证和其他领域。”

另一种封装方法是使用层次结构。“重复使用构件将提高整个系统的验证级别和设计安全性,”Björn Zeugmann说,他是该公司集成传感器电子研究小组的小组经理夫琅和费IIS自适应系统工程部.“更小的区块,复杂度更低,更容易验证,也更易于测量。在设计系统时使用小的增量步骤可以让设计师验证小的更改,而不是一个新的完整系统。尽管如此,记住整个系统的验证并定期检查所有测试平台是很重要的。应定期审查重用的块及其测试平台,以避免失败,并使用最新的验证方法和设计经验对其进行更新。”

从本质上讲,这就是IP重用背后的原则。“总有一个核心是被重新利用的,”Frank Schirrmeister说,他是公司解决方案和生态系统的高级集团总监节奏.“如果你以此为出发点,就需要进行大量的预验证,所以你不会想要从头开始进行完全的重新设计。在此基础上,进行扩展。您可以用更多的指令扩展处理器,等等。通过扩展它,你还需要扩展围绕它的验证。”

这也扩展到购买第三方IP块。格雷科夫斯基说:“很多时候,他们只是把它放在自己的系统中,并相信供应商已经做了尽职调查。“他们可能有自己的一套对他们来说非常重要的测试,特别是当他们在做一些子系统级测试时,但他们真正测试的是确保不同盒子之间的所有连接都是良好的,并且所有东西都到达了它应该到达的地方。”

验证ECOs
有一些工具采用了设计ECO的概念,并使用它让您尽快回到验证。“重新编译设计以进行仿真可能需要很长时间,”西门子的乔比萨说。“我们采用了ECO概念,在不影响整个设计的情况下进行小的局部更改,只是为芯片的特定部分重新合成和再生位文件。这可以通过两种方式实现小的本地化更改并提高周转效率。现在您可以在几十分钟内验证您的更改,但也要考虑计算资源。如果你需要重新编译这些庞大的设计,它们会使用大量的计算资源,这是不现实的。”

还有其他工具正在采用增量方法进行验证。“如果你有IR下降的问题,你想要缓解,你可能会破坏时机,”Marc Swinnen说,半导体业务部门的产品营销总监有限元分析软件.“计时是精心设计的,没有人想要破坏设计来解决IR掉落问题。传统上,它被视为一个困难的增量问题,因为电力网络是一个有许多路径的网络。很难准确预测电流的走向,一个地方的网络变化可能会使电流在其他地方重新分布。今天,我们几乎可以立即提供电压降图片的增量更新。在修复IR掉落问题的同时,你可以进行增量更改并跟踪,以确保时间不会被破坏。”

结论
核查工作将继续发展。格雷科夫斯基说:“我们还处在必须亲自动手的阶段。”“我们必须小心,不要创建太多的测试,以至于我们永远无法运行所有的测试。我们必须确保我们在编写的测试场景中有效率,并且我们真的实现了我们想要的。”

很多人都在期待AI和ML,希望它能够为这些问题提供一些见解。它开始产生影响,但还有很长的路要走。

编者按:下个月,《半导体工程》将介绍将机器学习应用于验证过程的进展。



1评论

罗恩Lavallee 说:

简化设计过程不也会简化验证过程吗?典型的图灵机使用时钟,并使用内存结构、布尔结构和状态机结构来构建,表示要验证的大“状态空间”。Flowpro机器是无时钟的,使用原子决策结构和原子动作结构构建,代表一个要验证的更小的“事件空间”。或者,我遗漏了什么?

留下回复


(注:此名称将公开显示)

Baidu