FPGA测试验证方案
发布人:上海迪真计算机科技有限公司       

FPGA软件测试方案

 

一.  FPGA软件测试现状及差距

1        测试业务简介

随着电子系统性能的稳步提高,以及半导体工艺的持续提升,促使了FPGA在电子系统中的应用越来越普及。但是,伴随而来的FPGA应用的质量可靠性就成为一个重要的课题。尽管FPGA在包括通讯、医疗、自动化设备等领域有着巨大的应用,但是在一些关键的安全应用领域,FPGA的质量可靠性始终受到质疑,行业在经历了质疑、观望、尝试之后终于开始大规模应用FPGA。即便如此,FPGA的质量可靠性保障机制依然成为关键应用领域的一个关键。

安全应用领域包括:兵器、航天、航空、船舶、核能、医疗、交通、运输。

由于产品设计中任何欠缺都将导致严重的后果,所以上述安全应用领域对产品的质量可靠性都有着近乎严酷的要求。行业普遍采取主管机构加上授权质量测试团队这种运作模式。企业研发的产品必须取得主管机构的认可(这一过程通常被称为取证,意即取得认证),而行业主管机构会委托一些技术实力较强的中立机构来完成这种质量可靠性的认定(这一过程通常被称为测试),主管机构授权测试团队完成测试,对达到测试要求的设计授予质量证书并且对设计的产品在相关型号中的应用放行,而对达不到测试要求的设计给出测试意见,将设计打回要求对设计进行整改,不授予质量证书。企业设计的产品不能在相关型号中应用,企业必须对设计进行整改,并在后续的过程中重新申请测试,直至通过测试。

2        军工领域发展现状及差距

现代武器装备的研制是国家科技水平的结晶,同时也靠经济实力支撑。随着电子科技的不断升级,技术的不断深化,越来越多的关键控制设备由传统的机械部件或者大量堆叠的电子元器件转化为更高可靠性与集成性的FPGA电子设备。目前在军工领域,基本采用小型化的FPGA技术,通过将繁杂的电子元器件与机械操作功能由电子设备控制实现,而这些电子设备则通过VHDLVerilog等语言去实现功能描述,再借助仿真工具实现验证,综合与布局布线工具进行电路实现,利用下载电缆将设计放置在FPGA内,从而由硬件电路实现这些复杂的关键控制功能。这些FPGA通常安置在PCB板上,同时FPGA与板上其它组件构成一个子系统,之后若干个子系统再通过线缆网络等进行连接,实现整个复杂系统的搭建。

因此,在目前军工领域出现几种趋势:功能电子化、控制智能化、连接网络化、产品小型化。可见,现代武器装备的高质量、高性能、高可靠、抗恶劣环境等方面的能力越来越依赖于装备中的电子成分。因而提升设计手段,改善设计思路,确保质量与可靠性,就成为高科技装备的必由之路。

在应用趋势的推动下,涌现了大量关键的小型化与电子设计技术,如ASIC定制IC技术,SoC片上系统技术,FPGA现场可编程门阵列技术,FPSoC现场可编程片上系统技术等。前两种技术当产品量成百万以上规模时会有突出的成本优势,因此更多地被主要应用于民品领域。而后两者则主要针对产品量较小规模情况时具备成本优势,因此非常适于军工领域,这也成为FPGA技术在军工领域大量应用的关键原因。

现今国内诸多领域,基于FPGA的应用被大量采用。各FPGA芯片提供商以及EDA开发与验证等工具提供商面对中国这个不断繁荣的市场,在国内的投资与支持力度也愈发扩大与加强,所有的技术条件已经非常成熟。相对于国外相关领域,国内设计水平正在迎头赶上,差距正在不断缩小。与此同时,国外相关行业已经积累了大量的工程实践经验,将诸如断言、软硬件协同验证、SystemVerilog等诸多新技术成功引入,形成了完善的设计与测试体系。

但是,在FPGA设计的测试验证技术方面,总得来看国内仍然较为落后,依然采用最为传统的验证手段,由于传统观念的影响,认为基本功能的确认就已足够,因而国内科研院所技术的更新相对较为滞后。

美国联邦航空局(FAA)与世界其它航空航天认证机构在行业内强制执行了一套设计标准RTCA/DO-254《机载电子设备设计保障指南》,该标准的主要目的为确保机载硬件设备的安全与可靠。标准要求所有集成至飞行系统的FPGA设计必须完全满足DO-254标准要求。设计过程的严格要求由设计保障级别(DesignAssuranceLevel),或称安全性级别来划分,从级别A(最高)至级别E(最低)。为达到DO-254所要求之安全级别A/B的标准要求,对于设计者来说将花费极为昂贵的时间与项目成本。由于对设计可靠性与安全性要求之高,因此DO-254正在迅速成为诸如航空、航天、军事、核能、汽车、医疗等安全关键领域热切关注的焦点。随着我国军工科技投入的加大,设计复杂度的不断提升,如何保证设计的功能正确性与可靠性愈发受到重视,提到关乎国家利益的战略性高度,因而目前相关很多院部都已充分意识到FPGA设计测试工作的重要性,逐步把这项工作提到议事日程上来,并逐渐进入项目实施阶段,恰恰与DO-254不谋而合。

二.  FPGA软件测试必要性

FPGA设计流程经过大量工程实践,已有一个非常成熟的方案。大致分为设计创建、功能仿真、逻辑综合、布局布线、时序仿真五个阶段。正视国内实际情况,很多设计工程师没有进行充分的验证,就将设计经综合与布局布线之后生成下载文件(或称烧片文件),直接下载至FPGA内。由于硬件调试环境的复杂性,通过示波器、万用表等设备进行探测,发现往往很难非常精确的定位问题,更为关键的是很难全面的发现所有潜在问题,导致不断地反复修改代码,不断地下载进行调试,浪费了大量的开发时间,延误了设计任务周期。

上述还不是最可怕的事情。我们从这样的设计流程中可以看出,每一步的工作都承前启后,因此每一步的结果确认都很必要。但最为关键的也就是最核心的功能验证不全面,导致实际产品出来之后有问题。对于任何一样产品,最终的目标就是要保证全部功能的正确实现,同时结合军工的特殊性,有必要确保设计的容错性、可靠性与鲁棒性等。而这些是传统的仿真器,通过观察仿真波形等验证手段不足以实现的,并且极为低效。

随着设计复杂程度的增长,传统的FPGA设计流程带来调试困难、设计缺陷的发现和调试严重滞后、问题的解决十分被动并且昂贵,这种被动性更多的时候体现为在设计完成后在系统调试时间会被极大的延长。甚至是在硬件系统已经完成了安装后,依然会发现有缺陷需要打补丁修改。对设计的修修补补或者产品功能与性能上的妥协,使定型的产品同原始的设计规范之间可能存在一定的差距,而且也制约了产品的研发进度。

在复杂的装备设计与研发中,越来越多的设计工程师采用了一些高级的静态检查与动态仿真验证技术,在产品研发的早期就能够保证设计的可靠性和系统验证的完备性,做到尽早发现问题、尽快解决问题,而且由于问题的解决是在产品研发的早期阶段,因而设计工程师完全可以评估不同的问题解决方案,而不需要在产品性能、成本、设计进度等方面进行折中。

今天的军工装备中应尽可能地应用领先的设计技术与验证技术确保高质量、快速地实现高性能装备的研发与大规模生产制造。测试验证始终是设计的重中之重,随着设计复杂度的提高,验证已经成为整个设计的瓶颈。因此如何提高验证水平,如何保证设备的高可靠性,除了提高设计人员自身的水平,还需要有一整套完整、科学的工程化验证平台来帮助工程师实现这一艰巨的任务。当前对于软件设计,已经有一套成熟的软件工程化规章和体系来保证软件设计的质量和可靠性;而硬件设计,尤其是当前普遍采用的先进的FPGA设计,还没有建立起相应的测试体系,这将对整个项目的质量以及安全可靠性留下隐患。针对这种形式,必需在整个系统内建立一套FPGA软件测试体系,以保证FPGA软件的质量和安全可靠性。

考虑到FPGA的开发和软件开发的相似性,都涉及到编码方面的问题,所以在FPGA设计的过程中,可以建议采用国军标相关软件开发的标准来规范FPGA的开发,以确保FPGA设计的可靠性。

三.  FPGA软件测试方案

1        测试及测试流程

在设计的每个阶段都将产生大量的各种类型的文件,为保证设计的正确性和设计质量,将对完成的设计进行测试,需要审查的内容大致包括:设计源代码的完备性、规范性;设计过程中的测试完备性;最终设计的正确性、健壮性;设计文档的完备性等。

1)     设计任务书、需求规格说明

需求规格说明是开发方进行设计的主要依据,研制单位提供的需求规格说明必须是根据设计任务书生成的,并且已通过评审。

2)     设计说明文档

开发方需要提交一份设计说明文档,说明该设计中诸如项目名称、设计环境、工具版本、所选芯片型号、重要数据文件(设计源文件、测试代码名称、存储位置)等内容,这些信息对于设计存档以及未来的设计复用都有很大的帮助。

3)     RTL级的HDL代码(VHDL或者Verilog

研制单位可能使用多种设计方法,但是最终必须生成标准的HDL代码,这是保证设计的通用性以及未来的设计复用所必需的,有助于帮助研制单位逐步完成设计积累,提高设计效率和质量。

4)     功能仿真完成后的测试代码、测试结果、测试覆盖率报告

在统一的测试完备性标准下,对测试覆盖率(包括代码覆盖率、功能覆盖率)报告进行审查,测试覆盖率未达到要求的设计将不能通过测试。。

测试用例要覆盖所有的正常工作模式、临界状态和可能的错误情况,确保最终的设计满足设计要求,同时也检测了设计的健壮性。

5)     综合与布局布线使用的约束文件、时序报告

为了验证在实际物理环境或者半实物环境的情况下设计的功能正确与可靠,需要用到综合与布局布线约束文件,而这些文件中的设置需要设计者完整提供,以便测试方根据这些信息进行综合与布局布线,得到门级网表、标准延时文件与下载文件。门级网表与标准延时文件用于带有时序信息的动态仿真功能验证,下载文件可进行物理环境下的功能与可靠性测试。

根据时序报告,可以评审设计在布局布线之后是否存在时序违反,开发方应该保证该设计不存在时序违反情况。如果有,则该设计的功能正确性与可靠性难以得到很好保障,需要设计者修复该问题后再提交。

测试团队推荐的测试流程如下:

1)  审查设计需求规格说明的合法性

确认设计需求规格说明确实通过了相关部门的评审。

2)  审查设计说明文档

确认所有的信息都全面、合理。其中涉及的文档包括:设计任务书、概要设计文档、详细设计文档。

3)  测试RTL级的HDL代码(VHDL或者Verilog

测试团队将对研制单位提供的RTL级的HDL代码进行静态测试,包括代码的完备性、规范性、正确性等进行检查。

l  完备性主要分析提交代码的层次关系的完整性,确保没有遗漏代码;

l  规范性主要分析提交代码是否满足一定的代码编写规则要求,具体的编码规则可以参考行业推荐的RMM规则集、DO-254规则集等,也可以是根据这些规则集并结合用户具体要求重新定制的具体规则要求;

l  正确性主要分析代码是否存在语法错误等;

l  需要关注完整性分析报告、代码质量分析报告。

4)  测试功能仿真完成后的测试代码、测试结果、测试覆盖率报告

测试团队根据需求规格说明对FPGA代码进行动态功能仿真,确保设计满足规格要求,并检测该设计的可靠性、健壮性与容错性。

l  动态功能确认主要指测试人员根据需求文档,概要及详细设计文档,完成对设计的理解,编写testbench,进行诸如仿真波形等确认;

l  基于测试需求及计划,对所有测试内容进行逐项分析与评判,保证每一条测试项均覆盖且正确;

l  测试人员需要考虑临界条件、鲁棒性,比如随机激励输入,保证在除典型应用场景外功能依然正确,以证明设计具备一定的健壮性及容错性;

l  可靠性测试主要确保设计不会出现工作不稳定状态,如亚稳态等现象;

l  对于含有嵌入式软件的,可以考虑进行软硬件协同验证,确保整个系统软硬件之间的协同工作一致性,及时发现软件和硬件错误;

l  关键功能测试逻辑,必要时需采用100%功能全覆盖测试;

l  需要关注代码覆盖率分析报告、功能仿真结果分析报告、跨时钟域分析报告等。

5)  评估设计时序

测试团队将对研制单位提交的布局布线后得到的时序报告进行审查,确保设计满足需求规格说明中的时序要求。

l  主要借助静态时序分析方法对布局布线后的设计进行时序确认,及时发现时序违反以及可能导致降低设计性能的路径。

l  重点关注时序分析报告、面积报告等。

6)  测试门级网表和延时文件

测试团队根据需求规格说明对门级网表和延时文件进行带有时序信息的动态功能仿真,可复用功能测试用例,同样要求覆盖所有的正常工作模式、临界状态和可能的错误情况,确保设计满足规格要求,并检测该设计的健壮性与容错性。

l  RTL代码级测试类似,布局布线后网表需要进行相同的仿真,以确保所有代码逻辑在布局布线后仍然正确,对测试计划中每一个测试项均需要完整测试并确保结果与期望相同;

l  由于后仿真速度的限制,可能会降低测试效率,因此可以引入逻辑等效性检查分析方法加速门级验证过程;

l  需要关注功能仿真结果分析报告、逻辑等效性检查分析报告等。

7)  下载测试与物理环境下功能正确性

在前述几项工作完成之后,将布局布线生成之下载文件下载至FPGA内,在系统样机上进行实际物理环境下的功能验证。

l  确认设计在真实物理环境下的功能正确性,对于代码与网表仿真中使用的测试用例,需要在物理环境下模拟并对结果进行判定;

l  如含有嵌入式软件的,建议进行软硬件协同测试。

8)  给出测试结论

测试流程中所有的项目都通过后,给出"XX设计通过测试"的结论。如果其中的任何一项没有通过,测试团队给出具体的建议说明,开发方根据说明完成进一步的工作,之后重新提交所有的文件,由测试团队再次进行测试。

2        团队人员与工具配置

FPGA软件测试在较大程度上可以借鉴已经成熟的软件工程化以及软件测试方面的成功经验,同时FPGA测试也有其涉及硬件层面的特殊性。在测试工程师的培养和协同上做出一定的调整,才能确保FPGA软件测试工作的顺利开展以及FPGA软件测试工作的权威性和可靠性。


2.1      人员配置

FPGA设计基于高级语言(VHDL或者是VerilogHDL语言,有时也可以是图形化设计工具,但是最终都是形成高级语言)实现,设计本质上属于软件;其次FPGA设计又是一种特殊面向硬件设计的软件开发,包含硬件的显著特征,所以实施FPGA测试的工程师需要对硬件设计有一定的了解。

高性能的EDA技术使得FPGA软件测试变得异常简单,促使专业的软件测试工程师可以迅速了解和掌握FPGA的测试,所以目前的软件测试工程师完全可以胜任FPGA软件测试。

测试团队需要配置专门用于FPGA软件测试的软件和工具、硬件电路板、开发验证软件包,要求这些工具与开发验证套件能够支持:

a)                 RTL级的HDL代码的静态测试与代码质量的评估;

b)                 具有安全关键设计所需的需求跟踪、分析与管理功能;

c)                 测试功能验证的完备性;

d)                 RTL级的HDL代码的动态仿真测试;

e)                 断言与便于应用的断言验证IP库;

f)                   支持跨时钟域与形式验证分析;

g)                 完整的覆盖率模型:代码覆盖率、功能覆盖率;

h)                 测试计划的链接、跟踪、排序与合并,保证功能验证的完备性;

i)                   能够对系统应用软件进行调试,具备软硬件协同验证功能;

j)                   支持逻辑等效性检查分析;

k)                 针对提交的RTL代码,综合至各种FPGA芯片,并进行时序分析,给出详细的时序报告;

l)                   支持在硬件实物环境内对FPGA软件进行分析与调试。