验证范围

使用便携式刺激平滑软件驱动验证的路径金宝博滚球专家

马修·巴拉斯,导师,188bet西门子公司

设计变得越来越复杂,而且越来越多地包括一个处理器——通常是多个处理器。因为处理器是设计的一个组成部分,验证在处理器上运行的软件与设计的其余部分之间的交互非常重要。金宝博滚球专家硬件/软件边界的验证和确认不能合理推迟,直到实验室中出现原型。金宝博滚球专家因为软件对当今系金宝博滚球专家统的运行至关重要。或者,至少,核查小组这样做是有风险的。我敢肯定我们都听过噩梦的场景,例如,在实验室里,一个小组发现处理器的总线以相反的顺序连接到设计上,或者处理器无法从低功耗模式再次通电。

硬件/软件逐步改进

一个显而易见的解决方案,当然,是在传统的验证过程中围绕硬件/软件边界进行更多的验证。金宝博滚球专家然而,我们不能从以硬件为中心的验证跳到试图运行完整的应用程序堆栈。由于尝试执行大量软件而导致的复杂性和大量调试日志,金宝博滚球专家追踪简单的错误变得非常复杂。

一种有效的方法是在最简单的验证环境中验证我们所能做的一切,该环境合理地允许我们执行目标功能,能见度最高,并且活动最少,与测试意图无关。在本文中,我们将看到一个涉及寄存器访问验证的简单示例。验证一个IP的寄存器是否能被处理器正确地写入和读取是一个关键的集成验证任务。即使是简单的SOC也包含数百个寄存器,创建测试来验证处理器是否可以读写每一个测试都是耗时的。

图1显示了一个带有闪存和DDR内存的简单SOC,一个紧密耦合的内存,以及UART和DMA引擎,其寄存器通过低速外围总线访问。

图像
图1。简单SOC

虽然我们最终需要验证处理器上运行的代码是否可以访问IP寄存器,我们可以从基于uvm的验证开始,将验证任务稍微集中一点。当在嵌入式处理器上安装软件时,首先验证uvm中的内存子系统会给我们带来更多的信心。金宝博滚球专家使用Mentor的Questa®infact便携式刺激工具,我们可以将相同的测试意图重新定位到一个uvm和嵌入式软件环境中,节省测试开发时间。

用图形描述寄存器

Questa®infact使用基于声明性图形的输入描述,它提供了约束编程的能力,并增加了以迭代方式指定决策的能力。当指定访问寄存器的约束时,这种迭代决策的能力非常有用。

我们首先捕获内存测试操作的核心属性:地址,访问大小,写入数据,还有一个书写面具。写掩码指定哪些位是读/写的,为了进行检查,必须忽略这一点。

图像
图2。核心寄存器访问结构

行动是要在目标验证环境中执行的行为单元。稍后,我们将看到更改body操作的实现如何允许我们轻松地将寄存器访问测试意图重新定位到uvm和嵌入式软件环境中。金宝博滚球专家

图2所示的寄存器访问描述符不包含系统中IP的任何细节。接下来我们需要在中添加这些限制。我们的DMA引擎(wishbone dma core from opencore.org)有一组核心寄存器,然后是一个通道描述符寄存器数组。使用基于图形的描述,我们可以迭代地描述寄存器地址。

图3中的图形描述显示了选择DMA寄存器地址的过程:

  • 选择核心寄存器或通道控制寄存器阵列(dma_reg)
  • 如果选择了通道控制寄存器
    • 选择哪个频道(dma_ch)
    • 选择目标是哪个通道寄存器(dma_ch_reg)
图像
图3。DMA寄存器地址选择
图像
图4。DMA寄存器地址选择规则

图4显示了这个过程的文本描述。

有,当然,用于指定寄存器地址和写入掩码的更详细的约束,这些约束在图5所示的约束中进行了编码。请注意,此约束标记为“动态”,这意味着它只在图形中激活一次——在这种情况下,一旦我们决定访问一个DMA寄存器。虽然这些约束是手工创建的,它们也可以由机器可读的寄存器描述生成,如IP-Xact,系统RDL等。

图像
图5。DMA寄存器地址选择约束

一旦我们集成了DMA,UART以及寄存器访问图的TCM部分,我们得出图6所示的图表。我们可以把它看作一个流程图:首先,我们决定访问哪个IP,然后根据选定的IP和具体的选择进行图形分支。例如,最左边的图分支包含特定于DMA的决策。

图像
图6。简单的SOC寄存器访问图

映射到UVM环境

到目前为止,我们创建的注册访问测试的描述独立于任何验证环境。现在,我们需要提供一些粘合逻辑来将测试图连接到子系统级验证环境中。

在我们的uvm子系统级环境中,我们已经用总线功能模型(BFM)替换了处理器的RTL模型,以便通过互连访问寄存器。我们的寄存器测试图封装在一个uvm虚拟序列中,该序列将通过bfm访问寄存器。

图像
图8。子系统级验证环境

我们的基本“CPU”虚拟序列通过一个支持各种大小的读写的类API提供对BFM的访问。我们添加了一个执行写入的特定“memcheck”序列,读回,在“做记忆检查”任务中检查,如图9所示。

图像
图9。uvm做memcheck任务

将寄存器测试图连接到虚拟序列中的do-memcheck任务所需的映射信息收集在一个文件中——本例中是target.rseg。映射信息如图10所示。

映射信息指定:

  • 我们的图应该封装在一个类中,OR1K内存检查
  • 我们应该使用Or1KyMeMebug类来表示OR1K_Soc_Regacc结构在UVM环境中
  • 二次检验当“body”操作在第二节执行
图像
图10。UVM序列目标映射

只有这几行代码,我们现在可以在我们的uvm环境中运行注册测试图。这允许我们验证寄存器连接的基础,并使用我们的标准uvm和systemverilog调试工具调试任何问题。

映射到嵌入式软件

但是,当然,验证我们的bfm是否可以访问寄存器内存,并不能最终确保处理器能够访问。因此,在处理器上作为嵌入式软件运行寄存器访问测试仍然很重要。金宝博滚球专家以最简单的形式,这个完整的SOC验证环境可能如图11所示。

图像
图11。金宝博滚球专家软件驱动的验证环境

在这种情况下,我们将创建一系列用“c”编写的测试,这些测试使用处理器来写回和读取寄存器。我们的测试将使用do_memcheck函数来执行实际的写入,读回,并检查。此函数如图12所示。

图像
图12。嵌入式软件Do-M金宝博滚球专家emcheck功能

就像UVM环境一样,我们需要指定图形如何映射到嵌入式软件环境。金宝博滚球专家映射信息如图13所示。

图像
图13。嵌入式软件映射金宝博滚球专家

映射信息指定以下内容:

  • 头文件OR 1KyMeMeq.h必须包括在内。此文件声明二次检验功能
  • 功能二次检验必须在每次执行Body操作时调用,传递addr的值,尺寸,,WRY数据,,WRE掩膜领域

生成C-测试

因为我们已经描述了要执行的基于图的寄存器测试模型,我们现在在如何生成特定的测试集方面有很大的灵活性。图14显示了一个生成测试的示例。在这种情况下,我们允许infact攻击所有三个IP,但是通过图表将测试限制为仅5次迭代。

图像
图14。寄存器测试示例

正如你所看到的,生成的测试是一个定向测试,在生成过程中由infact填充随机值。虽然每次运行此特定测试时都会执行相同的操作,通过在每次回归运行时用不同的种子重新生成测试,我们可以在回归运行中实现更多的随机性。

为了实现前面描述的寄存器访问目标的覆盖范围,我们需要生成更具体的测试。因为所有这些测试都是从一个声明性模型生成的,很容易简单地将选项更改为测试生成程序,以便在运行多个测试之间切换,每个测试都调用几个二次检验每个测试运行几个测试,每个测试对二次检验每次测试。调整目标覆盖目标也很容易,例如,生成一系列只关注DMA寄存器测试的测试。

总结

在剩下的设计中,采用逐步验证嵌入式处理器和IP之间交互的方法,在验证过程中发现最容易调试和更正的错误时,可以提前发现这些错误,从而节省时间。便携式刺激允许从一次描述的测试意图中生成高质量的测试,并重新定位到多个环境。这解决了采取逐步方法的主要挑战,这是在多个地方执行测试意图的重复工作量,以及使用低生产率定向测试创建嵌入式软件测试的需要。金宝博滚球专家在本文中,我们已经看到了测试访问SOC寄存器的意图的单一描述,作为SoC集成测试的一部分,可以很容易地针对uvm和嵌入式软件环境。金宝博滚球专家我们已经看到了如何用Mentor的Questa®infact便携式刺激工具描述和针对特定环境的测试意图。

下次开始计划SOC集成测试时,考虑一下便携式刺激和逐步测试方法如何有利于您的验证过程!!

闲聊γ 接触