CN109032934A - 一种fpga/ip核逻辑代码安全规则检测方法 - Google Patents

一种fpga/ip核逻辑代码安全规则检测方法 Download PDF

Info

Publication number
CN109032934A
CN109032934A CN201810749749.4A CN201810749749A CN109032934A CN 109032934 A CN109032934 A CN 109032934A CN 201810749749 A CN201810749749 A CN 201810749749A CN 109032934 A CN109032934 A CN 109032934A
Authority
CN
China
Prior art keywords
expression formula
parsing
matched
morphology
file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201810749749.4A
Other languages
English (en)
Other versions
CN109032934B (zh
Inventor
李东方
王晓龙
陈丽容
胡亚云
朱秋岩
王宏
王志昊
沈炜
王纪
叶东升
吴超
张建伟
宋珺
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Institute of Computer Technology and Applications
Original Assignee
Beijing Institute of Computer Technology and Applications
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Institute of Computer Technology and Applications filed Critical Beijing Institute of Computer Technology and Applications
Priority to CN201810749749.4A priority Critical patent/CN109032934B/zh
Publication of CN109032934A publication Critical patent/CN109032934A/zh
Application granted granted Critical
Publication of CN109032934B publication Critical patent/CN109032934B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明涉及一种FPGA/IP核逻辑代码安全规则检测方法,涉及FPGA/IP核验证技术领域。本发明根据所设计的自定义安全规则检测条款和现有商业条款相结合,在自定义安全规则检测条款增加并实现了FPGA状态机死锁、内部三态等规则条款,提高了FPGA代码的质量;删减根本不适用于FPGA的可测试性设计的规则、电气特性检测等规则,有效的降低了无效警示规则条款。

Description

一种FPGA/IP核逻辑代码安全规则检测方法
技术领域
本发明涉及FPGA验证技术领域,具体涉及一种FPGA/IP核逻辑代码安全规则检测方法。
背景技术
在可编程器件的验证方面,主要有模拟验证、形式化验证、静态规则检测等方法。在使用模拟仿真的验证方法时,模拟器的仿真速度会随着设计规模的增长大幅下降,同时增大的设计规模也会导致软件模拟器在仿真过程中出现错误的概率不断增加。在使用形式化方法时也面临同样的问题,由于设计规模的增加,即使是模块级的设计,其规模也变得很大,而形式化方法存在状态空间爆炸的问题使得形式化检验工具在处理设计时变得力不从心。静态规则检测方法是控制可编程器件设计源头质量最有效的方法,具有投入资源少,效率高等优点,其核心是规则集的准确性。
目前国内主要采用国外商用规则检测工具,包括Spyglass、Alint、LEDA等。上述工具主要采用STARC、DO-254、Aldec和RMM规则集等,这些规则集主要针对集成电路前端到后端设计规则的检测。缺少一些针对可编程器件的安全规则集。因此,建立一套较为完善的综合规则检测流程,适用于FPGA的规则检测是非常必要的。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何提高FPGA代码的质量。
(二)技术方案
为了解决上述技术问题,本发明提供了一种FPGA/IP核逻辑代码安全规则检测方法,包括以下步骤:
步骤1:将待验证FPGA的Verilog HDL代码输入使用进行规则检测,得出常规规则检测结果;
步骤2:根据待测FPGA的需求规格说明,编写自定义规则检测条款,得到对应的自定义规则检测程序,用于实现对Verilog HDL/VHDL硬件描述语言的错误词法、语法、语义的解析和检测;
步骤3:将待验证FPGA的Verilog HDL代码输入所述自定义规则检测程序;
步骤4:利用所述自定义规则检测程序对待测设计依次进行词法解析、语法解析、规则检测;
步骤5:将步骤4的结果与所示自定义规则检测条款进行对比,得出自定义安全规则检测结果;
步骤6:将常规规则检测结果和自定义安全规则检测结果进行合并、统计,并按照缺陷类型进行分类,得到最终的规则检测的结果。
优选地,步骤4中,词法解析的原理是使用正则表达式完成对输入流的字符串词法匹配,并通过标签的方式返回匹配到的词法表达式,从而把源代码解析为标签表达式,语法解析的原理是使用特定的语法规则将标签表达式转换为语法树,规则检测原理是分析语法树,根据自定义规则检测条款判断分析结果是否符合自定义规则检测条款,实现检测功能。
优选地,所述自定义规则检测条款根据于可编程器件应用特点和软件评测方法设计,如表1:
表1
优选地,所述自定义规则检测条款各条所对应的实现方式为:
R001:首先读取文件进行词法解析,匹配表达式,如果匹配到常量或变量表达式就返回标签,并给yylval赋值,进入语法解析,如果匹配到if()变量<=/=常量或者else变量<=/=常量表达式则进行规制检查,查看两个赋值表达式是否在操作一个变量,是则命中R001规制,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R002:首先读取文件进行词法解析,匹配到CASE表达式跳到FSM状态,匹配到ENDCASE跳到INITIAL状态,在FSM状态下匹配到OFFSHOOT表达式返回标签,进入语法解析,分析表达式并计数,ENDCASE表达式计数清零,如果计数大于40则命中R002规则,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R003:首先读取文件进行词法解析,匹配到REPEAT/WIRE/REG表达式返回,进入语法解析,分析表达式,如果匹配到WIRE/REG表达式则在变量链表里添加一个节点,如果是REPEAT表达式就遍历变量链表,查看是否存在该节点,是则命中R003规则,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R004:首先读取文件进行词法解析,CASE表达式跳到FSM状态,匹配到ENDCASE跳到INITIAL状态,在FSM状态下匹配到OFFSHOOT表达式返回,进入语法解析,分析表达式并遍历分支链表,断言查看分支链表里有和OFFSHOOT表达式相同的表项,是则输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R005:首先读取文件进行词法解析,匹配到赋值/CASE/ENDCASE表达式返回,进入语法解析,分析表达式,如果匹配赋值表达式则在赋值链表中加入表项,CASE表达式则创建FSM结构,ENDCASE表达式先遍历赋值链表,如果没有找到与FSM结构相同的赋值节点,则输出错误信息,最后删除FSM结构,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R006:首先读取文件进行词法解析,匹配到INPUT/OUTPUT/BODY表达式返回,进入语法解析,分析表达式,如果匹配INPUT/OUTPUT表达式则在链表中加入表项,匹配到BODY表达式则遍历链表,如果匹配到相同表项则更新节点的悬空标志位,全部解析完成后遍历链表,没有置位悬空标志位的节点输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R007:首先读取文件进行词法解析,如果匹配到状态机表达式就返回标签,并给yylval赋值,进入语法解析,如果匹配到状态机表达式则在FSM链表里添加一个节点并更新其状态,然后递归返回继续词法解析流程直至文件读取结束,当整个文件读取结束后遍历FSM链表里的所有节点,查看是否有该节点无跳转或无其它节点跳转到该节点的情况,如是则命中R-14-1规则,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R008:首先读取文件进行词法解析,如果匹配到指定表达式就返回,并给yylval赋值,进入语法解析,匹配到WIRE/REG表达式后添加节点到FSM链表中,在default表达式中解析赋值语句,遍历链表中的节点与default中的赋值语句左值比较,相等就把节点中的标记置位,否则退出,然后递归返回继续词法解析流程直至文件读取结束,当整个文件读取结束后遍历FSM链表里的所有节点,查看是否有该节点标记没置位的情况,如是则命中R-14-2规则,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R009:首先读取文件进行词法解析,如果匹配到BUFG表达式就返回,进入语法解析,匹配到BUFG表达式后置位标志位,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R010:首先读取文件进行词法解析,如果匹配到WIRE/REG表达式就返回,进入语法解析,分析表达式中每一个信号,如果有信号没有被定义时赋值,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R011:首先读取文件进行词法解析,匹配到解析数据表中的表达式返回,进入语法解析,分析表达式,统计左端空格,与上一次统计量进行对比,如果不对齐输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R012:首先读取文件进行词法解析,匹配到解析数据表中的表达式返回,进入语法解析,分析表达式,统计左端空格,与上一次统计量进行对比,如果不对齐输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R013:首先读取文件进行词法解析,匹配到/**/或者//表达式或者非空换行符就返回,进入语法解析,分析表达式中对换行符和/**/或//标签做统计,如果/**/+换行除以有效换行次数小于20%,输出报错信息;否则结束;
R014:首先读取文件进行词法解析,匹配到PARAMETER、WIRE、REG、MEMORY表达式返回,进入语法解析,分析表达式,如果是PARAMETER标签的表达式就判断是否含小写字母,是则输出报错信息,如果是另三种表达式校验除首字符外是否有大写字符,是则输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R015:首先读取文件进行词法解析,匹配到ALWAYS/IF/ELSE表达式返回,进入语法解析,分析表达式,如果匹配到ALWAYS表达式,分析表达式中的复位信号存入链表,如果匹配到end则删除保存的复位信号,如果匹配到IF/ELSE表达式,分析表达式,如果使用了两个复位信号,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R016:首先读取文件进行词法解析,匹配到解析数据表中的表达式返回,进入语法解析,分析表达式,如果遇到FSM标签则在FSM链表中添加一个节点,如果遇到ENDCASE标签则删除一个节点,如果遇到OFFSHOOT标签则在FSM节点中的分支链表里添加一个分支节点,如果遇到JUMP标签就遍历分支链表,然后转换JUMP标签数据的左右值位宽,比较位宽,如果位宽不一致输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R017:首先读取文件进行词法解析,匹配到解析数据表中的表达式返回,进入语法解析,分析表达式,如果匹配ALWAYS表达式,分析表达式中的时钟信号并保存,如果匹配ASSIGN表达式,分析表达式左值和右值,对比之前ALWAYS保存的时钟信号,如果是行波时钟,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R018:首先读取文件进行词法解析,匹配到IF/ELSE/CASE表达式返回,进入语法解析,分析表达式,如果表达式中包含x或z字符,输出报错信息;然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R019:首先读取文件进行词法解析,匹配到INPUT/OUTPUT/ASSIGN表达式返回,进入语法解析,分析表达式,如果匹配INPUT/OUTPUT表达式,则在链表中加入节点,如果匹配ASSIGN表达式,则遍历链表找到和ASSIGN表达式左值相等的节点,比较节点位宽和ASSIGN右值位宽,如果不相等,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R020:首先读取ISE编译综合文件*.spr文件,匹配到Safe Implementation字段后查看字段后的选项是YES或者NO,如果是YES表示编译模式是safe模式,否则输出错误信息。
优选地,所述商业工具为LEDA、Alint、Autocheck中的一种。
优选地,所述商业工具采用STARC规则集、DO-254规则集、RMM规则集、Aldec规则集以及各FPGA厂商的规则集。
优选地,步骤2中,完成所述自定义规则检测程序通过C语言编程实现,使用Lex(flex)软件包实现词法解析功能,使用Yacc(bison)软件包实现了语法解析功能,最后输出一个可执行程序来检测Verilog HDL源代码。
优选地,所述特定的语法规则为移进-归约算法。
优选地,R011条款在实现时,统计左端空格若遇到CASE/IF/ELSE分支语句压栈,分支语句结束后弹栈。
(三)有益效果
本发明根据所设计的自定义安全规则检测条款和现有商业条款相结合,在自定义安全规则检测条款增加并实现了FPGA状态机死锁、内部三态等规则条款,提高了FPGA代码的质量;删减根本不适用于FPGA的可测试性设计的规则、电气特性检测等规则,有效的降低了无效警示规则条款。
附图说明
图1是本发明的方法主流程图;
图2是本发明的自定义安全规则检测程序实现流程图;
图3是算法实现流程图,其中a~p为R001~R016的实现流程图,q为R018的实现流程图,r为R019的实现流程图。
具体实施方式
为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
针对目前静态规则检测方法缺少可编程器件安全规则子集的问题,本发明提出了一套较为完善的综合规则检测方法,可适用于FPGA/IP核的逻辑代码安全规则检测,有效地检测FPGA或IP核的RTL代码的规范性。如图1所示,本发明的FPGA/IP核逻辑代码安全规则检测方法包括以下步骤:
步骤1:将待验证FPGA的Verilog HDL代码输入使用商业工具(如LEDA、Alint、Autocheck)进行常规规则检测,得出常规规则检测结果。上述商业工具主要采用STARC规则集、DO-254规则集、RMM规则集、Aldec规则集以及各FPGA厂商的规则集等。
步骤2:根据待测FPGA的需求规格说明,编写自定义规则检测条款,得到对应的自定义规则检测程序。
在自定义的安全规则检测过程中,采用了自定义的20条规则检测条款,用于实现对Verilog HDL/VHDL硬件描述语言的错误词法、语法、语义的解析和检测,完成该程序通过C语言编程实现,使用了Lex(flex)软件包实现词法解析功能,使用了Yacc(bison)软件包实现了语法解析功能。最后输出一个可执行程序来检测Verilog HDL源代码。
自定义规则检测条款根据于可编程器件应用特点和软件评测方法设计,增加FPGA状态机、内部三态等规则条款,如表1:
表1
具体实现算法为:
R001:程序首先读取文件进行词法解析,匹配表达式(IF/ELSE/ASSIGN等),如果匹配到常量/变量表达式就返回标签,并给yylval赋值,进入语法解析模块处理,语法解析模块如果匹配到if()变量<=/=常量或者else变量<=/=常量表达式则进行规制检查,查看两个赋值表达式是否在操作一个变量,是则命中R001规制,输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R002:程序首先读取文件进行词法解析,匹配到CASE表达式跳到FSM状态,匹配到ENDCASE跳到INITIAL状态,在FSM状态下匹配到OFFSHOOT表达式返回标签,进入语法解析模块处理。语法解析模块分析表达式并计数,ENDCASE表达式计数清零,如果计数大于40则命中R002规则,输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R003:程序首先读取文件进行词法解析,匹配到REPEAT/WIRE/REG表达式返回,进入语法解析模块处理。语法解析模块分析表达式,如果匹配到WIRE/REG表达式则在变量链表里添加一个节点。如果是REPEAT表达式就遍历变量链表,查看是否存在该节点,是则命中R003规则,输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R004:程序首先读取文件进行词法解析,CASE表达式跳到FSM状态,匹配到ENDCASE跳到INITIAL状态,在FSM状态下匹配到OFFSHOOT表达式返回,进入语法解析模块处理。语法解析模块分析表达式并遍历分支链表,断言查看分支链表里有和OFFSHOOT表达式相同的表项,是则输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R005:程序首先读取文件进行词法解析,匹配到赋值/CASE/ENDCASE表达式返回,进入语法解析模块处理。语法解析模块分析表达式,如果匹配赋值表达式则在赋值链表中加入表项,CASE表达式则创建FSM结构,ENDCASE表达式先遍历赋值链表,如果没有找到与FSM结构相同的赋值节点,则输出错误信息。最后删除FSM结构。然后递归返回继续词法解析流程直至文件读取结束。
R006:程序首先读取文件进行词法解析,匹配到INPUT/OUTPUT/BODY表达式返回,进入语法解析模块处理。语法解析模块分析表达式,如果匹配INPUT/OUTPUT表达式则在链表中加入表项,匹配到BODY表达式则遍历链表,如果匹配到相同表项则更新节点的悬空标志位。全部解析完成后遍历链表,没有置位悬空标志位的节点输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R007:程序首先读取文件进行词法解析,如果匹配到状态机表达式就返回标签,并给yylval赋值,进入语法解析模块处理,语法解析模块如果匹配到状态机表达式则在FSM链表里添加一个节点并更新其状态,然后递归返回继续词法解析流程直至文件读取结束,当整个文件读取结束后遍历FSM链表里的所有节点,查看是否有该节点无跳转或无其它节点跳转到该节点的情况,如是则命中R-14-1规则,输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R008:程序首先读取文件进行词法解析,如果匹配到指定表达式就返回,并给yylval赋值,进入语法解析模块处理。语法解析模块匹配到WIRE/REG表达式后添加节点到FSM链表中,在default表达式中解析赋值语句,遍历链表中的节点与default中的赋值语句左值比较,相等就把节点中的标记置位,否则退出,然后递归返回继续词法解析流程直至文件读取结束。当整个文件读取结束后遍历FSM链表里的所有节点,查看是否有该节点标记没置位的情况,如是则命中R-14-2规则,输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R009:程序首先读取文件进行词法解析,如果匹配到BUFG表达式就返回,进入语法解析模块处理。语法解析模块匹配到BUFG表达式后置位标志位,输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R010:程序首先读取文件进行词法解析,如果匹配到WIRE/REG表达式就返回,进入语法解析模块处理。语法解析模块分析表达式中每一个信号,如果有信号没有被定义时赋值,输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R011:程序首先读取文件进行词法解析,匹配到解析数据表中的表达式返回,进入语法解析模块处理。语法解析模块分析表达式,统计左端空格(遇到CASE/IF/ELSE等分支语句压栈,分支语句结束后弹栈),与上一次统计量进行对比,如果不对齐(计算空格数量和TAB数量)输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R012:程序首先读取文件进行词法解析,匹配到解析数据表中的表达式返回,进入语法解析模块处理。语法解析模块分析表达式,统计左端空格(计算TAB键),与上一次统计量进行对比,如果不对齐(计算空格数量和TAB数量)输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R013:程序首先读取文件进行词法解析,匹配到/**/或者//表达式或者非空换行符就返回,进入语法解析模块处理。语法解析模块分析表达式中对换行符和/**/或//标签做统计,如果/**/+换行除以有效换行次数小于20%,输出报错信息。
R014:程序首先读取文件进行词法解析,匹配到PARAMETER、WIRE、REG、MEMORY表达式返回,进入语法解析模块处理。语法解析模块分析表达式,如果是PARAMETER标签的表达式就判断是否含小写字母,是则输出报错信息。如果是另三种表达式校验除首字符外是否有大写字符,是则输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R015:程序首先读取文件进行词法解析,匹配到ALWAYS/IF/ELSE表达式返回,进入语法解析模块处理。语法解析模块分析表达式,如果匹配到ALWAYS表达式,分析表达式中的复位信号存入链表。如果匹配到end则删除保存的复位信号。如果匹配到IF/ELSE表达式,分析表达式,如果使用了两个复位信号,输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R016:程序首先读取文件进行词法解析,匹配到解析数据表中的表达式返回,进入语法解析模块处理。语法解析模块分析表达式,如果遇到FSM标签则在FSM链表中添加一个节点,如果遇到ENDCASE标签则删除一个节点,如果遇到OFFSHOOT标签则在FSM节点中的分支链表里添加一个分支节点,如果遇到JUMP标签就遍历分支链表,然后转换JUMP标签数据的左右值位宽,比较位宽,如果位宽不一致输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R017:程序首先读取文件进行词法解析,匹配到解析数据表中的表达式返回,进入语法解析模块处理。语法解析模块分析表达式,如果匹配ALWAYS表达式,分析表达式中的时钟信号并保存,如果匹配ASSIGN表达式,分析表达式左值和右值,对比之前ALWAYS保存的时钟信号,如果是行波时钟,输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R018:程序首先读取文件进行词法解析,匹配到IF/ELSE/CASE表达式返回,进入语法解析模块处理。语法解析模块分析表达式,如果表达式中包含x或z字符,输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R019:程序首先读取文件进行词法解析,匹配到INPUT/OUTPUT/ASSIGN表达式返回,进入语法解析模块处理。语法解析模块分析表达式,如果匹配INPUT/OUTPUT表达式,则在链表中加入节点,如果匹配ASSIGN表达式,则遍历链表找到和ASSIGN表达式左值相等的节点,比较节点位宽和ASSIGN右值位宽,如果不相等,输出报错信息。然后递归返回继续词法解析流程直至文件读取结束。
R020:程序首先读取ISE编译综合文件*.spr文件,匹配到Safe Implementation字段后查看字段后的选项是YES或者NO,如果是YES表示编译模式是safe模式,否则输出错误信息。
步骤3:将待验证FPGA的Verilog HDL代码输入所述自定义规则检测程序。
步骤4:利用所述自定义规则检测程序对待测设计依次进行词法解析、语法解析、规则检测。
词法解析原理是使用正则表达式完成对输入流的字符串词法匹配,并通过标签的方式返回匹配到的词法表达式,从而把源代码解析为标签表达式。语法解析原理是使用特定的语法规则(本实施例中使用移进-归约算法)将标签表达式转换为语法树。规则检测原理是分析语法树,根据自定义规则检测条款判断分析结果是否符合自定义规则检测条款(断言检查),实现检测功能。自定义安全规则检测程序实现流程如图2所示。
词法解析的正则表达式表意字符表如表2:
表2
表意字符 匹配字符
. 除换行外的所有字符
\n 换行
* 0次或无限次重复前面的表达式
+ 1次或更多次重复前面的表达式
a|b a或者b
(ab)+ 1次或多次重复ab
“a+b” 字符串a+b本身
[] 字符类
表达式
abc abc
abc* ab abc abcc abccc…
abc+ abc abcc abccc abcccc…
[abc] a,b,c中的一个
[a-z] 从a到z中的任意字符
[A-Za-z0-9]+ 一个或更多个字母或数字
[\t\n]+ 空白区
步骤5:将步骤4的结果与所示自定义规则检测条款进行对比,得出自定义安全规则检测结果。
步骤6:将常规规则检测结果和自定义安全规则检测结果进行合并、统计,并按照缺陷类型进行分类,得到最终的规则检测的结果。
其中步骤1与,步骤2至步骤5可以并列执行。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

Claims (9)

1.一种FPGA/IP核逻辑代码安全规则检测方法,其特征在于,包括以下步骤:
步骤1:将待验证FPGA的Verilog HDL代码输入使用进行规则检测,得出常规规则检测结果;
步骤2:根据待测FPGA的需求规格说明,编写自定义规则检测条款,得到对应的自定义规则检测程序,用于实现对Verilog HDL/VHDL硬件描述语言的错误词法、语法、语义的解析和检测;
步骤3:将待验证FPGA的Verilog HDL代码输入所述自定义规则检测程序;
步骤4:利用所述自定义规则检测程序对待测设计依次进行词法解析、语法解析、规则检测;
步骤5:将步骤4的结果与所示自定义规则检测条款进行对比,得出自定义安全规则检测结果;
步骤6:将常规规则检测结果和自定义安全规则检测结果进行合并、统计,并按照缺陷类型进行分类,得到最终的规则检测的结果。
2.如权利要求1所述的方法,其特征在于,步骤4中,词法解析的原理是使用正则表达式完成对输入流的字符串词法匹配,并通过标签的方式返回匹配到的词法表达式,从而把源代码解析为标签表达式,语法解析的原理是使用特定的语法规则将标签表达式转换为语法树,规则检测原理是分析语法树,根据自定义规则检测条款判断分析结果是否符合自定义规则检测条款,实现检测功能。
3.如权利要求1所述的方法,其特征在于,所述自定义规则检测条款根据于可编程器件应用特点和软件评测方法设计,如表1:
表1
4.如权利要求3所述的方法,其特征在于,所述自定义规则检测条款各条所对应的实现方式为:
R001:首先读取文件进行词法解析,匹配表达式,如果匹配到常量或变量表达式就返回标签,并给yylval赋值,进入语法解析,如果匹配到if()变量<=/=常量或者else变量<=/=常量表达式则进行规制检查,查看两个赋值表达式是否在操作一个变量,是则命中R001规制,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R002:首先读取文件进行词法解析,匹配到CASE表达式跳到FSM状态,匹配到ENDCASE跳到INITIAL状态,在FSM状态下匹配到OFFSHOOT表达式返回标签,进入语法解析,分析表达式并计数,ENDCASE表达式计数清零,如果计数大于40则命中R002规则,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R003:首先读取文件进行词法解析,匹配到REPEAT/WIRE/REG表达式返回,进入语法解析,分析表达式,如果匹配到WIRE/REG表达式则在变量链表里添加一个节点,如果是REPEAT表达式就遍历变量链表,查看是否存在该节点,是则命中R003规则,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R004:首先读取文件进行词法解析,CASE表达式跳到FSM状态,匹配到ENDCASE跳到INITIAL状态,在FSM状态下匹配到OFFSHOOT表达式返回,进入语法解析,分析表达式并遍历分支链表,断言查看分支链表里有和OFFSHOOT表达式相同的表项,是则输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R005:首先读取文件进行词法解析,匹配到赋值/CASE/ENDCASE表达式返回,进入语法解析,分析表达式,如果匹配赋值表达式则在赋值链表中加入表项,CASE表达式则创建FSM结构,ENDCASE表达式先遍历赋值链表,如果没有找到与FSM结构相同的赋值节点,则输出错误信息,最后删除FSM结构,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R006:首先读取文件进行词法解析,匹配到INPUT/OUTPUT/BODY表达式返回,进入语法解析,分析表达式,如果匹配INPUT/OUTPUT表达式则在链表中加入表项,匹配到BODY表达式则遍历链表,如果匹配到相同表项则更新节点的悬空标志位,全部解析完成后遍历链表,没有置位悬空标志位的节点输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R007:首先读取文件进行词法解析,如果匹配到状态机表达式就返回标签,并给yylval赋值,进入语法解析,如果匹配到状态机表达式则在FSM链表里添加一个节点并更新其状态,然后递归返回继续词法解析流程直至文件读取结束,当整个文件读取结束后遍历FSM链表里的所有节点,查看是否有该节点无跳转或无其它节点跳转到该节点的情况,如是则命中R-14-1规则,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R008:首先读取文件进行词法解析,如果匹配到指定表达式就返回,并给yylval赋值,进入语法解析,匹配到WIRE/REG表达式后添加节点到FSM链表中,在default表达式中解析赋值语句,遍历链表中的节点与default中的赋值语句左值比较,相等就把节点中的标记置位,否则退出,然后递归返回继续词法解析流程直至文件读取结束,当整个文件读取结束后遍历FSM链表里的所有节点,查看是否有该节点标记没置位的情况,如是则命中R-14-2规则,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R009:首先读取文件进行词法解析,如果匹配到BUFG表达式就返回,进入语法解析,匹配到BUFG表达式后置位标志位,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R010:首先读取文件进行词法解析,如果匹配到WIRE/REG表达式就返回,进入语法解析,分析表达式中每一个信号,如果有信号没有被定义时赋值,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R011:首先读取文件进行词法解析,匹配到解析数据表中的表达式返回,进入语法解析,分析表达式,统计左端空格,与上一次统计量进行对比,如果不对齐输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R012:首先读取文件进行词法解析,匹配到解析数据表中的表达式返回,进入语法解析,分析表达式,统计左端空格,与上一次统计量进行对比,如果不对齐输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R013:首先读取文件进行词法解析,匹配到/**/或者//表达式或者非空换行符就返回,进入语法解析,分析表达式中对换行符和/**/或//标签做统计,如果/**/+换行除以有效换行次数小于20%,输出报错信息;否则结束;
R014:首先读取文件进行词法解析,匹配到PARAMETER、WIRE、REG、MEMORY表达式返回,进入语法解析,分析表达式,如果是PARAMETER标签的表达式就判断是否含小写字母,是则输出报错信息,如果是另三种表达式校验除首字符外是否有大写字符,是则输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R015:首先读取文件进行词法解析,匹配到ALWAYS/IF/ELSE表达式返回,进入语法解析,分析表达式,如果匹配到ALWAYS表达式,分析表达式中的复位信号存入链表,如果匹配到end则删除保存的复位信号,如果匹配到IF/ELSE表达式,分析表达式,如果使用了两个复位信号,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R016:首先读取文件进行词法解析,匹配到解析数据表中的表达式返回,进入语法解析,分析表达式,如果遇到FSM标签则在FSM链表中添加一个节点,如果遇到ENDCASE标签则删除一个节点,如果遇到OFFSHOOT标签则在FSM节点中的分支链表里添加一个分支节点,如果遇到JUMP标签就遍历分支链表,然后转换JUMP标签数据的左右值位宽,比较位宽,如果位宽不一致输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R017:首先读取文件进行词法解析,匹配到解析数据表中的表达式返回,进入语法解析,分析表达式,如果匹配ALWAYS表达式,分析表达式中的时钟信号并保存,如果匹配ASSIGN表达式,分析表达式左值和右值,对比之前ALWAYS保存的时钟信号,如果是行波时钟,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R018:首先读取文件进行词法解析,匹配到IF/ELSE/CASE表达式返回,进入语法解析,分析表达式,如果表达式中包含x或z字符,输出报错信息;然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R019:首先读取文件进行词法解析,匹配到INPUT/OUTPUT/ASSIGN表达式返回,进入语法解析,分析表达式,如果匹配INPUT/OUTPUT表达式,则在链表中加入节点,如果匹配ASSIGN表达式,则遍历链表找到和ASSIGN表达式左值相等的节点,比较节点位宽和ASSIGN右值位宽,如果不相等,输出报错信息,然后递归返回继续词法解析流程直至文件读取结束;否则结束;
R020:首先读取ISE编译综合文件*.spr文件,匹配到Safe Implementation字段后查看字段后的选项是YES或者NO,如果是YES表示编译模式是safe模式,否则输出错误信息。
5.如权利要求1所述的方法,其特征在于,所述商业工具为LEDA、Alint、Autocheck中的一种。
6.如权利要求1所述的方法,其特征在于,所述商业工具采用STARC规则集、DO-254规则集、RMM规则集、Aldec规则集以及各FPGA厂商的规则集。
7.如权利要求1所述的方法,其特征在于,步骤2中,完成所述自定义规则检测程序通过C语言编程实现,使用Lex(flex)软件包实现词法解析功能,使用Yacc(bison)软件包实现了语法解析功能,最后输出一个可执行程序来检测Verilog HDL源代码。
8.如权利要求3所述的方法,其特征在于,所述特定的语法规则为移进-归约算法。
9.如权利要求4所述的方法,其特征在于,R011条款在实现时,统计左端空格若遇到CASE/IF/ELSE分支语句压栈,分支语句结束后弹栈。
CN201810749749.4A 2018-07-10 2018-07-10 一种fpga/ip核逻辑代码安全规则检测方法 Active CN109032934B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810749749.4A CN109032934B (zh) 2018-07-10 2018-07-10 一种fpga/ip核逻辑代码安全规则检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810749749.4A CN109032934B (zh) 2018-07-10 2018-07-10 一种fpga/ip核逻辑代码安全规则检测方法

Publications (2)

Publication Number Publication Date
CN109032934A true CN109032934A (zh) 2018-12-18
CN109032934B CN109032934B (zh) 2021-07-02

Family

ID=64641536

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810749749.4A Active CN109032934B (zh) 2018-07-10 2018-07-10 一种fpga/ip核逻辑代码安全规则检测方法

Country Status (1)

Country Link
CN (1) CN109032934B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111400984A (zh) * 2020-03-05 2020-07-10 中科亿海微电子科技(苏州)有限公司 一种生成解析verilog电路网表编译器的系统及方法
US11403433B2 (en) 2020-01-17 2022-08-02 Visa International Service Association System, method, and computer program product for encrypting sensitive data using a field programmable gate array

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080072323A1 (en) * 2006-09-14 2008-03-20 Dachuan Yu Information flow enforcement for risc-style assembly code in the presence of timing-related covert channels and multi-threading
CN101710378A (zh) * 2009-10-10 2010-05-19 北京理工大学 一种基于序列模式挖掘的软件安全漏洞检测方法
CN102012991A (zh) * 2010-11-09 2011-04-13 北京神舟航天软件技术有限公司 基于静态分析的c语言安全规则检查方法
CN105573727A (zh) * 2014-10-13 2016-05-11 镇江鼎拓科技信息有限公司 一种编译器前端自动构造的方法
US9349015B1 (en) * 2012-06-12 2016-05-24 Galois, Inc. Programmatically detecting collusion-based security policy violations

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080072323A1 (en) * 2006-09-14 2008-03-20 Dachuan Yu Information flow enforcement for risc-style assembly code in the presence of timing-related covert channels and multi-threading
CN101710378A (zh) * 2009-10-10 2010-05-19 北京理工大学 一种基于序列模式挖掘的软件安全漏洞检测方法
CN102012991A (zh) * 2010-11-09 2011-04-13 北京神舟航天软件技术有限公司 基于静态分析的c语言安全规则检查方法
US9349015B1 (en) * 2012-06-12 2016-05-24 Galois, Inc. Programmatically detecting collusion-based security policy violations
CN105573727A (zh) * 2014-10-13 2016-05-11 镇江鼎拓科技信息有限公司 一种编译器前端自动构造的方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JODY: ""Adapting Safety Rules in a High Reliability Context"", 《MANAGEMENT COMMUNICATION QUARTERLY》 *
赵利民等: ""C指针安全性的分析检测"", 《天水师范学院学报》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11403433B2 (en) 2020-01-17 2022-08-02 Visa International Service Association System, method, and computer program product for encrypting sensitive data using a field programmable gate array
US11755787B2 (en) 2020-01-17 2023-09-12 Visa International Service Association System, method, and computer program product for encrypting sensitive data using a field programmable gate array
CN111400984A (zh) * 2020-03-05 2020-07-10 中科亿海微电子科技(苏州)有限公司 一种生成解析verilog电路网表编译器的系统及方法

Also Published As

Publication number Publication date
CN109032934B (zh) 2021-07-02

Similar Documents

Publication Publication Date Title
CN106445795B (zh) 一种数据库sql效率检测方法及装置
CN105787367B (zh) 一种软件更新的补丁安全性检测方法及系统
US9021446B2 (en) Uncoverage tool
CN107633227A (zh) 一种基于csi的细粒度手势识别方法和系统
CN109657473A (zh) 一种基于深度特征的细粒度漏洞检测方法
CN106980637A (zh) Sql审核方法和装置
CN109032934A (zh) 一种fpga/ip核逻辑代码安全规则检测方法
Han et al. Deriving minimal conflict sets by CS-trees with mark set in diagnosis from first principles
CN107239694A (zh) 一种基于用户评论的Android应用权限推理方法及装置
CN109857641A (zh) 对程序源文件进行缺陷检测的方法及装置
CN107085533B (zh) 一种指针修改影响的分析方法和系统
CN109711159A (zh) 一种基于信息流的ip核rtl级代码安全漏洞检测方法
CN107273465A (zh) Sql注入检测方法
CN115269427A (zh) 针对web注入漏洞的中间语言表示方法及系统
CN108563561A (zh) 一种程序隐性约束提取方法及系统
Groz et al. Efficient testing and matching of deterministic regular expressions
Barr et al. Vulnerability rating of source code with token embedding and combinatorial algorithms
US6715107B2 (en) Method and system for reducing the computation tree to include only model behaviors defined succinctly by a user via regular expressions as being of interest
Groz et al. Deterministic regular expressions in linear time
CN111045670A (zh) 一种二进制代码与源代码间复用关系的识别方法与装置
CN114253862A (zh) 一种hdl代码仿真覆盖率异步事件驱动自动分析方法
CN109725900A (zh) 寄存器传输级Verilog代码的SMV模型构建方法
Rask et al. Simulation and comparison of Albrecht's function point and DeMarco's function bang metrics in a CASE environment
CN107291749A (zh) 一种数据指标关联关系的确定方法及装置
CN114201941A (zh) 一种芯片性能验证方法及装置、电子设备、存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant