更改执行验证的方法可以减少几周的验证时间。
当我们谈论数字IP的介绍时,我们指的是块的完整验证。设备数据表中列出的每个功能都需要验证。此外,每个寄存器传输语言(RTL)语句,BRANKE和表达也需要验证。只有当功能(功能“检查)和RTL代码覆盖范围达到100%时,IP才会签名。为了到达那里,我们可以考虑两种不同的模式来达到目标:通用验证方法(UVM)方法(古典方法)和基于形式的方法(新方法)。这是如何显着降低验证时间的方式。
古典方法论
多年来,我们已经使用UVM-SV / UVME方法来验证数字IPS。这种方法基于复杂的对象/方面取向语言,用于构建受机随机测试以验证数字块并发现错误。通过这种方法,我们可以通过简单地随机化数据生成来检查我们的块的功能并运行数百个测试,这有助于我们找到角落条件和/或死锁。
数字IP的验证环境的开发可以在以下任务中拆分:
有时SystemVerilog断言(SVAS)在测试台中添加以检查特定条件,例如握手信号之间的关系。图1总结了这些步骤。
代码覆盖的步骤通常是在正式的不可发生流量的帮助下证实的。通过正式的无法接纳流量“改进”古典方法,使我们发现无法通过任何模拟涵盖无法涵盖的死/无法访问的RTL代码。以这种方式,从总体代码覆盖的计数中删除此类代码。
新方法
新方法基于正式验证流程。数字IP通过此方法完全验证和注销(正式签名)。该流程基于使用正式的应用程序和SVA代码的开发验证块的所有功能功能。至于基于UVM的流量,也可以将正式流分成多个任务:
图2.总结了这些测试。
一旦RTL准备就绪,第一步是用正式的喷墨工具分析它。这可能导致Verilog / VHDL代码没有许多错误,例如:
IP(例如AMBA总线)的总线协议可以通过ABVIP进行有效证明。该概念与UVM验证IP非常相似,主要差异是协议规则被遗忘验证。块的配置和状态寄存器可以轻松使用正式应用程序验证。可以检查任何类型的访问策略,不仅是简单的读/写或读数,还可以通过软件/读取软件或写入清除等。这个验证步骤是详尽无遗的。
对于Linting,总线协议和注册检查,设计人员无需编写任何SVA语句。正式的应用程序会自动生成断言以证明RTL代码。可以通过编写自定义SVA代码来验证IP的所有其他功能。正式的财产验证工具将详尽地证明断言。正式方法允许我们验证具有多个异步时钟的IPS的重新同步结构(例如握手)。在整个结构和正式分析中检查数据稳定性和重新同步触发器。
UVM流量,与正式流一样,可以提取RTL代码覆盖,以及功能覆盖。未达到覆盖目标时,开发并证明了更多的SVA断言。
UVM与正式
为了更好地了解UVM和正式的方法之间的比较,我们可以将RTL代码模拟在空间中的许多状态。
数字设计具有不仅与FSM相关的交易,而且还是数字协议总线和/或计数器的整体组合。这些州可以是数百或数千个,我们验证的范围是涵盖所有空间。
当我们使用动态约束随机测试模拟设计时,我们正在覆盖该状态空间的子集。图3.展示一个例子;黄色圆圈是可到达的状态空间,应验证和覆盖。通过UVM受限随机测试,绿圆是已经覆盖的状态空间。蓝色圆圈是不可达状态空间,其代表由于参数配置或非合法状态而代表死亡代码或无法访问的代码。
通过开发新的UVM测试以及使用更多随机化运行测试,可以增加状态空间的覆盖范围。
正式验证是详尽无遗的。证明SVA断言意味着验证所有状态空间。它相当于运行数千个UVM测试。图4.显示一个例子。SVA约束(定义为假设属性)通过删除不是合法的交易/状态来减少状态空间,例如,在总线协议中,不是所有可能的信号组合都是合法的。
表格1比较UVM VS正式方法完成任务任务。
正式流程可用于每个验证任务,而UVM不适用于RTL码Linting,也不适用于时钟域交叉(CDC)。总线协议和寄存器验证使用正式验证,而不是UVM,可以数周的工作。功能特征,当正式适用时,通过正式流动验证。
将IP块集成在芯片(SOC)的系统中,我们应用两种方法来产生组合验证。使用正式流程执行IO Muxing和Inutaceny(Dead Code)的连接检查,为顶级验证开发了UVM动态测试。
如果我们在每次验证任务所需的数周/天内测量努力,我们会比较UVM流量和正式流程之间的结果,我们发现在哪里图5.显示我们可以使用正式流量而不是UVM来节省几周,以便签署数字IPS。
在此验证步骤中保存的资源可以部署到顶级验证,其中UVM方法仍然适用(图6.)。
使用正式方法,我们可以在验证任务上节省几周。当正式流量适用时,数字IPS的正式签名让我们在更短的时间内发现更多的错误而不是任何受约束的随机测试。UVM方法广泛应用于验证SoC级别的集成。
David Vincenzoni.是STMicroelectronics的R&D设计经理。