本文分析了 FPGA原型和仿真器两种方法,也是当前国内多数芯片公司在采用的方式,给大家做参考。西方和日本的芯片公司很早开始寻求早期的软件启动和验证的混合方法,目前都已经转到了 SystemC 虚拟原型的方法上面来。
符合摩尔定律的技术发展使得数十亿个晶体管能够封装在单个芯片上。硬件制造工艺的这种发展也改变了上一代芯片架构的基本前提。现在制造的芯片中很大一部分是 SoC,即片上系统,由于以原生软件的形式在板载处理器上运行智能软件,因此可以在一定程度上被视为自给自足的系统。
SoC 开发在某种程度上描绘了整个设计生态系统的进步,它过去类似于硬件设计、软件设计、系统设计等不相交的集合。现在它类似于集合的交集,其中硬件设计、软件设计和系统工程在很大程度上相互依赖。此外,复杂性和市场动态的增加导致需要缩短系统的周期时间,例如,过去每隔一年就会发布一次新手机、电视、电脑,现在几乎每隔几个月就会发布一次。
图:产品开发流程激烈的竞争推动了创新,也催生了对可靠产品的需求,这实际上意味着更多的测试和周期时间的增加,因为当今系统的复杂性。可靠产品的要求意味着可靠的设计,即系统级的硬件和软件。复杂系统可以是基于多个 SoC 的子系统的超集,例如,当今的汽车有多个子系统协同工作等。这让人们重新关注所有组件子系统通过独立进行彻底的验证和资格认证过程来确保可靠性的重要性。市场竞争导致整个产品开发的时间表非常严格,几乎没有时间对子系统组件进行详尽硅前/后验证。这是一个非常时期,需要革命性的方法来实现硅和系统的质量才能成功。据观察,传统的“详尽的硅片前验证和硅片后验证”方法似乎效率低下,而且在处理当前一代数百万门 SoC 的复杂性和时间线时显得无能为力。随着复杂性的进一步增加,每一代后续情况都会变得更加艰难。传统的详尽模拟验证和详尽的硅片后验证方法,由于以下几点而变得不切实际:- 数千百万门设计的模拟运行时间,有时在单个测试场景中需要几天时间
- 随着系统复杂性的增加,覆盖所有功能所需的测试模式数量呈指数级增长
- 系统的软件依赖性需要硬件/软件互操作性测试,这些测试在模拟上运行速度太慢,在硅片上运行又太晚
- 系统复杂性的增加导致验证软件与系统/应用软件一样复杂,其开发不能推迟到硅片可用
- 工艺的进步也导致硅片的 NRE 成本增加,任何可避免的硅片重新设计都是受欢迎的,因为它们有助于组织的底线。
- 大量子系统依赖第三方供应商为调试器、闪存编程器等创建补丁,出于显而易见的原因,这些补丁不能推迟到硅片可用。
下面列出了某些可用选项,它们可以针对上面列出的问题。但仍然存在一些缺点,不能作为问题的整体解决方案。- 加速模拟:可以使用加速硬件(基于 GPU 的加速器)来加速模拟,但加速取决于设计类型,但仍然不够快,无法用于软件开发。可以使用仿真盒来运行加速模拟,但需要模拟基础设施符合 SCE-MI 才能实现优势。这在大多数情况下是不切实际的,因为开发中使用的传统基础设施(IP、VIP 等)无法立即替换。
- 电路内模拟:可以使用仿真盒来模拟硬件设计并在其上运行本机软件以及调试器。可以在几周内启动仿真模型,这可用于利用硬件行为的早期可用性。不幸的是,对于实际的 SoC 设计,仿真器速度仅为 kHz,这使得繁重的软件调试变得非常痛苦。
- 基于 FPGA 的仿真/原型设计:基于 FPGA 的原型速度为 MHZ,可以成为验证/应用软件开发的有效工具。但是,前期启动时间较长(1-2 个月)是一个障碍,随着 SoC 周期时间的缩短,快速运行平台的优势在这种情况下几乎丧失殆尽。启动平台的工作量很大,但没有足够的时间将其用于验证/应用软件开发,导致该方法的投资回报率低。
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | 仅可接受可合成模型以及资源限制,例如时钟、内存等。 |
图:传统方法和 Toshiba 快速原型比较图:传统方法和 Toshiba 快速原型比较基于仿真和 FPGA 平台的方法各有利弊。组织可能会采用其中任何一种方法来集中开发工作,但由于这两种方法都无法按预期覆盖完整的 SoC 开发周期,因此可能会导致代价高昂的妥协。即使组织部署了这两种方法,它们也会以脱节的方式使用,并剥夺了它们可能从这两种流程中获得的真正优势。我们提出了一种混合方法来解决基于仿真器的方法和基于 FPGA 的方法中的痛点,反之亦然。这使得两种方法能够协同工作并相互加强,从而实现最终目标,即在硅片可用之前进行验证、确认、软件支持和互操作性测试。由于该方法基于同时使用仿真器和 FPGA 原型,我们假设用户可以同时访问它们。用户还对仿真和原型流程有基本的了解。为了解决问题,我们需要定义问题。我们将参考表 1 来详细说明痛点并提供可能的方法来规避该问题。仿真平台的初始启动受两个因素控制,即您知道什么和您拥有什么,即您对设计的所有了解以及可用于完成移植工作的信息/资源。表 2 从 RTL 移植的角度对仿真设计所需的工作进行了分类,这就是“您知道什么?”变得重要的地方。任何曾经参与过原型设计工作的人都会同意,由于工具的行为方式,这个初始阶段非常令人沮丧。有时,仅让 RTL 通过 FPGA 综合工具的细化阶段就需要几周时间。不幸的是,在实际设计中,所需的信息(表 2)无法预先提供给仿真工程师,需要通过多次设计编译迭代才能发现部分信息。 |
| | |
| | 使用 FPGA 组件设计时钟生成模块了解时钟结构以优化时钟布线。使用实际缩小的频率比约束设计。 | 识别时钟驱动程序并将其定义为具有所需频率的脚本中的时钟 |
| | |
| | 使用基于 FPGA 的组件生成内存模型或可以使用简单脚本生成可综合的行为描述 | |
| | | |
| | 如果资源需求超过一个 FPGA 设备,则需要分区。这增加了原型的复杂性和稳定时间。 | |
| | | |
与 FPGA 综合相比,RTL 编译器在模拟器上的运行时间非常短(因为它不会尝试优化,而只是检查语法和阐述问题),这对识别无法支持且可能需要修改或删除的组件的过程有很大帮助,例如,模拟器编译器上的编译时间以分钟为单位,而 FPGA 编译工具需要数小时才能编译并生成错误(如果有),并且每次都会生成一个错误。方法必须是“以原型为目标的模拟”,即,为使设计在模拟器上可用而付出的所有努力都应该是为了在 FPGA 平台上可重复使用。例如当您希望模块被删除时,不要使用黑盒,因为仿真编译器会将输出绑定到逻辑“0”,但 FPGA 综合工具会推断为黑盒。设计中需要进行的所有更改都应针对 FPGA 实现。这将自动涵盖仿真要求,因为它们是 FPGA 要求的超集。一旦设计在仿真器上启动并运行,如果做得正确,它应该可以像 FPGA 一样进行综合,并且可以节省处理 FPGA 综合错误的巨大痛苦和挫折以及时间。在仿真流程中,这方面对用户是透明的,但对于基于 FPGA 的流程来说,这可能是最具挑战性的方面。多次分区迭代是原型工程师在达到设计的正确分区之前必须面对的严酷现实。尽管少数 EDA 供应商提供自动分区工具,但验证分区后设计是否正常工作仍然是一项挑战,大多数情况下,不确定性是由于分区过程中添加了引脚复用相关逻辑而引入的。在顶部模块周围创建一个包装器并使用分区文件在仿真流程中实现,将提供一种快速方法来验证分区逻辑(通常用于 POR 行为)并可能与调试器连接,以增强对分区后设计的信心。如果您在分区后设计中发现问题,它还将为更快的调试铺平道路。此外,这还建立了一条验证流程中不同阶段生成的网表的路径(如果需要),例如,由于流程中的某些异常,分区后行为与 PnR 后行为不同。仿真器本质上很慢,但提供了调试可见性的一大优势。用户可以探测设计中可用的所有信号,但速度太慢使得很难找到正确的触发条件来重现场景,例如,在模拟器上开始运行 41 小时后发生了故障场景,而重现故障仅需 20 分钟。另一方面,由于资源紧张,FPGA 不提供与模拟器一样的调试可见性。在调试 FPGA 平台时,模拟器的调试可见性功能可以用作资产。在上述情况下,用户可以使用 FPGA 平台识别触发器,并使用该触发器在一次运行中为整个设计的触发事件周围的信号状态创建波形转储。这将实现快速的根本原因能力,因为设计团队可以获得完整的设计状态来得出结论。此外,同时使用仿真和 FPGA 流程使团队能够在将问题转移到 FPGA 平台之前尝试可能的设计变更,从而规避仿真中的问题,随着解决问题的尝试次数的增加,这种方法的优势也随之增加。只有在流片之前设计平台可用,从而能够开发基本的验证软件,才能发挥 Pre-Si 验证的真正潜力。在此过程中,需要注意复杂验证和应用软件所需的基础设施,例如调试工具、补丁外设等。这种流程简化确保在相对较快的 FPGA 平台上启动子系统只是一个过程,因此将运行 HW-SW 互操作性的复杂部分,强调设计的稳健性。这符合使系统的每个部分都非常可靠的目标,从而减少了全系统级所需的验证时间。模拟器很慢,而基于 FPGA 的原型比较快,而虚拟原型的方法是最快的。过去芯片公司往往使用模拟器和 FPGA 原型,因为它们的 DNA 被认为是不同的,但我们试图强调不同方法的相似性,以及如何将它们融合在一起以弥补彼此的弱点并增强优势,从而确保缩短 SoC 验证周期、提高硅片质量并尽早为软件开发提供 Pre-Si 平台,如上图所示。