中文 英语

当虫子逃跑时

发现bug的能力没有跟上系统日益增长的复杂性。bug比以往任何时候都更可能出现在产品中。

受欢迎程度

虫子是生活的一个事实,而且一直都是。但验证方法的发展速度可能还不够快,无法跟上系统规模和复杂性的增长。

细菌的类型也在改变。有些人把这些叫做极端情况。也有人称之为异常值。还有一组人将它们称为抗模拟超级细菌。

在汽车等市场,漏洞的概念正在演变。设计不仅必须对随机故障具有弹性,而且还必须能够检测系统故障并从系统故障中恢复。

一些产品类别被要求比传统的消费设备耐用得多,而且它们被设计成可在现场升级的。这改变了观念验证从设计阶段执行的静态任务,转变为在产品生命周期中执行的任务。这些工具是如何演变来应对这些挑战的?

图1:为什么bug需要尽早被发现。来源:Intrinsix

我们今天的处境
核查方法随着时间的推移而不断发展。“如今,该行业进行分层验证,”该公司的验证主管齐拉格·甘地(Chirag Gandhi)说Arteris IP.“它从单位层面开始,对单位层面的输入和输出都有假设。然后进入子系统和全系统级别。根据需要在层次结构中定义任意多的层。它可以变成模拟在这里,它可以执行芯片所用于的用例。再往上一层是硅,你有真正的硅,在你发布产品之前做测试。你要尽可能多地覆盖各种情况,以确保你不会出现极端情况下的bug。”

然而,这可能还不够。“异常值错误是指只有在正常流量或运行参数之外进行设计时才能暴露的缺陷,”at的首席科学家Harry Foster指出Mentor是西门子旗下的企业.“极端情况bug是异常值的一个例子,它们本质上是错综复杂的,通常需要一系列复杂的事件才能暴露出来。离群值的问题在于,设置适当的场景来公开它们可能非常复杂。因此,它们通常在验证/验证周期的后期被识别出来,并可能对项目进度产生重大影响。如果异常值是一个架构缺陷,影响可能是毁灭性的。”

该行业没有解决这些问题的工具。“伪随机刺激产生不太可能触发如此精确的序列,”福特汽车的技术营销顾问汤姆•安德森(Tom Anderson)指出OneSpin解决方案.“此外,手写的定向测试可能不存在,因为验证团队无法想到每一种可能的极端情况并明确地验证它。”

这篇文章的所有贡献者在这个问题的一个方面是统一的。“我们已经证明,大多数漏洞逃脱都与并行性有关,”for的首席执行官克雷格·雪莉(Craig Shirley)说Oski技术.“我们已经查看了一些芯片上公布的勘误表,并对错误进行了分类。令人惊讶的是,与并行性相关的bug是如何上升到最常见的位置。”

并行性会在系统中产生时间上的不确定性。“时机变得越来越重要,本质上是事务性的,”亚当·谢勒(Adam Sherer)补充道节奏.“这可能是异步的时钟域,或者就基于事务的信号到达而言,它是暂时的。因此,我们正在研究交易对事件的弹性。”

还有其他原因导致这种现象越来越普遍。“在中国很难进入有问题的状态模拟因为你真的不知道这些状态到底是什么,”公司产品营销经理拉杰什·拉马努贾姆说NetSpeed系统.“导致系统出现bug的时间场景是什么?今天,我们生活在一个集成的世界,每个SoC都包含一些“诱导多能性”来自第三方。没有人知道ip内部是如何工作的。关于如何构建一个IP缺乏透明度。”

Oski Technology应用工程副总裁Roger Sabbaugh定义了抗模拟超级bug:“在模拟甚至仿真过程中难以检测到的功能性bug。它们的出现是因为需要极端的角落场景来激活和检测它们。这项任务已经被证明是传统功能验证方法无法解决的,所以超级细菌通常最初是在硅中发现的,有时是由最终客户发现的。”

扩展现有产品存在挑战方法来讨论这些问题。福斯特指出:“这些bug在本质上通常是并发的。”不幸的是,人类很难推理并发性,这意味着创建一个报道用于暴露这类错误的模型或定向测试集通常是无效的。”

我们是怎么走到这一步的
摩尔定律在大多数应用领域都结束了。”如果没有能力依赖规模收益,设计师就必须更有创意。Vigyan Singhal他是Oski科技公司的创始人。“人们在设计上具有创造性的唯一方式是通过增加并行性和提高性能时钟门控以及在设计中管理活动。这就是为什么会出现抗模拟超级细菌的主要原因,这是一个雷区。如今,客户发现的这种手机比以前多。”

大多数现有的验证工具主要关注功能错误。“十年前,验证工程师只关心功能错误,很少关注性能,”Gandhi说。今天,这是核查计划阶段的一部分。你必须观察各个单元之间的交互,看看它是否会导致导致性能缺陷的问题。”

这不仅仅是硬件的问题。“在单核环境或单ip环境中,人们熟悉软件交互和硬件流程,”微软营销副总裁凯文•麦克德莫特解释道治之.“但在现代芯片中,会有多个处理器,不同的架构具有不同的交互作用,这是人们今天必须关注的问题。这些系统将如何相互通信和交互?他们还必须有一个结构来应对计划外或预料之外的事情。系统如何适应错误或故障,或预期服务的不可用性?”

利用正式技术
为应对这一挑战而发展起来的一个领域是形式验证.Netspeed公司的Ramanujam表示:“在系统还很简单的时候,模拟技术足以让我们探索空间并发现漏洞。“然后人们意识到国家变得越来越大,他们需要仿真的帮助来运行更多的周期。然后系统变得更大了人们开始进行正式的验证,也就是用数学证明RTL实际上功能是正确的。”

正式还允许发现不同类型的问题。拉马努贾姆补充说:“许多客户表示,他们与前几代人的关系陷入了僵局。“僵局意味着你完蛋了。因为空间太大了,想要确保它没有死锁几乎是不可能的,特别是在进行猴子测试时,这涉及到暴力运行多个模拟。即使在游戏结束时,你也不知道自己是否已经触及了所有场景。正式的话,工作就容易多了。”

还有其他类型的bug更适合正式的。OneSpin的安德森表示:“资源死锁、系统挂起或安全问题。“只有正式的技术才能在硅前验证期间预测地发现异常错误。通过针对一组指定预期行为的断言详尽地分析芯片设计,正式验证可以设置每一种可能的极端情况,以查看是否暴露出任何错误。当分析停止发现错误时,正式的工具可以证明没有进一步的错误存在。这种程度的确定性是不可能从模拟、仿真,甚至是在实验室中测试芯片原型中获得的。”

但正式也有限制。“从理论上讲,正式可以找到所有可能的漏洞,但它可能需要更多数量级的时间,”甘地说。“形式化可以用于单元级别,但你通常不能在更大的块上使用它,因为找出任何漏洞的深度都太困难了,可能需要一辈子的时间才能完成。现在可以做的是使用代表RTL的模型。在这些模型中,我们可以抽象出很多导致深度问题的东西。这可以减少验证体系结构所需的时间。我们也在小块上使用形式化,特别是在避免死锁等领域。在这些场合使用正式用语要好得多。”

增加便携刺激
Accellera刚刚发布了1.0版便携式刺激标准(PSS)。福斯特说:“新的便携式刺激标准也可以帮助发现异常错误。”“例如,我们应用了分类机器学习到我们的PSS基于图形的技术工具,以实现尚未验证的场景的实际目标。这种技术比传统技术更有效地探索覆盖空间constrained-random模拟。我们还应用了数据挖掘技术,通过收集和关联事务级活动来表征性能参数,从而扩展可移植刺激的应用,使其超出验证范围。例如,fabric路由效率和带宽、系统级延迟、缓存一致性、仲裁效率、乱序执行,甚至是操作码性能。找到异常漏洞的关键在于设计和输入空间之间的充分交叉探索,这就是约束随机、正式技术和基于PSS图的智能刺激可以发挥作用的地方。”

PSS还将提供在系统级验证期间创建更复杂测试的能力。Cadence的产品管理和营销总监Larry Melling说:“一旦发现并隔离了一个错误,我们仍然很难理解它,也很难创建一个测试,我们可以实际调试,找出如何修复它,并将其添加到回归套件中,这样它就不会再次崩溃了。”“我们谈论的是多个处理器同时进行操作,强调总线能够解决这些时间问题。这并不是一种适用于今天所有人的方法和方法,但许多人肯定在寻求应用这项技术,看看我们是否能改善目前的状况。”

错误逃
即使添加了新的工具和技术,bug也会逃脱。甘地说:“当你看到一个bug时,特别是在硅中,你并不总是知道它是否是一个bug。”“你必须试着找到这种观察的原因。有一些功能应该在芯片中可用,例如扫描链一种从芯片内部的重要结构中读取数据的方法,某种形式的跟踪调试或性能监视器。利用这些信息,你可以试着找出是否存在漏洞。”

芯片上的调试和感知将变得更加重要。麦克德莫特说:“人们意识到我们的设备有多个处理器,所以我们可以在现场使用处理器来帮助弄清楚发生了什么。”“你需要了解内部总线上的交通状况,如果发生了不同的事件,而这些事件可能与你试图寻找漏洞的区域无关,那么交通状况就是必须观察的一个因素。有多种方法可以实现,虚拟平台和真实硬件。”

海森堡的不确定性原理可以在试图追踪具有时间方面的问题时发挥作用。公司首席执行官鲁珀特•贝恩斯表示:“你必须全速前进UltraSoC.“速度也很重要,因为系统级的问题只是偶尔出现。片上插装可以提供一个与比特和字节无关的抽象,也与JTAG消息传递无关,而是提供一个系统级视图。它们可以识别协议性能、事务级统计性能并帮助人们识别异常。一旦你找到了问题所在,你就可以放大到更低层次的细节。”

当一个bug被隔离出来后,就需要修复它。甘地说:“一旦找到了,你就会努力寻找变通办法。”“这可能是一个软件或硬件的解决方案,比如鸡肉块,或者做一些稍微不同的事情,比如增加一小段时间。虽然这可能会影响功能或性能,但在很多情况下,这可能并不重要。”

这假设产品可以更新。“这是人们采用的软件开发的新风格物联网麦克德莫特说。“过去那种‘开发一个产品,严格测试,发布,你就完成了’的日子已经不再适用了。人们熟悉现场更新,熟悉嵌入式永远在线、永远可用的设备。不断更新是意料之中的事情。”

汽车行业也增加了需求。福斯特补充说:“设计在产品中的检测和修正机制将取决于系统故障(比如在功能验证期间从未发现的极端情况)或随机硬件故障对安全的影响。”“但你可以看到,我们的目标并不是检测异常值本身,而是检测会对安全目标产生影响的故障。”

对于最小的几何图形,也可能需要检测短暂的错误。安德森指出:“如果一个阿尔法粒子翻转了一个内存位,芯片必须能够检测到这个错误,并可能纠正这个错误。”“正式的工具可以考虑一系列可能的故障,包括短暂的和永久的,并分析它们对设计的影响。”

越来越多的系统被部署在可以更新硬件的系统中。Sherer说:“如今,更新主要是固件。“但这可能是FPGA的更新。然后是硬件更新。有一种迫在眉睫的复杂性需要一个解决方案。”

机器学习增加了另一层复杂性。Ramanujam补充道:“使用ML,你可以验证系统以及它是如何工作的。“但如果它有一个神经网络包括学习?与昨天相比,今天的系统对给定刺激的反应可能不同。它自己学习。你如何验证一个正在学习的系统?”

这将需要一些新的功能。他说:“你所描述的是一个系统,在现场的特定操作条件下,你看到了该系统的故障。”“你如何在一个可调试的工具集中重播整个环境?这并不像重新运行测试那么简单。我们需要一些能力来将系统的状态加载到可调试的环境中,因为调试依赖于学习到的状态。然后就变成了安全问题。”

结论
核查的性质已经改变,并将继续改变。Singhal说:“传统方法适用于连续块,但游戏已经发生了变化。“你必须后退一步,重新启动验证。当硅回来的时候你会怎么做?那太晚了。你必须以不同的方式计划核查。”

Singhal建议你从设计过程开始。“当你构建设计或做出关于块和微架构的决策时,你必须将并发性与顺序性作为首要决策点。”

拉马努贾姆指出,这也需要一种不植入漏洞的哲学。“我们有一个非常模块化的架构,通过使用一些路由器、交换机和网桥,以一种简单而优雅的方式保持设计空间小得多。我们建立了互连,可以准确地控制状态是什么,我们可以验证整个状态空间。这就是为什么我们不只是提供乐高积木,让用户建立一个互连。”

产品开发、验证和维护的许多方面都必须重新考虑。虽然一些重要的部分已经到位,但还没有一种方法可以将所有内容整合在一起。



留下回复


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

Baidu