| ||
自始至终,bug都是生活的一部分,但是验证方法的发展速度可能跟不上系统的规模和复杂程度的增长。漏洞的类型也在变化。有些人称它们为边界情况,有些人称异常事件(outliers)。
在自动化等领域中,漏洞的概念正在演化。设计不仅要对随机故障有弹性,而且还必须能够检测系统故障并从中恢复。
一些产品被要求具备比传统消费产品更长的寿命,并可以更新。这将验证的概念从设计阶段的静态任务转变为贯穿产品生命周期的动态任务。怎样改进工具以应对这样的挑战呢?
图.1:为什么需要及早发现漏洞
我们今天的处境
验证方法随时间推移而发展。Arteris IP的验证总监ChiragGandhi表示:“现在产业对验证进行了分层。它从单元级开始,对单元级的输入和输出作出假设。然后进入子系统和全系统级别。在层次结构中根据需要定义足够多的层,进行针对芯片的用例仿真。再往上是硅片级,你可以在上市之前对实际产品做测试。覆盖尽可能多的用例,以确保没有边界情况的漏洞。”
然而,这可能还不够。Mentor的验证首席专家Harry Foster指出:“异常漏洞是一种只能在采用非常规数据流或操作参数运行设计时才能暴露出来的缺陷。边界情况漏洞是异常漏洞的一种,它本质上是错综复杂的,并且通常需要在问题暴露之前预测复杂的事件序列。异常漏洞的问题在于设置用来暴露它们的适当场景可能非常复杂。因此,它们通常在验证/确认周期的后期才被发现,并且可能对项目进度计划产生重大影响。如果该异常值是一个体系结构的缺陷,那么影响可能是毁灭性的。”
行业内还没有能解决这些问题的工具。OneSpin Solutions的技术营销顾问TomAnderson指出:“伪随机激励的产生不太可能触发如此精确的序列。此外,因为验证团队无法准确想到并验证所有可能的边界情况,手动写定向测试也并不现实。”
本文的所有贡献者对漏洞产生的原因进行了统一。Oski Technology首席执行官CraigShirley说:“已经证明大多数漏洞都与并行性有关。我们在一些芯片上发布了勘误表,并对漏洞进行查看和分类。令人惊讶的是,与并行相关的漏洞是最常见的。”
并行性会导致系统内时序的不确定性。Cadence系统与验证组的产品管理组主管Adam Sherer补充道:“时序变得越来越重要并且相互影响。时钟域之间可能是异步的,或者以基于事务的信号到达为时序基准,所以我们正着眼于事务对事件的恢复能力。”
还有其他原因会带来这样的漏洞。NetSpeed Systems产品营销经理RajeshRamanujam说:“在仿真中很难进入有缺陷的状态。因为你不知道这些状态是什么、导致系统出错的时间场景是什么。我们现在生活在一个集成的世界中,每个SoC都包含许多第三方IP。IP的构建方式缺乏透明度。没有人知道IP内部是如何工作的。”
Oski Technology应用工程副总裁Roger Sabbaugh定义了抗模拟超级漏洞:“边界漏洞是在模拟甚至仿真过程中能够抵抗检测的功能性漏洞,需要极端边界场景来激活和检测它们。传统功能验证方法已经被证明难以完成这项任务,因此超级漏洞通常最初是在硅片级,有时甚至是最终用户级被发现的。”
扩展现有方法以解决这些问题仍存在挑战。Foster说:“这些漏洞通常是并发的。不幸的是,人类很难推断出并发性。这意味着创建一个覆盖模型或一组定向测试以暴露这类漏洞通常是不可靠的。”
什么造成了今天的处境
摩尔定律在大多数应用领域正在失效。Oski Technology的创始人Vigyan Singhal说:“如果没法依靠缩放比例带来收益,设计师就必须变得更有创意。目前在设计中创造性的唯一来源是增加并行性,以及通过时钟门控和管理活动来改进功耗。这些是模拟抗性超级漏洞出现的主要原因。这是一个雷区。用户发现这样的漏洞比以前更多了。”
现有的验证工具大多数都聚焦功能漏洞。Gandhi说:“十年前,验证工程师只关心功能漏洞,很少关注性能。而今天,性能已经是验证规划阶段的一部分。你必须查看单元之间的交互是否会导致性能漏洞。”
而且,这不仅仅是硬件问题。Imperas营销副总裁KevinMcDermott解释道:“在单核环境或单IP环境中,人们熟悉软件交互和硬件流程。但在现代芯片中,将会有多个处理器,不同的架构和不同的交互。这就是人们今天必须关注的问题。这些系统如何通信和互动?系统也必须有一个能应对计划和预期外的情况的结构。系统如何容纳error或fault,或者面对预期服务失效的情况?”