使用便携式测试和刺激标准重用现有验证资产

文章:Matthew Ballance

我们如何缩短我们对PSS承诺的丰富奖励的途径?

便携式刺激的生产力承诺迅速在我们的行业中众所周知。展出的高潜力Accellera便携式测试和刺激标准(PSS)有意义:谁不会欢迎一种方法来确保我们投入建立新验证环境和创建有意义的测试的所有思想,努力和时间,可以在验证引擎,技术和项目中重用和缩放?那么我们如何缩短PSS承诺的丰富奖励的道路?

是人类,它只是我们想要的自然。我们现在想要它。也许我们是一点点自私,但我们可以利用我们过去创建的一些验证组件,测试和环境吗?好吧,好消息是,我们可以通过使用我们已经手头的资产来拥有我们的蛋糕并吃它。以下是一种方法论和规划过程,可以最大限度地减少复制努力并最大限度地提高采用PSS的重用益处。

拿你拥有的东西

执行现有资产库存有助于确保以前投资的最大利益。您可能会在您的设计和验证环境中的丰富信息感到惊讶,这些环境可用于实现便携式刺激环境。SystemVerilog约束和测试实现代码是跳转PSS描述的两个好源。

PSS描述以声明方式捕获测试意图。正如我们从SystemVerilog的陈述约束说明所见所看到的那样,声明描述,非常好地借助重用和自动化。SystemVeriLog约束的格式与PSS约束相似,因为它们的重用可以像将SystemVerilog约束复制和粘贴到PSS模型一样简单。重用的典型目标是配置类,用于指定配置IP块和子系统操作模式的规则。

但是,约束通常处于不立即识别的形式。考虑一个电子表格,用于指定SOC的存储器映射。然而,通过一点工作,可以轻松地将已以机器可读格式捕获的信息转换为PSS约束,以专门化针对不同存储区的访问。

现有环境具有大量测试实现描述,但通常以需要修改的形式,以便使用PSS描述。在通用验证方法(UVM)环境中,查找在IP块上执行简单操作的实用程序序列,例如设置其配置,执行操作等。有时,这些序列是用随机约束和变量创建的。在其他情况下,任务提供了控制不同操作模式的参数。在这两种情况下,PSS描述都可以轻松利用这些测试实现。

用于实现便携式刺激测试意图的测试实现代码几乎始终以现有的命令语言编写,例如SystemVerilog,C ++或C.图1显示从现有SystemVerilog任务中的代码片段在设置DMA引擎上以在给定通道上执行传输的虚拟序列中。PSS模型可以利用此代码与DMA引擎接口。请注意,由于这是UVM,此任务使用UVM寄存器模型来访问DMA引擎内的寄存器。

设置DMA引擎在给定频道上执行传输 数字1PSS可以重用此SystemVerilog测试实现以访问DMA引擎寄存器。

图2显示类似的C功能,用于编程DMA引擎以执行单个传输。我们还可以利用此代码为DMA引擎的PSS测试意图提供测试实现。请注意,这两组现有代码是相似的,但不相同。我们需要确定如何最好地与我们的PSS接口。

编程DMA引擎执行单个传输 数字2PSS还可以利用DMA控制的嵌入式C测试实现。

可重复使用的结果检查和策略

在IP-块到SOC验证连续体中显着变化的测试的一个方面是结果检查。在块级别,常用使用基于详细的记分牌的检查,查看如何进行操作的详细信息,以及其整体结果。在SOC层面,在设计中的可视性水平是不可行的,并且结果检查往往仅基于操作的整体结果。

定义检查策略将从IP块到完整SoC中的所有方式可以是重要的,如果垂直重用的可移植性是组织的高优先级,则很重要。在这种情况下,强烈建议专注于建设到PSS中描述在SOC层面保留有效性的检查类型。通常,这种检查将基于内存数据,并将重点关注操作的总成功(或故障)。

总是可以使用实现检查来增强功能检查。例如,在块级别,可以通过纯粹的功能检查(例如,验证目的地的数据与源的数据相同)从可移植刺激的角度检查DMA引擎操作。然而,在检查DMA传输是如何执行的细节时,块级记分牌仍然是活跃的。这个策略也可以扩展到子系统和SoC级别,例如通过在SoC级别引入性能检查记分牌。

重复使用友好的测试实现

具有多种测试实现实现是有效的强制性的。在UVM中工作的验证者能够利用UVM提供的服务,例如使用寄存器模型,这是重要的。与此同时,对于使用嵌入式软件的验证者能够利用它们熟悉的寄存器访问机制,这是重要的,例如包装数据结构,位字段等。

定义用于测试实现码的公共API,并确保不同IP块的测试实现可以​​互操作,可确保通过测试实现代码促进便于促进便携式刺激重用,而不限制。最大化不同测试实现实现之间的共性非常重要。设计可以由所有实现使用的通用API是沿此方向的第一步。图3.显示一个API,用于通过从块级验证环境中重复使用的SV任务之上构建的DMA操作。

用于DMA操作的API 数字3.可以在重复使用的块级SV任务之上构建普通的DMA API。

图4.显示用于C中相同的功能的实现,用于嵌入式软件环境。注意,相对于的实施方式略有不同露天参数,因为SystemVerilog是一种面向对象的语言,而C不是。在SystemVerilog环境中,mem2mem.任务是一个包含所需数据的类的成员,例如寄存器模型。在SystemVerilog环境中,露天参数PSS模型指定将映射到适当的类对象。由于C不是面向对象的,因此代码必须处理映射露天从PSS模型到数据对象的参数,该对象包含实用程序代码所需的数据。保持功能等同的API的这种方法,即使基础细节差别差异,显着简化了从PSS映射到测试实现的各种实现的任务。

使用c建造的DMA API 数字4.也可以使用C的常见DMA API。

如果垂直重用 - 从IP-Block到SoC级别的测试意图重用 - 非常重要,重要的是考虑是否值得投资环境兼容层,例如UEX硬件访问层所示图5.。UEX硬件访问层提供C API以通过多种方式访问​​平台存储器和线程功能。使用这样的兼容性层可以测试实现嵌入式软件环境的实现代码,以便在验证过程中更早地开发和调试,并在更多验证过程中重复使用。

UEX硬件访问层 数字5.使用像该UEX硬件访问层这样的环境兼容性层允许在验证过程中早期开发和调试测试实现代码。

无论是跨越多个平台的兼容层还是特定于环境的API,重要的是要考虑不同IP块的测试实现如何合作。所有IP块的测试实现代码可能需要访问内存。许多IP块的测试实现将在发生中断时需要通知。在生产代码中,操作系统提供连接各种IP块的驱动程序代码的胶水。然而,在验证环境中(无论是UVM还是嵌入式软件),需要更轻量级的东西。

图6.显示了用于DMA IP块的中断服务例程,该程序使用UEX API读取DMA寄存器并在DMA传输完成时通知等待例程。UEX Library允许在UVM环境中运行相同的代码,嵌入式裸机软件环境或基于OS的环境。这种测试实现代码的重用启用了用于访问IP块的代码的早期调试,并有助于最小化返工。

此DMA IRQ常规的UEX API 数字6.使用该DMA IRQ例程的UEX API允许代码在几个不同的环境中运行。

预计特定类型IP块的操作和测试实现代码将与该IP的多个实例进行交互。指定从PSS层中选择的常用方法,即被访问的IP块实例是重要的,对于确保不同测试实现实现的均匀性是重要的。图7.显示一个基本组件操作,指定名为的内置字段露天该控制IP块的哪个实例给定操作将访问。以这种方式定义可重用的基本组件和操作类型可确保组织中开发的所有PSS描述以相同的方式指定IP块实例正在使用的方式。

定义可重用的基本组件和操作类型 数字7.定义可重用的基本组件和操作类型有助于确保PSS描述中的共性。

图8.展示了这件事露天字段是从PSS EXEC块引用的一个DMA动作。

Devid Field. 数字8.PSS块可以引用组件露天DMA动作的字段。

开发PSS测试的一个最佳实践是最小化PSS模型与测试实现代码之间交换的数据量。调用外语的其他语言,例如SystemVerilog和Java,分享了这一最佳实践。一般而言,PSS描述是一个高管,它指定测试实现将执行细节的高级视图。

例如,参与DMA传输的行动。在从存储器位置传输数据之前,应初始化该存储器位置。而不是写入PSS描述以填写内存字节,但PSS描述所示图9.只需指定要初始化和委托内存如何初始化为测试实现函数的内存区域。

PSS描述存储器 数字9.通过将实现细节委派给测试实现函数,本PSS初始化操作的描述最小化必须在它们之间传递的数据量。

实施g在C中写入的功能显示在图10.。该责任授权使PSS描述能够保持在声明性编程最有效的高级,同时将详细信息委派给命令的语言,这在执行这些任务时最有效。

Gendata功能 数字10.对于内存初始化操作的基于C基测试实现还允许PSS保持在声明性编程最有效的高水平。

这些各种设计策略都帮助确保您和您的组织可以最大限度地提高便携式刺激提供的生产力效益 - 现在。许多可以通过利用您已经拥有的测试代码来实现。那么,为什么要等到明天,当您今天开始享受重用和可扩展性的明显优势?

马修气概 Matthew Ballance是一名产品工程师和便携式刺激技术专家,在导师图形,与Questa Infact便携式刺激产品一起使用。

相关文章

发表评论