关于FPGA软件工程化创新的探讨

2020-05-25 02:28徐琦吴迪飞毛知钢
科学与信息化 2020年5期

徐琦 吴迪飞 毛知钢

摘 要 FPGA在航空、航天等领域得到了广泛的应用,但其软件质量的形势却不容乐观。如何将计算机软件工程化与FPGA软件特性相結合,从管理体系、测试工具、仿真能力建设三方面创新方式方法,推进FPGA软件工程化,成为目前FPGA软件质量的研究重点。

关键词 FPGA软件工程化;创新方式方法;软件质量

1 FPGA软件工程化的必要性

FPGA(Field Programmable Gate Array,现场可编程门阵列)是数字系统中应用最为广泛的FPGA,在当前装备研制过程中常常被应用于时序控制、算法处理及复杂片上系统等关键重要设计。然而随着FPGA设计规模的不断扩大,FPGA软件的质量形势却不容乐观,成为影响装备质量的重要因素,主要体现在以下几个方面:

第一,FPGA软件纳入国家质量标准体系的管理时间尚短,全生命周期的过程不受控。例如业内针对verilog、VHDL语言尚未制定统一的编码规则,在工程项目实施过程中往往因为人员经验的差别而造成软件质量参差不齐,代码千行缺陷率高,且缺少可靠性和安全性设计考虑;

第二,FPGA软件设计流程复杂,需要经过编码设计、逻辑综合、布局布线、加载位流文件等数个步骤,每一个环节都可能引入各种问题,全流程测试工具种类繁多、功能各异,缺乏智能的测评一体化平台管理环境;

第三,FPGA软件动态测试手段匮乏,实物测试可观测点少且受硬件限制大,仿真测试的技术进入门槛较高且耗费时间长,难以完全覆盖软件的所有质量需求。

因此,为了有效保障装备的质量,借鉴计算机软件工程化经验,通过更全面、更细节的标准来组织FPGA软件的开发和测试过程,通过全覆盖的工具和创新的技术来支撑FPGA软件的质量检测,推进FPGA软件工程化势在必行[1]。

2 FPGA软件工程化的推进方法

2.1 健全质量体系,保障过程管控

全面、强制的质量体系是保障FPGA软件工程化顺利推进的有力后盾。健全的体系文件与细节的设计规范,能够将编码从个人行为变成组织行为,最大限度的实现经验共享。通过文件表达的信息和信息的传递,使组织的成员之间沟通意图,统一行动,提高团队开发的合作效率。

国外在FPGA软件质量体系建设中已开展了大量工作。首先,成立专门的保障机构。比如美国在新墨西哥成立的FPGA任务保证中心,专门用以开展FPGA方面相关工作。其次,制定相关标准规范。如美国的航空标准RTCA/DO-254《美国机载电子器件设计指南》,从2005年起,DO-254在美国航空领域的主要企业得到强制采纳,作为业界开展FPGA研制开发工程化管理的指导性文件。同时,该标准在欧洲也已经被多家机构和企业采纳。

虽然起步较晚,但国内也在逐步完善管理体系。2017年中华人民共和国国家质量监督检验检疫总局、中国国家标准化管理委员会联合发布了《FPGA软件开发通用要求GB/T33781-2017》、《FPGA软件测试指南GB/T33783-2017》、《FPGA软件文档编制规范GB/T33784-2017》,对FPGA的全生命周期进行管理。以当前体系文件作为基础,后续将不断完善与增加更为具体的设计准则、设计规范,以保证能够有效地增加代码的可读性,降低维护成本,提升代码的运行效率,增强代码的可重用性和可靠性,从而实现逻辑功能正确,综合结果最优的编码目标。

2.2 补充测试工具,丰富测试视角

充分、全面、有效的测试是保障FPGA软件质量的关键要素,在推进FPGA软件工程化过程中起到不可或缺的作用。FPGA软件设计流程与传统软件设计流程存在差异,测试方法也不尽相同,对全流程测试工具依赖性高。而多样的全流程测试工具也给测试工作带来了新的难题:工具种类繁多,不易掌握;测试结果数据量大,分析、统计工作繁杂;工具间测试接口不兼容,无法建立有效技术积累。因此,有必要构建快速高效全覆盖的测评一体化管理平台环境,作为有效管控全流程测试的必要支撑。

结合FPGA软件的技术特点,细化各测试阶段的测评项目管理,加强测评项目需求管理、策划管理、跟踪与控制、质量保证、配置管理及专家知识库系统建设,具体对应关系如下图所示。

加强FPGA软件全流程的测试工具建设,建立完整充分的测试工具集合,通过工具来支撑标准的实施,通过标准来组织工具的架构。从多视角进行测试需求分析,可以在FPGA软件开发测试的各个流程层面保证FPGA软件质量。同时,以测试视角介入设计过程,以测试引领设计,实现设计未动,测试先行。

2.3 提高仿真能力,拓宽测试深度

仿真验证是FPGA软件动态测试中最关键的技术手段,也是耗费测试人员时间最长的环节。过去由于FPGA常常被当作硬固件进行管理,FPGA软件仿真能力积累严重不足。而FPGA编程语言对于时序关系表达的依赖性极强,导致了以下几个缺陷:①输入激励不充分;②测试环境高度耦合;③结果侦错耗时耗力。为了保证仿真测试的效率与完备性,对传统测试方法进行创新,寻求分层架构易重用、覆盖率更全面的仿真技术迫在眉睫。

(1)UVM仿真架构

传统的仿真环境工作在行为级,仿真环境高度耦合,一旦设计趋于复杂,整个仿真环境架构会非常混乱,不易维护。基于UVM的FPGA软仿真架构给出了多层次的事务级仿真平台解决方案。通过引入ASIC设计领域最为先进的UVM验证方法,采用面向对象编程的方式建立事务,可以定义各种高级数据结构类型,调用方法和函数,无须考虑与RTL代码相关的时序实现问题,创新提出基于UVM的五层仿真软件架构,具有高度可重用性。

它创新性地将测试平台分为5层,分别是①信号层:包括待测设计以及待测设计与测试平台相连接的接口;②命令层:按照各种协议要求,将事务级信号转换为线、网级信号,该层只关注转换的时序本身而不是具体数据;③功能层:接收来自场景层传输的抽象级事务,通过专门的传输通道,传给命令层;④场景层:根据基于事务级建模的思想,提出抽象的事务作为待测设计的激励,传递给下一层;⑤测试层:定义各种验证测试用例,根据验证需要,可以选择不同验证测试用例以及不同的验证场景进行验证。

(2)形式化验证

System Verilog中的CRT(受约束的随机测试)和SVA为输入激励覆盖不完整和结果侦错耗时长提供了很好的解决办法。CRT可以建立产生事务级随机激励的类,对DUT的所有关键点都采用随机化技术,能够表达复杂的场景,模拟功能项之间的随机关系。纯粹的随机激励接近无限空间,没有实际使用价值,所以需要约束随机激励的自由度,以产生令人感兴趣的随机测试场景。多次运行随机测试环境,才能充分识别覆盖盲区。而对于那些受约束的随机测试覆盖不到的地方,再补充定向测试,直至达到要求的输入激励覆盖率。

SVA( System Verilog Assertion)可以执行协议接口检查( 如PCI,USB 协议接口) 、逻辑控制信号检查( 如SDRAM 控制信号) 、有限状态机( FSM)和仲裁器等时序和功能检测,System Verilog也提供了若干个内嵌函数来测试特定的设计情况,并且提供了一些构造来自动收集功能覆盖数据。在设计中使用SVA需要一定的花销,如在RTL级,代码编写时间将会增加1%~3%,同时新的SVA代码可能带来新的问题,但是在设计中使用SVA可以减少50%的验证时间。

将CRT、SVA与形式化验证技术相结合,对关键需求进行形式化验证,自动遍历所有可能发生的激励,自动发现被测Verilog/VHDL代码与被测需求的不一致之处,并自动定位问题发生的具体波形图,以机器时间代替人力时间,同时避免人工设计测试用例对于需求验证覆盖不完整,保证测试的全面高效。

3 结束语

建立全生命周期的过程管理体系,规范FPGA软件行业设计方法,建设与开发环节一一对应的全流程测试工具链,创新方式方法以提高动态测试能力,为软件工程化在工程实践项目中的落实提供高效的环境和能力支撑,才能有效保障装备的质量和力量。

参考文献

[1] 侯大勇,曹峰,王昱煜.基于FPGA的灰度图像直方图均衡化实现[J].电子技术与软件工程,2016,(14):100-101.