FPGA软件通用编码规则集研究

(整期优先)网络出版时间:2022-06-07
/ 2

FPGA软件通用编码规则集研究

李敬磊 李颖臻 曾清乐

(工业和信息化部电子第五研究所,广州 510610)

[摘要] 编码规则检查是FPGA软件代码缺陷检测的重要内容。本文研究了通用编码规则集的分类,分析了每个子类的重点研究内容,并设计了FPGA软件代码缺陷模式库,为下一步研究指明了方向。

[关键词] 现场可编程门阵列;编码规则;缺陷模式

General Coding Rules for FPGA Software

Li Jinglei Li Yingzhen Zeng Qingle

(CEPREI, GuangZhou 510610, China)

Abstract:Coding rule check is an important part of FPGA software code defect detection. This paper studies the classification of general coding rule sets, analyzes the key research content of each sub-category, designs the defect pattern library of FPGA software, and points out the direction for further research.

Key words: FPGA; Coding Rules; Defect Pattern

1 研究背景

目前,在军用国防领域,FPGA器件越来越多地被应用在雷达、导弹、武器、航空、航天等国防装备中实现高速接口传输、实时信号处理、精确时序控制等功能。在装备国产化的背景下,国内FPGA器件已初具规模,也逐步应用在型号装备中,但国内FPGA厂商研发水平参差不齐,器件质量无法保证。因此,随着FPGA器件在型号装备中的广泛应用,FPGA软件的质量严重影响着型号装备的好坏,FPGA软件的质量测评至关重要。

FPGA软件质量的测评主要包括代码静态分析和动态测试等手段。其中,动态测试一般需要搭建测试环境和测试用例,相对于代码静态分析,花费时间和成本较大。代码静态分析一般通过专业的工具或人员根据制定的规则集对代码进行缺陷分析,使用方便,花费时间和成本较少,能够在早期发现缺陷,但目前主流的静态分析工具基本上为国外的工具,缺少针对军用的以及国内FPGA器件的代码规则集,且工具分析结果缺陷误报率较高,需要人工进行筛选和二次分析。因此,研究FPGA软件通用规则集,构建FPGA软件缺陷模式库,并以此研发规则集完备、误报率低的代码缺陷检测工具,从而提高FPGA软件测评效率,保证FPGA软件质量,是十分有意义和必要的。

2 研究内容

2.1 FPGA软件通用规则集研究

分析国内外已有的DO-254、RMM、STARC等硬件描述语言规则集,针对现有规则进行筛选并优化,分析编码规则对FPGA软件的适用性,并结合国内外FPGA供应商的器件特点,扩展可靠性安全性以及工艺相关的编程规则,制定适用于军用领域的FPGA软件安全编码规范,解决现有规则集重复规则较多、完备性不足的问题,提高国产FPGA设计的规范性。研究内部主要包括同步设计规则、初始化复位规则、异步电路规则、组合逻辑规则、运算符编程规则、分支语句编码规则、状态机编程规则、安全性设计编程规则和工艺相关编程规则等。

  1. 同步设计规则

研究同步设计的规则,从时钟、复位、异步信号、组合逻辑等方面描述同步设计规则的具体定义,结合 FPGA软件的高安全高可靠性要求,对同步设计规则进一步优化。

  1. 初始化复位规则

研究初始化复位规则,从内部寄存器、关键信号、输出信号等方面进行初始化复位规则定义。

  1. 异步电路规则

研究异步电路规则,从时钟、复位、信号跨时钟域、组合逻辑、数据异步传输等方面描述异步电路规则的具体定义,结合 FPGA软件的高安全高可靠性要求,对异步电路规则进一步优化。

  1. 组合逻辑规则

研究组合逻辑规则,从时钟、复位、组合逻辑反馈环、组合逻辑块敏感列表、锁存器等方面描述组合逻辑规则的具体定义。

  1. 运算符编程规则

研究运算符编程规则,从运算符的可综合性、组合逻辑和时序逻辑中使用的正确性、运算符两端数据比较等方面描述运算符编程规则的具体定义。

  1. 分支语句编程规则

研究分支语句编程规则,从分支控制类、循环控制类等方面描述分支语句编程规则的具体定义。

  1. 状态机编程规则

研究状态机编程规则,从状态机编码方式、状态机初始状态、状态机跳转、状态机安全模式综合属性等方面描述状态机编程规则的具体定义。

在以上规则基础上,重点研究可靠性安全性设计编程规则以及工艺相关编程规则。

  1. 安全性设计编程规则

可靠性安全性设计编程规则以保障FPGA软件可靠性和安全性为目标,结合典型 FPGA软件的严酷使用场景及所需的特殊处理方式,围绕最高运行时钟余量、冗余设计、三模冗余、状态机、寄存器同步、端口管脚等方面开展规则条款设计。

  1. 工艺相关编程规则

工艺相关编程规则与FPGA芯片的类型或型号直接相关,针对Xilinx、Altera、Microsemi等国外FPGA以及成都华微、紫光同创等国内FPGA器件分别开展工艺相关编程规则设计,考虑到时钟网络作为FPGA软件的中枢系统,跨时钟域设计、同步/异步复位设计等方面均会直接影响到FPGA软件的资源利用和性能实现,拟从跨时钟域、同步/异步设计等方面入手,分析不同类型或型号FPGA芯片特性,制定工艺相关的编程规则。

2.2 FPGA软件缺陷模式库研究

基于研制的FPGA软件通用规则集,分析违反规则集的FPGA软件代码缺陷典型案例,突破FPGA软件代码缺陷模式表征技术,建立缺陷相关数据之间的结构关系,形成FPGA软件代码缺陷模型,构建FPGA软件代码缺陷模式库。围绕模型驱动的代码缺陷模式分析过程,考虑其中使用的需求要素及组织形式,研究形成如下的缺陷模式库结构划分:

表1 代码缺陷模式库结构

序号

缺陷类型

严重等级

缺陷描述

违反规则

典型案例举例

示例代码推荐








设计的FPGA代码缺陷模式包括以下特征要素:

  1. “缺陷类型”标签

该标签描述缺陷属于的类型,根据研究制定的FPGA软件规则条款,包括初始化复位、同步电路类、异步电路类、组合逻辑类、运算符编程类、分支语句编程类、状态机编程类、安全性设计类、工艺相关编程类及其他类等。

  1. “严重等级”标签

该标签描述缺陷的严重等级,可分为提示、警告和错误。提示类型一般提示用户对代码进行了特殊操作,比如信号被赋值为固定值等;警告类型指示代码可能存在问题,比如代码关键信号未初始化、信号存在跨时钟域传输等;错误类型一般指示代码存在问题,会影响软件功能。

  1. “缺陷描述”标签

该标签描述该代码缺陷的成因、问题机理以及导致的问题和后果。

  1. “违反规则”标签

该标签描述该软件缺陷所违反的规则条款。该标签内容中的规则条款即为研究制定的FPGA软件规则条款,每条缺陷和唯一的一条规则条款对应。

  1. “典型案例举例”标签

该标签根据违反的规则条款进行典型案例举例。根据积累的典型案例缺陷库,结合FPGA软件规则条款,选取典型的案例缺陷库进行举例,从而能够方便用户快速地了解缺陷的问题所在。

  1. “示例代码推荐”标签

该标签根据违反的规则条款进行正确示例代码举例。针对上述的典型案例缺陷,提出解决该缺陷的推荐示例代码,从而为用户解决该缺陷问题提供参考思路和方法。

3 进一步工作及预期研究成果

在形成FPGA软件通用编码规则集以及FPGA软件缺陷模式库基础上,研究FPGA缺陷检测引擎工具,能够根据缺陷模式库自动分析代码中违反规则集的代码逻辑,并能够将缺陷检测结果关联分析,从而形成FPGA软件代码缺陷自动化检测工具。相比于国外的FPGA软件编码规则检测工具,该检测工具能够有效降低检测结果误报率,并能够在安全性设计、工艺相关编程规则等方面提供编码建议,从而有效提升FPGA软件质量,为国防武器装备提供保障。

参考文献

[1] GJB9765-2020,《军用可编程逻辑器件软件编程语言安全子集-VHDL语言篇》.

[2] GJB 10157-2021,《军用可编程逻辑器件软件Verilog语言编程安全子集》.

3

作者简介:李敬磊(1987-),男,河南安阳人,工业和信息化部电子第五研究所软件质量工程中心工程师,从事FPGA软件测试工作。