虽然IC设计复杂性日益增加,但但留给IC设计工程师的时间却没怎么变化。这迫使工程师加速所有相关流程。我所在的团队最近移植到一个仿真环境,以便测试过程更快、更有效。我想分享一些我们从中学到的经验。
花费太多时间在测试上,可能会错过产品及时面世的最佳时机;而花费太少时间,可能会漏掉一些设计错误。到了掩模阶段才发现错误,可能要付出昂贵代价。制作一个7纳米(nm)掩模的最低成本现在约为1000万美元,这还是对比较小的IC而言。
随着我们转向更复杂的SoC设计,有效地利用测试时间变得越来越重要。有多种途径可以测试我们的设计,必须选择最佳方法来优化测试和用时。仿真作为一种改善测试时间的方法,优势突出,虽然做起来并不简单。
它需要我们在测试平台设置和设计过程中进行一些更改,包括SVA(SystemVerilog断言)中的一些修改。我们还确定了哪些类型的测试以及在仿真上运行测试的哪个级别的测试平台具有最好的投资回报率(ROI)。
我们从概述开始,然后总结了一些代码示例,提供一些注意事项并给出了规划建议。我们将设计一个改进过的虚拟接口(Vif ++)以完成移植过程。在行业标准验证方法中,UVM作为一种虚拟接口(Vif),是接口中组件之间共享的一段代码。
这里的术语“仿真器”可与任何能够执行RTL或门级模型的仿真器互换使用,包括软件HDL仿真器。这个加速主要针对基于硬件的设计,因此这将是我们讨论的重点。
为何选择仿真?
为了验证复杂的设计,我们现在可以使用多种工具和技术,包括模拟器、仿真器、SVA、功能覆盖和形式验证。所有这些都在不同的层面工作,使我们尽可能快地达到无BUG设计的最终目标。仿真器可帮助我们将运行时间加速100到100万倍以上。
图1:通过各种技术改进性能
在图1中,我们看到模拟的当前时间状态是我们追求的目标。以下是实现三级性能的一些技术。
软件/驱动程序生成
加速开发时间的一个重要部分,是在实验室交付实际芯片之前改进软件的生成环境。
通过软件启动/驱动程序开发,可以为目标设计提供一些选项,包括:
表一:软件/驱动芯片启动选项
仿真器的候选测试
我们发现,性能测试,以及在模拟中已经历了大量清理(高水平测试和运行清理一段时间)和长时间运行的测试,都是很好的选择。
性能测试——测试可能需要长时间运行才能获得准确的测量结果。
• 对于网络芯片:在某些配置中测量数百万个数据包的系统性能
• 对于处理器:测量标准基准测试(如SPEC)的系统性能。
• 对于深度学习芯片:测量像ResNet推理等标准基准测试的系统性能。
长时间运行测试——测试资源或内存耗尽、老化(设计中具有时效性的任何元素)、系统重新配置测试、热存储或回收旧的对象。
• 对于网络芯片:可能是在发送数百万个数据包后,系统的行为方式
• 对于处理器:可能是在发送数十万甚至更多的执行跟踪之后,系统的行为方式。
• 对于深度学习芯片:可能是执行多层神经元后,系统的行为方式,每个神经元都可以做矩阵乘法、加法和求平均等。
再生楔子——楔子是这样一种测试,即其中几件事情必须同时发生,并且可能需要一些时间才能达到触发状态。这些场景在一级性能上通常难以达到或发现(见图1)。
主机接口连接——通过快速测试设计中的每个寄存器,可以非常快速地检查这一属性。我们的芯片可编程性越强,就越需要对它们进行全面测试,因为测试用例的组合随着每个选项的增加而增加。
基础设施检查测试(带I/O)——检查模块或SoC内的连接测试、环测试等。可以集成任何定制I/O。加密的Verilog不易处理,你可能需要创建一个伪行为模型来替换它。
请记住,在仿真器中,通常只支持两个状态值。使用X-prop和Formal解决方案可以更好地检查依赖于X和Z值的测试。设计和测试平台经常使用X和Z来测试多驱动程序冲突、未分配的变量、悬空连接以及接口值的错误翻转。
架构
为确保不同版本和供应商之间的一致性,最好遵循行业标准。对于设计和验证语言,我们有SystemVerilog。对于DV库,我们有UVM。幸好在仿真中也有一个接口工作组:Accellera的SCE-MI2。领先的仿真供应商都支持SCE-MI2处理程序方法,所以在深入研究SCE-MI2标准之前,让我们先了解一下这个架构。
定时和非定时的部分和DPI
我们将非定时部分称为HVL域。我们当前环境中的时间,指推进RTL仿真的仿真时间。大多数UVM测试平台代码位于非定时域中。我们通常认为测试平台在零仿真时间内执行。排除在外的主要是驱动程序和监视器,因为它们必须根据时钟边缘驱动数据。
我们将定时部分称为HDL域。显然是基于定时的或可以感知时钟边缘的设计。在现代设计中甚至还有非定时的代码:并发SVA和一些功能覆盖。
DPI如SCE-MI手册中所定义:“DPI(直接编程接口)是SystemVerilog和外部编程语言之间的接口。它包括两个独立的层:SystemVerilog层和外部语言层。DPI两侧是完全隔离的。实际使用哪种编程语言作为外部语言是透明的,与此接口的SystemVerilog端无关。”
DPI通信是用于单独执行同步定时(HDL)和非定时(HVL)域的核心思想之一。
SCE-MI2通信模式
SCE-MI2通信有三种主要模式:
1. 基于功能 - 功能(利用DPI-C)提供中级抽象。
2. 基于宏 - 消息传递接口,旨在由不同的用户组用于多个用例。
3. 基于管道 - 事务管道是通过功能调用来访问的结构,它提供了一种用于与HDL端进行事务处理的方法。
基于功能的模式是最容易实现的。
图2:SCE-MI2通信模式
减速的来源是定时(HDL)域和非定时(HVL)域之间的通信。
我们计划深入研究设计和测试平台所需的代码更改,将在后续文章中加入几个编码和方法论指南,然后再介绍规划流程。
本文同步刊登于2019年电子工程专辑杂志5月刊