如何利用软件作为激励来加速SoC系统级验证?

如何利用软件作为激励来加速SoC系统级验证?,第1张

  验证复杂的SoC设计要耗费极大的成本和时间。据证实,验证一个设计所需的时间会随着设计大小的增加而成倍增加。在过去的几年中,出现了很多的技术和工具,使验证工程师可以用它们来处理这类问题。但是,这些技术中很多基于动态仿真,并依靠电路 *** 作来发现设计问题,因此设计者仍面临为设计创建激励的问题。

  在仿真环境中能够更快速地执行代码主要有两个好处。首先,快速仿真意味着功能验证仿真可以使用更多的代码。诊断程序、驱动程序、固件以及某些情况下部分应用程序代码都可用于验证问题。其次,因为仿真运行速度加快,因此能够执行更多的验证。很多设计者会选择运行附加测试,而不是运行较少的CPU仿真时间。大多数验证都受到能够用于运行仿真的CPU时间的限制。如果固件用来作为验证的一部分,它将对设计起推动作用。这个激励将是切合实际的,它通过典型的 *** 作使设计得到测试。为设计创建激励的挑战之一是如何估算出典型的设计 *** 作,并将其在测试平台上编码。使用实际的软件可为验证工程师排除这个问题。但是,运行作为测试平台的代码不可能提供大量激励,特别是不能覆盖大部分验证空间。因此,设计者需要使用其它的技术提供额外激励,以遍历设计的所有边界情况。

  设计者使用传统的直接测试和其它验证技术能够增加用固件作激励源的情况。内存分区可用于过滤仿真过程中不必要的总线周期,从而提高性能。本文将介绍一个设计实例,使用作为激励的代码和基于断言的验证,通过该实例来描述使用传统验证技术无法发现的设计错误。

  解决验证挑战

  目前,电子工程师面临的验证挑战不断加剧。为了更好地阐明这些挑战,本文中介绍了一个简单的实例。该实例是一个在250×250像素矩阵上显示RGB数值的图形输出设备。它包括一个映射到处理器的寄存器接口。相关寄存器有:“行”—包含待描绘像素行地址信息的一个8位寄存器:“列”—包含待描绘像素列地址信息的一个8位寄存器:“像素”:——包含待描绘像素RGB值的一个8位寄存器:“大小”——包含待描绘像素矩形大小的一个8位寄存器(其中1表示写入单个像素,2表示描绘一个2×2的正方形,以此类推最大值为16):“状态”——能够读取和返回设备状态信息的一个8位寄存器。

  使用直接测试

  验证此样本设备的第一步是测试所有行和列是否正确定址。要测试所有大小的像素是否能够被写入,还要测试不同颜色值的代表样点。典型的像素组合也要被测试,如从右上方像素立刻变换为左下方像素。使用类似的方法可测试所有角对组合。还应该测试各种组合中有序和无序增减的行地址和列地址。所有这些测试可以通过编写和编译一个运行在全功能处理器模型上的简单程序来完成,或者使用一个产生总线周期和BFM的简单测试平台。另外还要考虑测试那些可能影响设计的异常条件。测试时可将行地址或列地址设置为一个大于249的值,或是定义一个大小超过硬件支持的像素。

  这些都是在接口级完成的明显测试,在内部结构进行的类似验证测试和在接口级实现的验证策略是很类似的。显然,要测试整个验证空间,即使只是一个设计模块的接口,也不可能像前述的样本设备一样简单。可能的 *** 作是250行×250列×224色×16大小,或16.7×1016.所有 *** 作的组合数是这个数值的平方,或大于1034.这里真正的挑战是创建那些能够揭露设计问题的组合,并将这些问题标识为需要立刻关注的区方面。

  使用断言揭露早期问题

  由于对设计驱动了激励,因此断言可以及早发现问题。要添加的断言包括不能超过249(行地址和列地址的最大可能值)的行地址和列地址,以及不能超过16的大小字段。确定断言并采用HDL覆盖分析后,需要对设计驱动激励。这可以通过约束随机测试实现。约束随机测试产生反馈到测试平台的设备处理事务,表明被识别的测试点已被覆盖。如果设计空间非常大,约束随机测试就不能包含测试点没有覆盖的边界条件。这种测试不用创建使用HDL覆盖工具达到100%覆盖的激励。但是,在设计中遍历所有状态并覆盖所有条件并不能保证设备被完全验证。

  软件代码作为激励

  对于一个超过1034个组合的验证空间来说,让实际的设备 *** 作执行所有必需组合是不太可能的。应当把重点放在设备会运行的那些 *** 作上,对那些理论上可能不会使用的 *** 作要减少花费时间。最简单快捷的方法是找到可驱动设备的现有代码。这可能是诊断代码,驱动程序代码或应用程序级算法。每个这样的代码均提供了不同的验证级别,并揭露了不同类型的问题,因此,应当尝试获得和使用所有类型的代码。

  对于新的设计,代码很可能不存在,但对于下一代产品的设计,一些代码常常可以得到。如果这些代码存在,设计的激励在几乎不耗费精力或成本的情况下就可以得到。如果代码不存在,但合作方愿意在设计周期前期创建代码,那么也可以轻松地创建激励。最后,如果验证团队需要创建代码,通过编写C代码来为设计创建复杂多样的激励比使用任何其它语言都更容易。

  假设显示

  使用假设显示,需要运行描绘各种测试模式和色彩组合的诊断代码以确保连接。也可以运行驱动程序代码,它可以连接至一个简单的画图应用程序,该应用程序可使用一些代表样本的像素将驱动程序调整至适当位置。最后,采用最终使用这个设备的应用程序,并画出几幅图像。每种类型的代码会以不同的方式运用设计,从而能发现利用其他方法时不容易检测到的问题。

  硬件/软件协同验证

  很多硬件和验证工程师(甚至在某些方面软件工程师)认为,运行应用程序的任何部分不会加快设计验证。毕竟,如果针对设备测试驱动程序,并针对驱动程序测试了应用程序,就无需进行进一步验证。但是这些工程师不会考虑在尚未系统地测试所有软件的情况下发布产品,也不会接受在未经系统测试的情况下发布要去tapeou的硬件设计。系统级协同验证测试全部的可选组件,包括硬件、软件、或两者的组合,从而揭露在分离情况下不会被发现的问题。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2458315.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-04
下一篇 2022-08-04

发表评论

登录后才能评论

评论列表(0条)

保存