谁负责处理器验证?

文摘   2024-11-18 07:00   上海  

异构设计和 AI/ML 处理暴露了现有方法和工具的局限性。如果你想就这个问题讨论更多,欢迎添加微信 machinewarevp 交流。请备注公司姓名和职位。


定义处理器是什么以及它应该做什么并不总是听起来那么容易。事实上,公司正在努力应对数百个异构处理元件塞进单个芯片或封装的影响。

公司拥有广泛的验证方法,但不适用于验证。验证是确保实现符合规范的过程,如今公司拥有广泛的验证方法。相比之下,验证是确保规范正确且适合用途。处理器的一个重要方面是它们是否正确执行针对规范并满足要求的代码?

Arm 需要超过 11,000 页的密集文本来定义其处理器系列。这之所以有效,是因为它控制着这些处理器的一切,从指令集和微架构开始。即使是较新的可扩展性形式也非常受限,架构许可证持有者只能更改微架构。

对于可扩展处理器架构(例如 RISC-V),验证概念是一项艰巨的任务,因为自由度是其概念的核心。“ARC 或 Arm 处理器是具有定义指令集的 RTL 的一部分,您知道该软件会正常工作,”Synopsys 高级营销总监 Johannes Stahl 说。“IP 提供商已经为您完成了验证。第二种处理器是您拥有指令集和架构许可证,允许您实现自己的 RTL。这增加了更多的自由度,也增加了更多验证的束缚。当您没有固定的指令集时,就会出现另一个自由度。您正在构建一个新的处理器,这是一个特定于应用程序的处理器。有一些工具可以帮助实现这一点。然后也许第四类涉及具有全新架构的处理器。这些不是指令集处理器。它们是并行处理器,处理 AI 工作负载。”

根据您想要的自由度,您需要承担额外的责任。 “处理器验证可以确认它是 RISC-V 还是 Arm,” MachineWare 联合创始人 Rainer 说道。“然后是验证。我的 RTL 是否与参考相匹配?然后需要确认的第三件事是,我的系统是否正常工作?验证、一致性和验证之间的界限很模糊,因为验证或符合标准表示它是 RISC-V,而验证表明它已正确实施。每个人都必须同时做这两件事。”

一致性是验证的一个子集。“系统就绪几乎就像一项认证,”Cadence 解决方案和生态系统高级集团总监 Frank Schirrmeister 说道。“它定义了一组必须正确运行的测试用例。除此之外,对于您所做的任何修改,您都需要自己验证它们。”

没有任何单一工具可以执行处理器验证,相反,它需要一个流程,通常从抽象虚拟原型延伸到物理原型,从硬件到软件以及中间的固件。与使用覆盖率来定义闭包的验证不同,验证覆盖率并不清楚。这在构建一致性测试套件时会产生问题。

在这两种情况下,除非在特定工作负载的上下文中提供,否则很难定义性能、功率和其他非功能性要求的含义。“当某样东西非常灵活并且可以以多种方式实现时,每个人都有自己的变化,”Synopsys 的 Stahl 说。“每个人都敏锐地意识到你可以编写一个 C 模型,你可以通过 C 模型运行工作负载。然而,衡量人工智能引擎成功的关键指标是功率/性能指标。唯一有效地做到这一点的方法是运行有意义的工作负载,这意味着足够的周期。这可以通过仿真来完成,以在通过编译器并在 RTL 上执行时验证工作负载。一旦你完成了这件事,你就有了关于这个工作负载在架构上所做的事情的活动概况,你可以利用它计算功率——希望非常快——并进行优化迭代。”


验证目标

芯片行业不必处理处理器验证,因为当你从 Arm 这样的公司购买 IP 核时,这件事已经为你完成了。 “对于 Arm 来说,验证和确认是相同的,因为他们设计并拥有 ISA,他们设计和编写 RTL,他们构建参考模型,” MachineWare 的 Rainer 说。“他们根据参考模型验证 ISA。然后他们验证 RTL 是否匹配。根据定义,RTL 已经过验证。因为 Arm 拥有并控制它,所以这是一个有界问题。为了确保万无一失,在流片之前,您可以使用 Arm 提供的验证技术确认它是否仍然是 Arm。”

验证的完成程度可能有所不同,具体取决于您是在创建通用处理器还是深度嵌入处理器。“您无法相信在作为 IP 提供的处理器内核上进行了多少验证,”Stahl 说。“但在其他情况下,您可能会说它运行这个工作负载并在我的 SoC 中工作就足够了。这就是我所需要的。”

通常,定义自己的处理器的原因是为了为您的应用程序实现高度优化的功率或性能配置文件。 “需要评估和调整整体系统性能,这不仅仅是为软件人员提供处理器,”Exostiv Labs 首席执行官 Frederic Leens 表示。“这完全取决于硬件/软件设计优化周期,以达到您所在领域的最佳性能。多核设计会使软件性能难以评估,即使您可以正确分析软件。这将使您能够获得执行“热点”,并捕获执行延迟和处理器等待/空闲时间。但优化需要调整底层平台并进行软件修改,以便您能够达到真正的最佳状态。”

很少有人能够同时处理这么多事情。“您必须同时验证处理器和软件,尤其是在涉及 AI 或非常具体的工作负载的情况下,”Cadence 的 Schirrmeister 表示。“你在权衡,‘我能做点什么吗?’我是否可以扩展处理器指令集,并在硬件和软件的整体平衡中获得更好的最终目标,例如更好的功率或更好的性能?'”

但是是什么让 RISC-V 如此困难?“RISC-V 的指令集很小,但整个文档中都有一系列非常危险的词语,说这可以是实现定义的,”Rainer 说。“这可以是实现定义的。这是实现定义的。因此,它没有定义用户做出的很多选择。当这两个中断发生并且调试模式以实现定义的方式出现时会发生什么。这意味着,很难证明或展示一致性。所以挑战在于,它是否符合要求?”


新架构

如今,许多公司都在定义新型非冯·诺依曼处理器。“这与业界过去的做法截然不同,”西门子 EDA 产品管理和产品工程副总裁 Jean-Marie Brunet 表示。“大多数设计都是前一个设计的衍生品。它们以 N+1 周期开发,重复使用大量环境,因此方法论不需要做太大改变。但最近发生了两件事。首先是新算法的引入。人工智能推理、机器学习——它们是一种新架构。它们更基于集群,对于每个集群,内存和计算都更加紧密地结合在一起。它们通过增加集群数量来增强功能,达到非常大的规模。与传统的 CPU 或 GPU 相比,这种架构非常不同。”

Brunet 表示,第二个区别是它们执行不同的工作负载。“这些工作负载正在执行新的路径。它们在设备中执行新功能。如果一种方法(如功率和性能)是针对传统架构量身定制的,那么我就可以依靠监控我所知道的硅片上的重要内容。这些类型的技术现在绝对失败了,因为先入为主的观念认为我知道我需要关注什么性能,我知道什么时候需要关注功率,这种观念是失败的。”

架构的新颖性需要采用不同的验证方法。“如果我想研究具有新处理元素的新架构,比如人工智能处理器,我需要研究整个系统的性能,”Stahl 说。“对于单个 RISC-V 核心,你可能不会参与到该级别的系统性能中。在架构层面上研究的是神经网络处理器的人工智能部分,而不是 RISC-V 处理器。”

你需要小心在虚拟环境中可以做什么。“左移意味着你想尽早在处理器上运行实际工作负载,”Rainer 说。“你可能能够使用处理引擎的虚拟模型,但对于人工智能引擎来说,这将处于 RTL 级别。你验证的是新的东西,而更多衍生类型的东西可以在虚拟模型中。这减少了 RTL 的数量,您可以更快地运行,然后就可以查看工作量了。”

有几家公司已经创建了工具链,从 ISA 和微架构的定义开始,生成模型和 RTL。“您可以在多个抽象级别进行模拟,”Synopsys ASIP 工具高级总监 Gert Goossens 说。“一个抽象级别是工具的输入,它更像是 C 或 C++ 等语言中的算法描述。您在 x86 主机上本地执行它们,然后使用这些模拟或执行结果作为参考。然后,您使用工具自动为您提供编译器,以便您可以将这些应用程序编译到您的 ASIP 架构上。该工具会生成一个指令集模拟器。现在,您可以在处理器上模拟生成的代码的行为,并且它必须与您从本机执行中获得的参考相匹配。这就是您为验证所做的比较。最后,您拥有自动生成的 Verilog 模型,您可以在 RTL 模拟器中执行该模型,然后再次通过将其与参考进行比较来检查结果。”

根据处理器的大小,可能需要硬件辅助验证。“模拟器用于架构探索和验证,以及少量验证,但验证较少,”Rainer 说。“对于验证,您需要工作负载,这些工作负载现在比 5 到 10 年前复杂一个数量级。这些工作负载在硅片中的表现将决定硅片是否会成功投入商业使用。您需要验证,需要启动周期。这需要不同类别的硬件,可能是 FPGA 原型设计或企业原型设计。在这些方面,您实际上正在并行启动大量工作负载验证,其中许多工作负载对于这种类型的设计来说都是新事物。您正在跟踪设备的性能是否与工作负载所寻求的相匹配。发现问题后,你可以返回模拟器进行调试。”

这与验证的重点不同。“验证需要临床方法,”Schirrmeister 说。“我可以访问这些内存吗?你覆盖了所有代码吗?我是否有足够的带宽将所有数据带入 CNN、DNN?然后是网络执行的功能,即 AI 性能本身的问题。一切都连接了吗?它能计算吗?该功能几乎就像验证处理器是否在不运行软件的情况下工作一样。实际工作负载会带来一系列新的验证挑战。”

扩大焦点

巨大的启动能力是关键。Exostiv 的 Leens 表示:“以目标速度或接近目标速度运行的 FPGA 原型是交付系统之前运行有意义数量的周期的唯一方法。”“将 FPGA 原型设计作为流程的一部分的另一个原因是,您很难将模拟器放入现实环境中。关于测试台、模型以及减慢环境速度以适应较慢的模拟器和原型速度,可以说和做很多事情。我们听到工程师希望以高速与‘真实’环境进行互操作,因为事实是模型是有缺陷的,而且从根本上说,处理系统是‘突发’的,这意味着它的整体运行可能会揭示出意想不到的行为——尤其是在达到实际运行速度时。”

要获得必要的可见性,需要考虑整个系统。“你真的不能只看处理器本身,”Schirrmeister 说。 “您必须将互连纳入环境,中间的编译器也很重要,因为它定义了函数如何实际映射到核心。在这种特殊情况下,您必须将测试提升到非常具体的软件例程的特定编译之外,因为处理器需要通用。您需要提取工作负载的特征,然后从 I/O 角度等具体验证处理器是否适合该组特征。”

编译器是系统优化的一部分。“我们看到这种交叉工作负载、RTL 和编译器在 AI 引擎或 AI 加速器中非常常见,”Rainer 说。“这真的很重要,因为当您开发新的神经网络引擎时,您将为该引擎配备一个新的编译器。编译器有很多独特的工作。这就是人们花费大量时间验证编译器和工作负载的地方。”

人们监控处理器性能的另一种方法是使用片上监视器。同样,根据设计是增量的还是全新的,方法也有所不同。 “与此相关的方法已经存在了 30 年左右,”Brunet 说。“您正在设备中插入逻辑或监控功能或能力。对于大多数衍生架构,他们从历史上知道他们想要监控什么,因为他们已经做了大量的硅后特性分析。当您拥有新架构时,该方法会受到挑战,因为您没有硅后特性分析。您没有多年的知识。大型处理器公司多年来已经完善了这一点,但必须有人在架构层面进行研究并确定要监控什么。”

RISC-V 提供了一个有趣的机会,因为其中一些验证问题正在公共论坛上得到解决。“RISC-V 需要一个黄金模型,每个人都可以阅读、查看和理解,”Rainer 说。“委员会选择了剑桥大学的一种名为 Sail 的语言,它被用来描述正式模型。这是黄金参考。如果有人需要知道某些东西是如何工作的,他们应该能够查看该模型,推动它并刺激它,看看它做了什么。但这很难,他们依靠志愿者来完成。这项工作还需要几年才能完成。”


结论

验证至关重要,在当今由特定领域处理器和新型架构主导的世界中,它突然变得与验证一样重要。如今,业界正在使用为验证而开发的工具和技术,并试图将它们应用于验证问题,但这只能让业界走得更远。成熟的处理器 IP 公司花了数年时间才提出其处理器的正式或形式化定义。然后,工具链尝试生成或验证实现是否与这些定义相匹配。

如果未来需要更多自定义架构来解决特定的工作负载问题,那么就需要更好的方法。

软硬件协同设计 HW-SW Co-Design
欢迎后台留言,AI 客服全天在线。脱离物理硬件,开发测试和调试软件。基于虚拟原型的软硬件协同设计,提前一年实现产品上市创收,降低一半开发时间。
 最新文章