一种FPGA代码规则检测方法、装置和设备与流程

文档序号:31450442发布日期:2022-09-07 13:07阅读:708来源:国知局
一种FPGA代码规则检测方法、装置和设备与流程
一种fpga代码规则检测方法、装置和设备
技术领域
1.本发明属于编码检测技术领域,具体涉及一种fpga代码规则检测方法、装置和设备。


背景技术:

2.随着fpga(field programmable gate array,可编程门阵列)器件规模的逐渐增大,其承载逻辑的资源数和复杂度也同比增大,从而使得实现fpga软件功能的fpga代码也更加复杂。为保证软件开发的质量,软件开发人员或者测试人员可以在开发阶段编写单元测试和集成测试验证代码逻辑处理正确性。
3.现有技术中,已被广泛应用的hdl(high-speed integrated circuit hardware description language,高速集成电路硬件描述语言)代码规则检测工具主要有:hdl designer、leda、nlint和alint等,但上述hdl代码规则检测工具的软件界面不支持中文,规则描述不易理解,且缺乏对我国某些标准编码规则的检测方法。例如:在航天领域,为了提高航天型号fpga类产品的代码质量,中国航天科工第二研究院制定了《q/we1117-2014二院型号fpga硬件描述语言编程准则》来规范fpga代码的设计。然而,目前还没有一款fpga代码检测工具能够兼容上述编码规则,导致航天领域的fpga产品的代码质量无法得到保证。


技术实现要素:

4.本发明的目的是提供一种fpga代码规则检测方法、装置和设备,用于解决现有技术中存在的至少一个技术问题。
5.为了实现上述目的,本发明采用以下技术方案:
6.第一方面,本发明提供一种fpga代码规则检测方法,包括:
7.根据待检测的多个fpga代码文件,选取对应的编码规则集;
8.以文件为单位,对每一fpga代码文件进行语法解析,生成语法树,并将所述语法树装载到以模块为单位的数据结构中;
9.以工程为单位,创建设计类,将每一fpga代码文件中的模块及模块信息存储到所述设计类中,其中,所述工程包括多个fpga代码文件,所述模块信息至少包括模块化的语法树;
10.设置顶层文件和顶层模块,并基于所述设计类自动为所述顶层模块匹配调用的子模块,生成调用层次图;
11.利用所述编码规则集,按照所述调用层次图的调用逻辑,以模块为单位对所述设计类中代码进行规则扫描检测。
12.在一种可能的设计中,所述方法还包括:
13.若存在违规信息,则将违规信息进行保存后,以文件形式导出并反馈至用户界面,其中,所述用户界面为中文界面。
14.在一种可能的设计中,所述fpga代码文件包括verilog文件和/或vhdl文件。
15.在一种可能的设计中,将每一fpga代码文件中的模块及模块信息存储到所述设计类中,包括:
16.对于verilog文件,将每一module节点作为一个verilog模块,并将每一verilog模块及模块的语法树、文件路径、模块名和/或调用子模块信息存储到所述设计类中。
17.在一种可能的设计中,将每一fpga代码文件中的模块及模块信息存储到所述设计类中,包括:
18.对于vhdl文件,搜索所述vhdl文件的每一实体,为每一实体匹配对应的结构体,并将每一实体和对应结构体组合后生成一个vhdl模块;
19.将所述vhdl模块及模块的语法树、文件路径、模块名和/或调用子模块信息存储到所述设计类中。
20.在一种可能的设计中,在基于所述设计类自动为所述顶层模块匹配调用的子模块之后,所述方法还包括:
21.识别所述顶层模块调用的子模块是否为有效子模块,若为有效子模块,则对当前子模块进行白盒测试,若为无效子模块,则对当前子模块进行黑盒测试。
22.在一种可能的设计中,所述编码规则至少包括国军标9765-2020vhdl编码规则、国军标10157-2021verilog编码规则、starc编码规则、rmm编码规则和/或do-254编码规则。
23.在一种可能的设计中,每一所述编码规则中对应设置有编码范例和若干修改意见。
24.第二方面,本发明提供一种fpga代码规则检测装置,包括:
25.模块选取规则集,用于根据待检测的多个fpga代码文件,选取对应的编码规则集;
26.解析模块生成语法树,用于以文件为单位,对每一fpga代码文件进行语法解析,生成语法树,并将所述语法树装载到以模块为单位的数据结构中;
27.设计类创建模块,用于以工程为单位,创建设计类,将每一fpga代码文件中的模块及模块信息存储到所述设计类中,其中,所述工程包括多个fpga代码文件,所述模块信息至少包括模块化的语法树;
28.层次图生成模块,用于设置顶层文件和顶层模块,并基于所述设计类自动为所述顶层模块匹配调用的子模块,生成调用层次图;
29.规则检测模块,用于利用所述编码规则集,按照所述调用层次图的调用逻辑,以模块为单位对所述设计类中代码进行规则扫描检测。
30.在一种可能的设计中,所述装置还包括:
31.违规信息反馈模块,用于若存在违规信息,则将违规信息进行保存后,以文件形式导出并反馈至用户界面,其中,所述用户界面为中文界面。
32.在一种可能的设计中,所述fpga代码文件包括verilog文件和/或vhdl文件。
33.在一种可能的设计中,在将每一fpga代码文件中的模块及模块信息存储到所述设计类中时,所述设计类创建模块具体用于:
34.对于verilog文件,将每一module节点作为一个verilog模块,并将每一verilog模块及模块的语法树、文件路径、模块名和/或调用子模块信息存储到所述设计类中。
35.在一种可能的设计中,在将每一fpga代码文件中的模块及模块信息存储到所述设计类中时,所述设计类创建模块具体用于:
36.对于vhdl文件,搜索所述vhdl文件的每一实体,为每一实体匹配对应的结构体,并将每一实体和对应结构体组合后生成一个vhdl模块;
37.将所述vhdl模块及模块的语法树、文件路径、模块名和/或调用子模块信息存储到所述设计类中。
38.在一种可能的设计中,在基于所述设计类自动为所述顶层模块匹配调用的子模块之后,所述层次图生成模块还用于:
39.识别所述顶层模块调用的子模块是否为有效子模块,若为有效子模块,则对当前子模块进行白盒测试,若为无效子模块,则对当前子模块进行黑盒测试。
40.在一种可能的设计中,所述编码规则至少包括国军标9765-2020vhdl编码规则、国军标10157-2021verilog编码规则、starc编码规则、rmm编码规则和/或do-254编码规则。
41.在一种可能的设计中,每一所述编码规则中对应设置有编码范例和若干修改意见。
42.第三方面,本发明提供一种计算机设备,其特征在于,包括依次通信相连的存储器、处理器和收发器,其中,所述存储器用于存储计算机程序,所述收发器用于收发消息,所述处理器用于读取所述计算机程序,执行如第一方面任意一种可能的设计中所述的fpga代码规则检测方法。
43.第四方面,本发明提供一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,当所述指令在计算机上运行时,执行如第一方面任意一种可能的设计中所述的fpga代码规则检测方法。
44.第五方面,本发明提供一种包含指令的计算机程序产品,当所述指令在计算机上运行时,使所述计算机执行如第一方面任意一种可能的设计中所述的如第一方面任意一种可能的设计中所述的fpga代码规则检测方法。
45.有益效果:
46.本发明根据待检测的多个fpga代码文件,选取对应的编码规则,生成编码规则集;然后以文件为单位,对每一fpga代码文件进行语法解析,生成语法树,并将语法树装载到以模块为单位的数据结构中;然后以工程为单位,创建设计类来存储所有verilog模块和vhdl模块;通过设置顶层文件和顶层模块,并基于设计类自动为顶层模块匹配调用的子模块,生成调用层次图;利用所述编码规则集,按照调用层次图的调用逻辑,以模块为单位对设计类的代码进行规则扫描检测。本发明根据不同的fpga代码文件,选择预设的若干编码规则,然后对文件处理后,利用编码规则集,以模块为单位对代码进行规则扫描检测,从而实现对fpga代码的有效检测,尤其是可适用于国防军工fpga中vhdl代码和verilog代码的通用检测,克服了现有技术的不足;其中,通过设置统一的模块类,并将所有文件的模块存储在设计类中,从而可以实现混合代码检测,提高方法的适用性。
附图说明
47.图1为本实施例中的fpga代码规则检测方法的流程图。
具体实施方式
48.为使本说明书实施例的目的、技术方案和优点更加清楚,下面将结合本说明书实
施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
49.实施例
50.为了解决现有技术中存在的hdl代码规则检测工具的软件界面不支持中文,规则描述不易理解,且缺乏对我国某些标准编码规则的检测方法等技术问题,本实施例提出了一种fpga代码规则检测方法,该方法根据不同的fpga代码文件,选择预设的若干编码规则,然后对文件处理后,利用编码规则集,以模块为单位对代码规则进行扫描检测,从而实现对fpga代码的有效检测,尤其是可适用于国防军工fpga中vhdl代码和verilog代码的通用检测,克服了现有技术的不足;其中,通过设置统一的模块类,并将所有文件的模块存储在模块类中,从而可以实现混合代码检测,提高方法的适用性。以下对实施例进行具体说明。
51.如图1所示,第一方面,本实施例提供了一种fpga代码规则检测方法,包括但不限于由步骤s101~s105实现,具体包括:
52.步骤s101.根据待检测的多个fpga代码文件,选取对应的编码规则集;
53.在步骤s101中,所述fpga代码文件包括但不限于verilog文件和vhdl(very-high-speed integrated circuit hardware description language,超高速集成电路硬件描述语言)文件,其中,verilog文件是指由硬件描述语言verilog hdl(以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能)编写的代码文件;vhdl文件是指由vhdl语言编写的代码文件。
54.在步骤s101中,所述编码规则为预设在系统中的若干编码规则,包括但不限于中文的编码规则和英文的编码规则,例如:国军标9765-2020vhdl编码规则、国军标10157-2021verilog编码规则、starc编码规则、rmm编码规则和/或do-254编码规则。其中,优选的,所述中文的编码规则为《q/we1117-2014二院型号fpga硬件描述语言编程准则》。
55.其中,需要说明的是,本实施例以工程为单位对多个fpga代码文件进行检测,那么不同的fpga代码文件可能对应有不同的编码规则,因此需要选择对应的编码规则,以构成编码规则集,便于后续调用。
56.在步骤s101中,优选的,每一所述编码规则中对应设置有编码范例和若干修改意见,从而可以指导编码人员进行代码的编写和修改,提高了后续代码编写或改写的效率。
57.步骤s102.以文件为单位,对每一fpga代码文件进行语法解析,生成语法树,并将所述语法树装载到以模块为单位的数据结构中;
58.在步骤s102中,由于fpga代码是以模块为单位的,因此,代码文件在生成语法树后,需要将语法树装载到以模块为单位的数据结构中,以适配于模块。其中,优选的,在生成语法树后,对所述语法树进行优化或简化,生成抽象语法树,并将抽象语法树装载到以模块为单位的数据结构中。
59.其中,需要说明的是,语法解析的原理是使用特定的语法规则将标签表达式转换为语法树;优选的,对每一fpga代码文件还可以进行词法解析,解析原理是使用正则表达式完成对输入流的字符串词法匹配,并通过标签的方式返回匹配到的词法表达式,从而把源代码解析为标签表达式,当然,还可以进行语义解析等,此处不做限定。
60.步骤s103.以工程为单位,创建设计类,将每一fpga代码文件中的模块及模块信息存储到所述设计类中,其中,所述工程包括多个fpga代码文件,所述模块信息至少包括模块化的语法树;
61.其中,需要说明的是,由于每一fpga代码文件中可能存在多个实体或模块,为了实现对所有模块的有序检测,作为步骤s103一种具体的实施方式,将每一fpga代码文件中的模块及模块信息存储到所述设计类中,包括:
62.对于verilog文件,将每一module节点作为一个verilog模块,并将每一verilog模块及模块的语法树、文件路径、模块名和/或调用子模块信息存储到所述模块类中。
63.作为步骤s103一种具体的实施方式,将每一fpga代码文件中的模块及模块信息存储到所述设计类中,包括:
64.对于vhdl文件,搜索所述vhdl文件的每一实体,为每一实体匹配对应的结构体,并将每一实体和对应结构体组合后生成一个vhdl模块;
65.将所述vhdl模块及模块的语法树、文件路径、模块名和/或调用子模块信息存储到所述模块类中。
66.基于上述公开的内容,通过将verilog模块和vhdl模块均存储到统一的设计类中,则当verilog模块和vhdl模块之间存在相互调用关系时,可基于二者之间的调用关系实现混合代码检测,从而无需单独对每一代码文件进行检测,提高了代码检测效率和方法的适用性。
67.步骤s104.设置顶层文件和顶层模块,并基于所述设计类自动为所述顶层模块匹配调用的子模块,生成调用层次图;
68.其中,需要说明的是,在通过步骤s103构建完所有模块的设计类之后,需要设置顶层文件和顶层模块,来为程序调用设置运行起点,因此,通过将其中一个fpga代码文件作为顶层文件,并将顶层文件的一个模块作为顶层模块,从而可以确立程序运行的起点,并基于所述设计类中各代码的功能实现自动为所述顶层模块匹配调用的子模块,从而生成调用层次图,实现后续的顺序检测。
69.在步骤s104中,在基于所述设计类自动为所述顶层模块匹配调用的子模块之后,所述方法还包括:
70.识别所述顶层模块调用的子模块是否为有效子模块,若为有效子模块,则认为该模块存在源代码,可对当前子模块进行白盒测试,若为无效子模块,则认为该模块不存在源代码,可对当前子模块进行黑盒测试。
71.步骤s105.利用所述编码规则集,按照所述调用层次图的调用逻辑,以模块为单位对所述设计类的代码规则进行扫描检测。
72.在步骤s105中,具体的,通过模块之间的调用逻辑,以模块为单位对代码进行扫描检测,识别违规信息,其中,违规信息包括但不限于规则号、违规描述、文件路径、行号、违规等级、注释等。
73.在一种具体的实施方式中,所述方法还包括:
74.若存在违规信息,则将违规信息进行保存后,以文件形式导出并反馈至用户界面,其中,所述用户界面为中文界面。
75.基于上述公开的内容,本实施例根据不同的fpga代码文件,选择预设的若干编码
规则,然后对文件处理后,利用编码规则集,以模块为单位对代码进行规则扫描检测,从而实现对fpga代码的有效检测,尤其是可适用于国防军工fpga中vhdl代码和verilog代码的通用检测,克服了现有技术的不足;其中,通过设置统一的模块类,并将所有文件的模块存储在设计类中,从而可以实现混合代码检测,提高方法的适用性。
76.此外,通过应用本实施例发现,本实施例对于代码违规检测的响应非常迅速,可达到1万行代码违规检查时间小于5分钟的速率,代码检测效率非常高。
77.基于上述公开的内容,本实施例根据待检测的多个fpga代码文件,选取对应的编码规则,生成编码规则集;然后以文件为单位,对每一fpga代码文件进行语法解析,生成语法树,并将语法树装载到以模块为单位的数据结构中;然后以工程为单位,创建设计类来存储所有verilog模块和vhdl模块;通过设置顶层文件和顶层模块,并基于设计类自动为顶层模块匹配调用的子模块,生成调用层次图;利用所述编码规则集,按照调用层次图的调用逻辑,以模块为单位对设计类的代码进行规则扫描检测。本发明根据不同的fpga代码文件,选择预设的若干编码规则,然后对文件处理后,利用编码规则集,以模块为单位对代码进行规则扫描检测,从而实现对fpga代码的有效检测,尤其是可适用于国防军工fpga中vhdl代码和verilog代码的通用检测,克服了现有技术的不足;其中,通过设置统一的模块类,并将所有文件的模块存储在设计类中,从而可以实现混合代码检测,提高方法的适用性。
78.第二方面,本发明提供一种fpga代码规则检测装置,包括:
79.模块选取规则集,用于根据待检测的多个fpga代码文件,选取对应的编码规则集;
80.解析模块生成语法树,用于以文件为单位,对每一fpga代码文件进行语法解析,生成语法树,并将所述语法树装载到以模块为单位的数据结构中;
81.设计类创建模块,用于以工程为单位,创建设计类,将每一fpga代码文件中的模块及模块信息存储到所述设计类中,其中,所述工程包括多个fpga代码文件,所述模块信息至少包括模块化的语法树;
82.层次图生成模块,用于设置顶层文件和顶层模块,并基于所述设计类自动为所述顶层模块匹配调用的子模块,生成调用层次图;
83.规则检测模块,用于利用所述编码规则集,按照所述调用层次图的调用逻辑,以模块为单位对所述设计类中代码进行规则扫描检测。
84.在一种可能的设计中,所述装置还包括:
85.违规信息反馈模块,用于若存在违规信息,则将违规信息进行保存后,以文件形式导出并反馈至用户界面,其中,所述用户界面为中文界面。
86.在一种可能的设计中,所述fpga代码文件包括verilog文件和/或vhdl文件。
87.在一种可能的设计中,在将每一fpga代码文件中的模块及模块信息存储到所述设计类中时,所述设计类创建模块具体用于:
88.对于verilog文件,将每一module节点作为一个verilog模块,并将每一verilog模块及模块的语法树、文件路径、模块名和/或调用子模块信息存储到所述设计类中。
89.在一种可能的设计中,在将每一fpga代码文件中的模块及模块信息存储到所述设计类中时,所述设计类创建模块具体用于:
90.对于vhdl文件,搜索所述vhdl文件的每一实体,为每一实体匹配对应的结构体,并将每一实体和对应结构体组合后生成一个vhdl模块;
91.将所述vhdl模块及模块的语法树、文件路径、模块名和/或调用子模块信息存储到所述设计类中。
92.在一种可能的设计中,在基于所述设计类自动为所述顶层模块匹配调用的子模块之后,所述层次图生成模块还用于:
93.识别所述顶层模块调用的子模块是否为有效子模块。
94.在一种可能的设计中,所述编码规则至少包括国军标9765-2020vhdl编码规则、国军标10157-2021verilog编码规则、starc编码规则、rmm编码规则和/或do-254编码规则。
95.在一种可能的设计中,每一所述编码规则中对应设置有编码范例和若干修改意见。
96.第三方面,本发明提供一种计算机设备,其特征在于,包括依次通信相连的存储器、处理器和收发器,其中,所述存储器用于存储计算机程序,所述收发器用于收发消息,所述处理器用于读取所述计算机程序,执行如第一方面任意一种可能的设计中所述的fpga代码规则检测方法。
97.第四方面,本发明提供一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,当所述指令在计算机上运行时,执行如第一方面任意一种可能的设计中所述的fpga代码规则检测方法。
98.第五方面,本发明提供一种包含指令的计算机程序产品,当所述指令在计算机上运行时,使所述计算机执行如第一方面任意一种可能的设计中所述的如第一方面任意一种可能的设计中所述的fpga代码规则检测方法。
99.最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1