利用软件作为激励来加速SoC系统级验证
验证复杂的SoC设计要耗费极大的成本和时间。据证实,验证一个设计所需的时间会随着设计大小的增加而成倍增加。在过去的几年中,出现了很多的技术和工具,使验证工程师可以用它们来处理这类问题。但是,这些技术中很多基于动态仿真,并依靠电路操作来发现设计问题,因此设计者仍面临为设计创建激励的问题。
设计者可以使用运行在处理器上的固件作为验证仿真激励的一部分,这也是目前通常采用的方法——使用全功能处理器模型。与在HDL中编写激励相比,固件作为激励速度更快,并且更容易创建。在一个全功能处理器模型上执行代码的缺点是模型运行较慢,因此只有少量软件会使用这个技术执行。很多固件执行由取指令操作和内存读写周期组成,验证价值很低。在逻辑仿真器中屏蔽这些低价值操作,而继续执行寄存器和内存映射I/O周期,可以在最低限度减少验证覆盖率的同时,显著提高执行速度。
在仿真环境中能够更快速地执行代码主要有两个好处。首先,快速仿真意味着功能验证仿真可以使用更多的代码。诊断程序、驱动程序、固件以及某些情况下部分应用程序代码都可用于验证问题。其次,因为仿真运行速度加快,因此能够执行更多的验证。很多设计者会选择运行附加测试,而不是运行较少的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覆盖分析后,需要对设计驱动激励。这可以通过约束随机测试实现。约束随机测试产生反馈到测试平台的设备处理事务,表明被识别的测试点已被覆盖。如果设计空间非常大,约束随机测试就不能包含测试点没有覆盖的边界条件。这种测
- 单片机系统设计与C51编程实践(04-23)
- 荒岛设计:不用软件也能搭接带隙电路(11-23)
- 高分辨率数字电位器的软件实现(01-26)
- 单片机应用中从Excel软件提取字模的方法(01-27)
- Qt/Embedded的/蓄电池状态检测控制软件设计(09-21)
- 力控组态软件在光伏发电系统中的应用(02-24)