基于对FPGA系统失效机理的深入分析,提出了软件测试技术在FPGA测试中的应用,并分析了其可行性;通过对比FPGA与软件系统的异同,归纳出FPGA特有的测试要求,从而在软件测试技术的基础上针对FPGA的特点进行改进,形成了一套实用的FPGA测试方法。
现场可编程门阵列(FPGA)的出现大大压缩了电子产品研发的周期和成本,由于FPGA器件具有高密度、低功耗、高速、高可靠性等优点,在航空、航天、通信、工业控制等方面得到了大量应用。随着FPGA应用领域的扩展以及重要性和复杂程度的提高,其可靠性问题变得越来越突出,因此对FPGA系统的测试需求变得尤为迫切。
目前FPGA测试技术的研究主要集中于对FPGA芯片资源的测试,通过编程覆盖FPGA所有的逻辑资源[1,2]和连接资源,验证每个单元基本逻辑功能的正确性,而无法对电路的整体行为进行有效的验证。硬件描述语言(HDL)是FPGA电路设计的主要实现方式,和软件一样,HDL也是人脑思维的逻辑产物,同样存在着不希望或不可接受的人为错误。随着设计复杂程度的提高,由HDL引入的缺陷成为影响FPGA可靠运行的关键因素,对FPGA电路行为的测试成为提高系统质量和可靠性的重要环节。
MIN Y.H.提出了在FPGA系统中进行高层测试的必要性。高层测试即任何高于门级的测试,考虑的是高层描述,如HDL、状态图、功能块图等,通过高层测试发现设计中的缺陷,并在系统的开发阶段充分考虑测试需求,指导系统设计。以此为基础,先后提出了一系列具体的实施方法,如层次化的测试方法、基于电路功能或结构的测试方法、基于模拟的测试方法等。
1 研究背景
1.1 软件测试技术概述
在IEEE的软件工程标准术语中,软件测试定义为使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或找出预期结果与实际结果之间的差别。
按照测试级别,软件测试包括单元测试、部件测试、配置项测试、系统测试等;按照测试方法,软件测试可分为动态测试和静态测试,动态测试又可分为黑盒测试和白盒测试。静态测试包括了代码审查、静态分析、代码走查等测试类型;动态测试包括逻辑测试、功能测试、性能测试、接口测试等测试类型。白盒测试通常采用以逻辑覆盖衡量的结构性测试技术;黑盒测试通常采用包括功能分解、等价类划分、边界值分析等在内的功能性测试技术。
1.2 FPGA系统的特点
FPGA作为可编程逻辑器件,通过编程的方式(如HDL)将通用芯片配置成用户需要的硬件数字电路,FPGA和软件系统具有相似的结构和开发方式,HDL与软件都是人脑思维逻辑的产物,具有相似的语法和失效机理。因此,将软件测试的成熟技术用于FPGA测试,在理论和操作上均具有可行性。
但是,由于软硬件系统本质上的不同,FPGA和软件系统在测试要求上存在一定的差异,表1从开发方式、代码执行顺序、受硬件影响程度、执行结果的随机性以及应用领域等方面,归纳了FPGA和软件系统的不同之处。
2 FPGA特有测试要求
针对FPGA和软件系统的差异,存在不同于软件测试特有的测试要求,包括HDL代码检测要求、测试级别要求和时序测试用例设计要求等。
2.1 HDL代码检测要求
由于HDL代码并行执行并存在硬件环境的影响以及竞争、冒险等不确定结果,在白盒测试中具有不同于软件测试的要求。一方面,不同于软件的控制流和数据流,并行程序的时序和信号流是一对相互依存的信息,程序的逻辑状态由二者共同确定。这就要求在测试中,既要依据信号流图对组合逻辑进行验证,还要依据时序图分析时变信号的时序一致性。另一方面,硬件特征对运行结果的影响也是代码检测中需要考虑的因素。在编码规范的制定上,应当充分考虑并行程序的特点,正确处理与硬件资源之间的关系,避免竞争、冒险等不确定结果的产生。
2.2 测试级别的要求
与传统自底向上的电子设计技术不同,FPGA采用与软件开发相同的自顶向下的设计方法。一个项目的开发过程,从系统的分解、RTL模型的建立、门级模型的产生,到最终的可以物理布线实现的底层电路,是一个从高抽象级别到低抽象级别的开发周期。在开发过程中,需要在每一阶段分别进行行为仿真、功能仿真、门级时序仿真等仿真验证,而在测试阶段需要自底向上依次从门级、元件功能级到系统行为级进行测试。
2.3 时序测试用例设计要求
FPGA的并行运算和高响应速度的特性,使其在对高速时序逻辑的处理中得到广泛应用。因此对FPGA系统功能、性能的测试中,不能仅仅局限于对稳态输入输出的验证,还需要验证系统对时序信号的响应及输出量随时间变化正确性的判断。因此在测试用例的设计中,需要对系统输入、输出的时间变化趋势进行规定,并提供动态输出信号的判断准则,同时需要开发时序测试环境支持测试用例的执行。
3 FPGA测试技术框架
3.1 测试级别
把抽象的实体结合成单个或统一实体的过程称为综合,FPGA系统的每一步开发过程都可以称为一个综合环节,即将自然语言表示经过自然语言综合转换为HDL算法表示,再通过行为综合转换在寄存器传输(RTL)级,进一步通过逻辑综合转换为逻辑门的表示,最终通过结构综合转换为版图表示。对于每一个综合环节,都对应响应的测试级别,FPGA测试的“V”模型如图1所示。
与软件测试一样,在FPGA的开发阶段,测试就扮演着验证和确认的角色。但不同的是,FPGA的每一个综合环节的输出结果都是一种对设计的形式化表示方法,不但可以通过静态的方法检查验证,而且有强大的仿真工具能够支持在开发阶段对各个综合环节进行动态仿真验证,这样更有利于尽早发现缺陷,减少缺陷修改的成本。
而在测试阶段,在真实环境下,自底向上依次进行门级、单元级、元件级和系统级测试,以分别对门级模型、RTL模型、行为模型和系统需求进行验证。
(1)门级测试:验证基本逻辑门的正确性。
(2)单元测试:FPGA的单元包括并行代码块,以及顺序代码中进程、函数和过程。在这一级别的测试中,对RTL模型规定的各单元功能、逻辑、接口等逐项进行测试。
(3)元件测试:在FPGA开发中,将具有一定功能和接口的电路封装成的可复用单元称为元件(component),通过对元件的例化和连接构成具有更复杂功能的元件,直到构成整个系统。在元件测试中,通过元件的输入输出接口,对元件的行为进行验证。元件测试包括对元件集成的测试,从对最底层元件测试开始,是一个自底向上逐层集成的过程。
(4)系统测试:针对完整的FPGA系统的测试,验证FPGA系统对规定的功能、性能等需求的满足性。
在FPGA系统开发过程中,逻辑综合和结构综合过程基本通过综合工具由计算机自动完成,开发者主要是依据仿真结果进行修改与优化;而在自然语言综合和行为综合中,需要大量的人工介入,是缺陷引入的主要环节,也是FPGA测试的重点。
3.2 测试类型
与软件测试相同,FPGA测试可分为静态测试和动态测试。静态测试包括文档审查、代码审查、静态分析、代码走查等类型。在代码审查中,除了进行软件测试的相关检查项外,还包括检查代码运行时序的正确性、代码的鲁棒性和代码的可综合性。而在代码走查中,需要沿程序的时序和信号流两个相关维度,验证代码的动态执行情况。
动态测试不但沿用软件测试中一般采用的逻辑测试、功能测试、性能测试、接口测试、强度测试、余量测试、安全性测试、恢复性测试、边界测试、数据处理测试等,还包含FPGA系统特有的下载与配置测试、鲁棒性测试等。
(1)下载与配置测试:测试系统是否能够正确实现程序的下载和芯片的配置。一般需要进行不同目标芯片和编程方式的下载与配置测试,对可重构FPGA系统重构能力的测试。
(2)鲁棒性测试:验证系统能否避免干扰和冲突得到稳定而可靠的输出测试,一般需要测试输出电平的稳定性、输出逻辑的确定性及系统抗电磁干扰的能力。
3.3 测试方法与测试环境
白盒测试和黑盒测试是软件测试中的两大方法,在FPGA测试中同样适用。除此之外,由于嵌入式逻辑分析仪的支持,使得灰盒测试在FPGA测试中具有很好的应用前景。
(1)白盒测试是结构性测试方法,根据代码的内部特征设计、选择测试用例。FPGA的白盒测试一般在仿真环境下进行,可分为代码仿真、门级仿真和时序仿真。代码仿真不考虑硬件特性,输出理想情况下源代码执行结果,具有直观、速度快的特点,可以在设计的最初阶段尽早发现问题;门级仿真是针对代码综合后生成的门级网表或是实现后生成的门级模型进行的仿真,可以检验综合或实现后对系统或模块功能的满足性。时序在门级仿真的基础上加入时延文件即时序仿真,时序仿真能够比较真实地反映逻辑的时延与功能,但对于逻辑量大的系统耗时较长。
(2)黑盒测试是一种功能性测试方法,只测试产品对功能、性能等需求的满足性,而不考虑产品的内部结构和处理过程。软件测试中的测试方法和测试环境可以对FPGA中的组合逻辑进行有效的测试。而对于时序逻辑,测试环境还包含了对动态输入、动态数据采集的支持,以及对采集数据的比较分析。在测试用例的设计中,规定系统输入、输出随时间变化的趋势,并对特殊的评价方法和通过准则进行定义。
(3)目前主流的FPGA开发工具都提供了嵌入式逻辑分析仪工具,使得灰盒测试成为了可能。嵌入式逻辑分析仪的原理是在FPGA真实运行环境内部,利用冗余的芯片资源,将预制的系统内部信号实时通过接口输出。这样就可以在软件真实运行中,监视软件内部的信号、变量和状态,避免了由于输入输出域信息丢失以及容错环节造成的代码缺陷无法暴露的问题,提高了FPGA代码的测试性[7]。
4 应用实例
以软件测试为基础的FPGA测试技术已经得到了成功的应用。对某数字调制解调系统进行了测试,该系统以Altera公司EP1C3T144芯片为宿主机,采用VHDL语言编写,实现了偏移四相相移键控(OQPSK)的调制、解调功能。 测试项目组对该系统在元件级、系统级进行了测试,包括静态分析、代码审查、逻辑测试、功能测试、性能测试、边界测试、鲁棒性测试、安全性测试等测试类型,其中:
(1)静态分析采用HDL Designer工具进行了编码规则检查,共分析出违反编码规则43处,其中2处存在代码问题,得到了正确的修改,25处影响了代码的可读性和维护性,提出改进建议,均进行了相应处理。
(2)代码审查发现代码问题4处,均为代码和设计文档不一致所造成,全部修改正确,并提出一处影响逻辑门资源使用效率的改进建议。
(3)元件测试采用Altera Modelsim工具在仿真环境下进行,共设计测试用例95个,全部执行通过。
(4)系统测试环境由任意波形发生器Agilent 33250A、逻辑分析仪Agilent 16902B和示波器Agilent MS09404构成动态测试环境,如图2所示,设计测试用例48个,其中33个规定了输入、输出信号的动态时序,测试用例全部执行通过。
经过测试以及相应的修改和回归,该FPGA系统代码质量和可靠性得到了提高,系统功能、性能得到了验证。
软件测试技术在FPGA测试中的成功应用,有效解决了FPGA系统的测试问题。通过测试,提高了硬件描述语言的编写质量和系统的可靠性,并对FPGA的电路行为进行了有效的验证。动态测试时序测试用例的自动生成,以及系统输出波形与预期的自动比较和判断,将成为未来进一步研究的重点。随着FPGA系统在各关键领域的进一步普及,以软件测试为基础的FPGA测试将具有更广阔的应用前景。 |