18.luck新利
的意见

增量的方法来重用自动化测试从IPs出类拔萃

开始使用便携式刺激,子系统和系统水平。

受欢迎程度

在过去的几年里,大量的能源被投资于提高生产力和quality-of-results设计验证。为此而有前途的工作是商业和内部工具已经发展提高生产力和效率的验证,子系统和系统水平。这些工具提高抽象层次,增加测试生成效率,适用于在各种各样的验证环境。

这项工作有高度兴趣将自动化测试验证环境,超越面向事务,块级环境,以及伴随的兴趣有一个标准化的输入规范语言来指定这些测试。

作为回应,Accellera推出了一个工作组,名为便携式刺激工作组(PSWG),收集需求,获得技术的贡献,并指定一个标准化的输入语言,可用于指定测试的意图,可以针对不同的验证平台。

的特点Accellera PSS输入规范使测试目的是gdp8 %不同的环境,而环境描述的核心仍然是独立的。随机领域和约束可以很容易地从现有SystemVerilog描述和关键部件的标准可以采用增量,因此很容易开始。

那么如何针对这些不同的平台呢?本文将向您展示如何使用便携式刺激开始自动化测试块,子系统和系统水平。

便携式块级别的刺激

有一个巨大的好处在块级验证环境中应用便携式刺激。便携式刺激工具需要非常高效和有针对性的测试生成,因为SoC-level要求有效地生成测试的环境。在块级环境中,测试生成效率达到功能覆盖目标更快,在验证周期的早期发现bug。

本文中使用的示例是一个多通道DMA引擎。是典型的这种类型的DMA引擎,记忆移植操作的特点是传输描述符,抓住了传输大小,源地址和目的地址,地址增量设置,和详细的传输选项。在街区层面,我们要全面锻炼这些transfer-descriptor字段的组合为了全面验证DMA的实现。

围绕这个IP的简化视图UVM testbench如下所示。DMA引擎执行使用UVM序列程序寄存器内的DMA引擎根据一个DMA描述符类。


图1:简化UVM testbench。

重用SV约束

DMA描述符类包含字段和约束,定义一个有效的DMA传输。能够利用这个现有的描述从一个便携式刺激描述是很重要的,因为一个工程师已投入时间正确地捕获限制,因为其余的环境是由这个类。幸运的是,事务级的子集Accellera PSS与SystemVerilog约束重叠子集在某种程度上,许多SystemVerilog基于描述可以转化成PSS的描述。

比较原始SystemVerilog和PSS结构体如上所示。导入SystemVerilog描述,使其可以在PSS描述利用的投入到创建SystemVerilog sequence-level描述,使开始使用PSS简单,并确保PSS描述保持一致与任何变化序列项SystemVerilog一侧。

指定基本操作

现在,我们将介绍最基本的DMA操作:一个DMA传输。在一个便携式刺激描述,一个操作的数据和行为封装在一个行动

如上所示,一个行动是内部声明组件由多个行为,封装资源共享。在这个基本块级别的验证,我们不需要任何特别的wb_dma_c组件。我们的do_dma行动仅仅抓住一个随机wb_dma_descriptor结构字段。我们以后再填写的实现细节。

描述场景

从测试的角度来看,我们可能想要做的第一件事就是生成一系列单独的DMA传输。我们描述我们的测试场景内的行动,就像我们的基本操作。因为我们的测试场景本身组成的行动,我们添加一个活动图(关键字:活动)指定sub-actions之间的关系。

请注意,我们声明simple_xfer行动在一个组件。该组件包含的一个实例wb_dma_c组件声明了do_dma行动。我们的simple_xfer行动只是256重复运行do_dma行动。

我们想扩大我们的测试执行了两个连续的DMA传输,使用的通道的约束两个转移是不同的。这应该引起更有趣的活动在DMA控制器。注意我们如何限制一个动作实例的随机领域从上面——这是挑战与directed-random序列。

指定环境界面

到目前为止,我们还没有太多的担心我们的行为将如何连接到UVM testbench环境。的类型扩展PSS便于层提供的功能在我们的接口环境中,而不需要改变任何的操作或组件我们已经描述。

在我们UVM testbench,刺激是由UVM序列产生wb_dma_descriptor序列条目。我们要整合PSS描述在一个UVM序列也有它产生wb_dma_descriptor序列条目,但选择的字段值被我们的便携式刺激工具,而不是使用正则SystemVerilog约束随机的。

PSS包提供一个伟大的方式来封装环境细节,这里我们使用一个包包含我们的细节do_dma行动将整合与我们UVM序列。具体地说,我们认为我们的序列提供了一个任务命名do_item接受并执行wb_dma_descriptor序列条目。的进口声明中指定这个外部方法的签名。

接下来,我们需要指定如何do_dma操作使用导入方法。PSS提供执行块指定PSS实体和外部代码之间的关系。的身体类型的一个执行块指定执行行为(身体UVM序列任务一样)。在本例中,我们指定的执行行为do_dma行动是通过wb_dma_descriptor字段do_item的任务。


图2:实现PSS序列驱动UVM testbench。

现在我们的新PSS-drive UVM序列可以驱动UVM testbench,与优势,我们可以更有效地行使DMA传输模式。

便携式刺激子系统和SoC水平

子系统和SoC水平,两者兼而有之什么验证和如何它验证了改变。现在,而不是专注于验证的实现DMA引擎,我们更感兴趣的DMA引擎是如何集成子系统或SoC中的其他模块。什么也不同,特别是在SoC水平,是我们嵌入式处理器,我们至少会想开车代码,处理器上运行一些测试活动。

子系统级的环境,我们可以从一个框图开始类似如下所示。


图3:一个简化的子系统。

DMA引擎是现在的一个子系统,包括一个处理器(去掉总线功能模型)和其他知识产权。

把我们的PSS描述在这个子系统/ SoC环境可以通过两个步骤:

  1. 模型scenario-level测试的要求
  2. 指定新环境集成

这种环境下的目标是验证与其他IP子系统的集成。为此,我们将运行多个并行DMA传输。我们要做的第一件事是扩展我们的dma_c组件指定可用资源——在这种情况下,31 DMA通道。同时,我们将创建一个新的动作类型,消耗一个DMA通道并指定其数据流要求。

我们更新的直接存储器存取组件和行动现在指定:

  • DMA 31频道资源(使用资源池)
  • 每个DMA操作需要一个源内存缓冲区内存缓冲区并产生一个目的地
  • 每一个do_mem2mem_dma操作(继承自do_dma)需要访问一个DMA通道(使用字段)
  • DMA描述符中指定的频道必须一样的信道分配给DMA操作
  • 用于DMA操作的源地址和目的地址必须匹配的源和目标内存缓冲区

填写更详细一点,我们创建一个aes_c对AES块组件模型操作。请注意,do_encrypt行动需要一个内存缓冲区,我们被迫的地址输入数据的缓冲区地址AES块。限制membuf_s输入是双向的,所以这个约束力量DMA do_mem2mem_dma行动时目标AES设备发送数据到do_encrypt行动。我们也使用一个资源池中aes_c组件只指定一个操作可以发生在AES块在给定的时间。

最后,我们指定一个组件来表示我们的系统指定可用资源(DMA和AES块),和我们指定一个顶级的行动来执行并行DMA传输。请注意,我们只捕获这一事实我们想执行四个平行的DMA操作。这是部分规格:我们不指定数据应该来自哪里,或它应该去的地方。PSS处理工具将推断并连接适当的行动,以确保法律生成场景。具体地说:

  • 的四个平行转移发生在一个不同的DMA通道
  • 只有一个操作可以针对AES块

部分规范是一个非常强大的技术生成复杂的测试场景从一个简单的、简洁的规范。

SoC-Level集成

在子系统级环境,DMA传输仍由一个序列,我们可以重用相同的风格与UVM集成环境,我们在块级的环境。在SoC层面,我们的测试将使用效用函数用C编写程序DMA。在许多情况下,这些效用函数将驱动例程的开始在一个操作系统驱动程序后使用。在集成测试调用这些实用程序例程提供了额外的自信程度在这些实用程序例程,以及锻炼的集成硬件IP。

就像块级的环境,我们可以扩展我们的核心PSS层环境的细节描述。在本例中,我们描述我们将调用的C API (wb_dma_drv_single_xfer),和我们提供的exec块的定义do_dma行动电话这种API并将值从DMA描述符。

结论

便携式刺激工具有助于提高测试水平的场景描述,使建模将是非常具有挑战性的创建与导演和事务级约束随机测试。结果,他们启用自动化创造更多独特的测试。

下次当你面对一个验证任务超过指导或约束随机测试的功能,考虑应用便携式刺激。

想要了解更多关于如何快速开始使用便携式刺激提高验证效率,请阅读白皮书,平滑的路径与便携式刺激其中验证自动化测试的便携式刺激IP SoC水平



留下一个回复


(注意:这个名字会显示公开)

Baidu