利用软件作为激励来加速SoC系统级验证
试不用创建使用HDL覆盖工具达到100%覆盖的激励。但是,在设计中遍历所有状态并覆盖所有条件并不能保证设备被完全验证。
软件代码作为激励
对于一个超过1034个组合的验证空间来说,让实际的设备操作执行所有必需组合是不太可能的。应当把重点放在设备会运行的那些操作上,对那些理论上可能不会使用的操作要减少花费时间。最简单快捷的方法是找到可驱动设备的现有代码。这可能是诊断代码,驱动程序代码或应用程序级算法。每个这样的代码均提供了不同的验证级别,并揭露了不同类型的问题,因此,应当尝试获得和使用所有类型的代码。
对于新的设计,代码很可能不存在,但对于下一代产品的设计,一些代码常常可以得到。如果这些代码存在,设计的激励在几乎不耗费精力或成本的情况下就可以得到。如果代码不存在,但合作方愿意在设计周期前期创建代码,那么也可以轻松地创建激励。最后,如果验证团队需要创建代码,通过编写C代码来为设计创建复杂多样的激励比使用任何其它语言都更容易。
假设显示
使用假设显示,需要运行描绘各种测试模式和色彩组合的诊断代码以确保连接。也可以运行驱动程序代码,它可以连接至一个简单的画图应用程序,该应用程序可使用一些代表样本的像素将驱动程序调整至适当位置。最后,采用最终使用这个设备的应用程序,并画出几幅图像。每种类型的代码会以不同的方式运用设计,从而能发现利用其他方法时不容易检测到的问题。
验证复杂的SoC设计要耗费极大的成本和时间。据证实,验证一个设计所需的时间会随着设计大小的增加而成倍增加。在过去的几年中,出现了很多的技术和工具,使验证工程师可以用它们来处理这类问题。但是,这些技术中很多基于动态仿真,并依靠电路操作来发现设计问题,因此设计者仍面临为设计创建激励的问题。
设计者可以使用运行在处理器上的固件作为验证仿真激励的一部分,这也是目前通常采用的方法——使用全功能处理器模型。与在HDL中编写激励相比,固件作为激励速度更快,并且更容易创建。在一个全功能处理器模型上执行代码的缺点是模型运行较慢,因此只有少量软件会使用这个技术执行。很多固件执行由取指令操作和内存读写周期组成,验证价值很低。在逻辑仿真器中屏蔽这些低价值操作,而继续执行寄存器和内存映射I/O周期,可以在最低限度减少验证覆盖率的同时,显著提高执行速度。
在仿真环境中能够更快速地执行代码主要有两个好处。首先,快速仿真意味着功能验证仿真可以使用更多的代码。诊断程序、驱动程序、固件以及某些情况下部分应用程序代码都可用于验证问题。其次,因为仿真运行速度加快,因此能够执行更多的验证。很多设计者会选择运行附加测试,而不是运行较少的CPU仿真时间。大多数验证都受到能够用于运行仿真的CPU时间的限制。如果固件用来作为验证的一部分,它将对设计起推动作用。这个激励将是切合实际的,它通过典型的操作使设计得到测试。为设计创建激励的挑战之一是如何估算出典型的设计操作,并将其在测试平台上编码。使用实际的软件可为验证工程师排除这个问题。但是,运行作为测试平台的代码不可能提供大量激励,特别是不能覆盖大部分验证空间。因此,设计者需要使用其它的技术提供额外激励,以遍历设计的所有边界情况。
设计者使用传统的直接测试和其它验证技术能够增加用固件作激励源的情况。内存分区可用于过滤仿真过程中不必要的总线周期,从而提高性能。本文将介绍一个设计实例,使用作为激励的代码和基于断言的验证,通过该实例来描述使用传统验证技术无法发现的设计错误。
解决验证挑战
目前,电子工程师面临的验证挑战不断加剧。为了更好地阐明这些挑战,本文中介绍了一个简单的实例。该实例是一个在250×250像素矩阵上显示RGB数值的图形输出设备。它包括一个映射到处理器的寄存器接口。相关寄存器有:"行"—包含待描绘像素行地址信息的一个8位寄存器:"列"—包含待描绘像素列地址信息的一个8位寄存器:"像素":——包含待描绘像素RGB值的一个8位寄存器:"大小"——包含待描绘像素矩形大小的一个8位寄存器(其中1表示写入单个像素,2表示描绘一个2×2的正方形,以此类推最大值为16):"状态"——能够读取和返回设备状态信息的一个8位寄存器。
使用直接测试
验证此样本设备的第一步是测试所有行和列是否正确定址。要测试所有大小的像素是否能够被写入,还要测试不同颜色值的代表样点。典型的像素组合也要
- 单片机系统设计与C51编程实践(04-23)
- 荒岛设计:不用软件也能搭接带隙电路(11-23)
- 高分辨率数字电位器的软件实现(01-26)
- 单片机应用中从Excel软件提取字模的方法(01-27)
- Qt/Embedded的/蓄电池状态检测控制软件设计(09-21)
- 力控组态软件在光伏发电系统中的应用(02-24)