IP软核测试策略及验证方案研究

时间:2022-07-10 03:02:50

IP软核测试策略及验证方案研究

摘要 近年来,芯片的设计不断向着功能增强和集成度提高的方向发展,SoC(System on Chip, 片上系统)开发模式逐渐成为主流,芯片性能增强、规模增大以及产品设计的周期缩短使得设计难度逐渐增加。在此情况下,IP软核应运而生,至 2005年基于IP核设计的集成电路已经占总设计的80%,IP核成为SoC开发的主流途径已势不可挡。

IP(Intellectual Property)核,也称集成电路知识产权核。指ASIC、PLD等当中预先设计好的电路功能模块,它灵活性大,具有良好复用性与可移植性,接口灵活。本项目即选择单片机芯片中具有代表性的1750 IP软核作为研究对象。

为确保IP软核的可靠性,对IP软核进行系统验证具有十分深远而重要的意义。本文根据IP软核的特点与现状,总结IP软核的验证方法,分析IP软核的验证策略,提出完整的1750IP软核验证方法。并采用脚本验证与自动日志比对的方法以提高验证效率。

关键词 IP软核;指令测试;仿真;验证系统

中图分类号TP311 文献标识码A 文章编号 1674-6708(2011)55-0200-02

1 概述

某16位CPU是一款实现了全部1750指令集的单芯片处理器,该处理器实现了所有必要的指令并增加了 多可选择的特色功能,还支持中断、故障处理、存储器扩展、控制台、定时器以及一些相关的可选指令。

为保证被测试芯片的可靠性与安全性、保证后续设计,验证测试系统极为重要。本文介绍了1750软核仿真测试的过程,基本原理和测试策略。

对于指令分析和测试,将所有指令分为12个不同的验证类别,对每一类指令进行针对性验证,并且保证完备性。本项目的测试计划按照指令、数据、环境参数三项因素的交叉组合来设计测试方案,具体分为对指令不同操作数的测试、不同寄存器的测试和指令异常情况的测试。

测试结果分析表明测试能够完备覆盖到指令的各种情况,测试用例的覆盖率基本上能够达到100%。

2 测试策略

2.1 总体测试策略

一般测试策略包括自顶向下测试、自底向上测试及增量测试等,本项目是一款全新的设计,而且设计方法也是基于自底向上的,所以综合个方面因素选用自底向上的测试策略,通过在底层模块执行完全测试开始,当达到一个适当的满意度后,将这些模块集成为更大的模块进行新一轮测试,迭代进行直到完整的系统集成完成。

测试系统按实现方式分为仿真测试,形式测试及物理测试,由于软核测试的目的在于保证IP软核功能和时序的正确性,故采用仿真测试的方法。在仿真软件的支持下,在设计结果的输入端施加多组测试矢量信号,计算得到中间结果和输出结果。再对这些结果进行分析和对比,从而得出结论。

另外,IP软核测试分为功能和时序的测试以及电路测试两个阶段。而功能和时序测试的方法可以分为黑盒、灰盒和白盒3种形式。即使提供源代码,了解IP软核细节的白盒测试系统对使用者来说难度仍然大,也不实际。而加密形式的IP软核,只能检测到IP软核的信号和寄存器,就只能用黑盒的方式测试。

2.2 模块级测试与系统级测试

IP软核测试策略与被测模块的功能和实现方式有关。本项目将IP软核测试策略分为模块级的直接测试和系统级的软硬件协同测试。模块级的直接测试采用直接施加激励的形式,适合于测试功能相对简单的模块。图1为模块级直接测试的形式框图。

直接测试即直接对IP软核模块的输入端施加激励,并将输出端响应通过比较模型判断结果,该比较可以是人工手动判断形式,也可是自动与理想模型对比,自动产生差异文件的形式。

由于SOC设计中包含一定的软件设计,因此系统测试需要软硬件协同测试,该测试主要测试软件能否在期望的硬件电路上正确运行。将编译后的测试用目标代码通过存储控制器读入并由CPU执行,从而产生期望的系统行为。

2.3 测试模型和软件环境

1750 IP软核的仿真验证、综合与实现主要是靠EDA工具来完成的。本文采ModelSim 6.5软件,是由Model Tech公司开发的目前业界最通用的仿真器之一,支持Verilog HDL和VHDL混合仿真。

比较模型采用GCC编译器和模拟器,模拟器提供了类似于UNIX标准I/O 库(stdio)的支持,程序中可以直接调用标准的printf类函数,为程序的调试带来极大方便。标准输入是由模拟器生成的,采用逐条指令比较的方法,每条指令执行完成后内存、各个寄存器和状态字会发生改变,在文本中暂时记录下来,并在另一个文本中读取模拟器执行完的状态,将两者相比对,如果不一致则记录相应的指令代码、指令助记符和指令的地址,并在diff.txt文件中输出,接着比较下一条,以此类推直到验证完所有指令。

3 测试方案设计与分析

3.1 指令测试方案设计

首先将所有指令分为12个不同的验证类别(数据传送、算术逻辑运算、位操作、跳转、移位操作、比较操作、出栈和入栈操作、空操作、断点操作、浮点、IO指令、控制台指令,分属于8个类别13种寻址方式。

制定测试方案所需考虑的一个关键问题是保证测试的完备性。本项目的测方案按照指令、数据、环境参数三项因素的交叉组合来设计。

首先选用不同的数据进行测试,考察指令和各个功能块对数据变化的响应能力。以移位指令为例,当设计存在问题时,指令执行结果仍有可能正确,尤其是对一些特殊数的计算,通常的调试是无法做到的,而这些区域恰好又易出错,所以必须专门测试。此外,人为选择的数据一般达不到完备性要求。因此用随机生成数作为操作数,只要随机的次数足够就可以排除某些规律性错误。另可以用规律变化的数据对所有数据进行遍历,用特殊数(0x0000、0xFFFF等)测试特殊数据的操作能力。

其次在编写测试用例时使用到了所有的寄存器,不仅可以测试指令执行的结果是否正确,还可以测试所有的寄存器是否能够正常工作。

芯片具有异常情况处理的特性。针对它的内部特性需要进行异常情况的测试有,包括:非法指令的测试、死循环的测试、非法地址的测试等。

中断行为是芯片功能的重要组成部分,对中断行为的测试主要包括:外部中断测试、内部中断测试以及中断处理程序测试。外部中断测试主要通过对软核给予各种激励,观察是否将各中断对应的PI(Pending Interrupt,中断悬挂)位置位;内部中断测试主要通过执行测试脚本,输出结果的日志,然后通过观察输出没有正确产生中断的指令;中断处理测试是将中断向量与中断处理程序写入内存,通过对特殊寄存器的读写来反馈是否正确的进入中断处理程序,是否正确返回测试点进行波形观察。

对于其他非置PI的指令,采用脚本随机测试。将运行结果与模拟器运行结果进行比对,以保证不应该产生中断的指令不会错误地产生中断。

中断测试的第一部分进行PI置位测试,即对于中断能否在正确的触发条件与时刻置PI中正确位;第二部分进行中断处理跳转与返回测试,即PI某位被置位后,软核能否正确进入对应的中断处理程序,保存并替换当前IC寄存器值、中断优先级向量,SW寄存器的值,跳转至正确地址执行,执行完成能否正确返回原地址。

3.2 指令测试方案分析

激励的产生主要采用以下三种策略:随机测试,直接测试以及应用程序测试。

随机测试:为了加强测试强度,发现隐藏的设计错误,开发自动伪随机测试程序生成器,对于每条指令以及不同的指令组合进行伪随机测试。过程为首先产生指令序列,内存中除去代码部分,其余单元由随机数序列初始化;其次分别由仿真软核和模拟器执行,并分别记录指令执行的状态;最后比较上述两者差别,给出报告。该方式测试数据量将会非常大,所以同时要开发比较对应的自动结果检测模块。自动测试系统具有可回归测试、工作量小、资源利用率高、可重用性高的优点。但它并不能取代人工测试,只是一种反复运行的工具,需要再配合以人工测试,包括直接测试和应用程序测试。

随机测试的测试向量主要是由自动化测试系统随机生成的,根据指令生成的生成方式能够确定生成的指令必定包含指令集的每种寻址方式,但是生成的指令不能保证完全覆盖指令的各种情况,因此按照汇编指令中的助记符类型不同尝试将要替换的符号设置为合适的个数,本指令系统采用的是16位的状态字寄存器,除了RX的取值为15种,BR的取值为4种之外,其他符号均取值为16个随机数。以异或指令为例,现在RA寄存器和RB寄存器的取值格式为16个,那么生成异或的测试用例为256条,试验表明,这时候异或指令的各种情况是完全覆盖的。

直接测试针对特定的一个或者一些功能测试。如运算指令中的符号扩展、溢出等边界情况以及跳转及复杂的跳转嵌套等,需要针对性手动编写大量汇编代码,用于测试指令的边界情况。MIL-STD-1750A中主要是针对运算指令的边界情况和不同标志位情况,以及流水线冲突处理的多指令组合序列的定向测试,使得测试更加全面,覆盖率更高,并且可以观察到指令的执行过程。

应用程序测试是根据待测试MIL-STD-1750A的典型系统应用,选取常用程序来进行仿真,以此来保证测试的完备性。项目主要选用一些典型的C语言程序进行测试。包括循环算术计算、递归方式求阶乘、全排列、快速排序、随机抽样、素数输出等常用程序来进行仿真。

经过试验的统计分析,我们发现在这三种激励生成方式的共同作用下,我们的测试用例是能完全覆盖到指令的各种情况的,并且能保证效率。该方法能够有效提高测试效率和覆盖率,缩短测试的周期。

综上,我们采用的激励生成策略和测试向量策略能够非常完备的覆盖到指令的各种情况,测试用例的覆盖率基本上能够达到100%。

4 结果分析

我们将MIL-STD-1750A指令集按照第4节中的分类进行了测试。对于数据流指令(包括算术逻辑运算指令和访存指令),采取手工编写激励直接测试和随机测试相结合的方法,手工编写的向量主要针对边界情况(如符号扩展,溢出等)进行测试,随机测试用来保证覆盖率和可靠性。对于控制流指令(跳转,子程序调用等),由于目前的伪随机测试指令生成器还不能完全兼容这部分指令,主要采取手工编写激励直接测试。

实际的验证结果表明,大部分错误都是在手动直接测试部分发现的,不过随机测试部分对覆盖率的补充作用很明显,在进行测试的时候主要发现了存储器间多字传送、减1并转移、多寄存器入栈、比较指令、移位指令、扩展精度浮点数加载指令、浮点数运算指令、IO指令的错误。

并且在回归测试当中这些错误均已得到改正,测试结束后,所有指令和中断行为的测试结果都是正确的。

5 结论

本文的主要研究内容是根据IP验证技术的现状,总结IP软核的验证系统,分析IP软核验证策略;完成对1750 IP软核的指令验证并得出验证结果。并对1750包括中断指令、XIO/VIO指令、控制台指令在内的全部指令设计了完整的验证方法,给推广复用自动化验证留下了宝贵的经验与供参考的资料。但也存在自动验证脚本运行效率较低和主要针对单条指令,生成某一个特定的指令序列的能力不够的问题。

参考文献

[1]张振军.微处理器功能验证自动化方法的研究和实现[D].上海:上海交通大学,2008.

[2]王健健. 80C51 IP软核测试与应用技术研究[D].北京:北京交通大学,2007.

[3]陆思安,余龙理,陈必龙,等.面向系统芯片的验证策略[J].微电子学,2002(4):265-268.

[4]何叶东.IP芯核设计和验证的研究[DB/OL].万方数据库.

[5]王晓红,王旭,王雷,金茂忠.指令集仿真器自动生成技术的研究[J].计算机工程与应用,2003(2):129-131.

[6]刘方海,王晓蕾,奕铭.测试自动化在MCU设计中的应用[J].微电子学与计算机,2001,4:12-14.

上一篇:高速旋杯式自动静电喷涂系统雾化器固化的预防... 下一篇:干法制粒机液压系统的改进