CN109725900B - 寄存器传输级Verilog代码的SMV模型构建方法 - Google Patents

寄存器传输级Verilog代码的SMV模型构建方法 Download PDF

Info

Publication number
CN109725900B
CN109725900B CN201910010500.6A CN201910010500A CN109725900B CN 109725900 B CN109725900 B CN 109725900B CN 201910010500 A CN201910010500 A CN 201910010500A CN 109725900 B CN109725900 B CN 109725900B
Authority
CN
China
Prior art keywords
node
statement
variable
exp
nodes
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.)
Active
Application number
CN201910010500.6A
Other languages
English (en)
Other versions
CN109725900A (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.)
Huaxin Anxin (Beijing) Technology Co., Ltd
Northwestern Polytechnical University
Original Assignee
Huaxin Anxin Beijing Technology Co Ltd
Northwestern Polytechnical University
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 Huaxin Anxin Beijing Technology Co Ltd, Northwestern Polytechnical University filed Critical Huaxin Anxin Beijing Technology Co Ltd
Priority to CN201910010500.6A priority Critical patent/CN109725900B/zh
Publication of CN109725900A publication Critical patent/CN109725900A/zh
Application granted granted Critical
Publication of CN109725900B publication Critical patent/CN109725900B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种寄存器传输级Verilog代码的SMV模型构建方法,用于解决现有寄存器传输级的SMV模型构建方法独立性差的技术问题。技术方案是采用静态分析Verilog代码的方法得到每个模块对应的控制流图,深度遍历控制流图得到模块中每个变量的<pc,exp>列表,利用<pc,exp>列表构建模块对应的SMV模型。其中,pc是路径条件,exp是在pc为真的情况下变量的表达式。本发明在读入Verilog代码后,针对生成的Verilog代码的解析树,不需要依赖第三方工具进行数据格式的转换和存储,可以作为一个独立的方法将输入的Verilog代码直接转换为SMV模型,实用性好。

Description

寄存器传输级Verilog代码的SMV模型构建方法
技术领域
本发明涉及一种寄存器传输级的SMV模型构建方法,特别涉及一种寄存器传输级Verilog代码的SMV模型构建方法。
背景技术
现有的模型检测大多针对门级电路进行建模,建立的模型相对寄存器传输级会复杂很多,也不利于设计者分析验证的结果。目前公布的技术和文献中,针对寄存器传输级的硬件设计安全的模型检测验证方法非常有限。
文献“Verilog2SMV:A tool for word-level verification,2016Design,Automation&Test in Europe Conference&Exhibition(DATE),Dresden,2016,pp.1156-1159”公开了一种寄存器传输级的Symbolic Model Verifier(以下简称SMV)模型构建方法,用于验证寄存器传输级Verilog代码。该方法首先利用开源综合工具Yosys将寄存器传输级Verilog代码平面化,然后依据平面化的结果利用Yosys综合成寄存器传输级电路。寄存器传输级电路输入到一个新的Yosys模块,这个模块将输入的寄存器传输级电路转换成一个对应的SMV模型。这种方法间接地构造出SMV模型,过分依赖于第三方专用工具Yosys,需要依靠Yosys进行数据的转换和存储,相当于Yosys的一个扩展功能模块,独立性较差。
发明内容
为了克服现有寄存器传输级的SMV模型构建方法独立性差的不足,本发明提供一种寄存器传输级Verilog代码的SMV模型构建方法。该方法采用静态分析Verilog代码的方法得到每个模块对应的控制流图,深度遍历控制流图得到模块中每个变量的<pc,exp>列表,利用<pc,exp>列表构建模块对应的SMV模型。其中,pc是路径条件,exp是在pc为真的情况下变量的表达式。本发明在读入Verilog代码后,针对生成的Verilog代码的解析树,不需要依赖第三方工具进行数据格式的转换和存储,可以作为一个独立的方法将输入的Verilog代码直接转换为SMV模型,实用性好。
本发明解决其技术问题所采用的技术方案:一种寄存器传输级Verilog代码的SMV模型构建方法,其特点是包括以下步骤:
步骤一、设计控制流图中的语句结点类型:ALWAYS,ALWAYS_END,IF,ELSE,IF_END,CASE,CASEX,CASEZ,CASE_ITEM,CASE_END,FOR,FOR_END,TASK,TASK_END,ASSIGN_BLOCK,ASSIGN_NONBLOCK,ASSIGN_CONTINUOUS,INSTANTIATION。整个代码的开始增加一个ENTER结点,对应module语句,结束增加一个EXIT结点,对应endmodule,不确定类型是NONE结点,其中always,if,casex,casez,for,task所对应的结点为控制结点,ENTER和EXIT是控制结点,阻塞赋值、非阻塞赋值和连续赋值为赋值结点。
采用开源的antlr4以及Terence Parr撰写的verilog2001.g4,解析Verilog寄存器传输级设计代码的语法。
依次提取每条Verilog语句的语法信息进行分析,设计生成控制流图的语句结点。一条语句对应控制流图中的一个结点,语句结点的类型针对Verilog可综合的语句设定。根据语句结点类型建立语句结点之间的前驱和后继关系:语句结点之间的控制流关系体现在控制结点之间以及控制结点和赋值结点之间的连接,对于赋值结点之间的连接,不表示控制关系,只是表示出赋值结点代表的语句在代码中的位置关系,添加的ENTER结点是整个模块的开始结点,EXIT结点是整个模块的结束结点,always语句段,例化语句和连续赋值语句之间是并行关系,always语句段内的if、casex,casez、for语句之间存在着语法相关的控制区间和控制顺序的关系;根据控制区间和控制关系确定出各个语句结点之间的前驱和后继关系。依据每个语句结点之间的前驱和后继关系,采用广度优先遍历,生成Verilog代码的控制流图。
得到Verilog模块对应的控制流图后,生成Verilog代码的路径条件pc和对应表达式exp的关系对<pc,exp>,每一个赋值表达式的左边变量拥有一个或者多个<pc,exp>。深度遍历Verilog模块对应的控制流图,如果遍历结束则步骤一结束。如果遍历没有结束则取出控制流图中还没有被访问过的结点node,得到node的控制结点controlNode。判断node的类型,如果node的结点类型是ALWAYS,则always语句的事件列表加入到node的路径条件中。如果node的结点类型是IF,则将控制结点controlNode的路径条件列表合并上当前if语句的条件,作为node的路径条件列表。如果node的结点类型是ELSE,则controlNode路径条件列表中最后一个条件取反作为node的路径条件。如果node的结点类型是CASE,则将controlNode的路径条件列表作为node的路径条件列表。如果node的结点类型是CASE_ITEM,并且是default语句结点时,controlNode的路径条件列表合并上case语句默认路径条件作为node的路径条件列表;当不是default语句结点时,controlNode的路径条件列表合并上node的语句条件作为node的路径条件列表。如果是赋值语句,controlNode的路径条件列表作为node的路径条件列表,同时node的路径条件列表作为pc,node的赋值表达式作为exp,构成node左边变量的<pc,exp>。其他情况下,controlNode的路径条件列表作为node的路径条件列表。判断是否所有结点都访问完,如果没有访问完,则继续取出控制流图中还没有被访问过的结点node,得到node的控制结点controlNode,然后判断node的类型进行相应的处理。如果所有结点都访问完,深度优先遍历控制流图结束。
步骤二、根据步骤一生成变量的<pc,exp>列表,Verilog代码中的变量定义、参数常量定义信息构建模型检测用的SMV模型。将Verilog代码中的reg,wire,tri和integer类型变量转换为NuSMV的VAR类型变量,VAR变量写入字符串smv。将Verilog代码中的parameter类型转换为NuSMV的DEFINE标识符,将DEFINE标识符添加到smv。将例化语句转换为NuSMV的函数语句,函数语句添加到smv。处理变量的<pc,exp>列表,如果变量是在连续赋值语句中,则设定字符串变量nusmv_string等于表达式variable:=exp的NuSMV形式。如果变量是在组合逻辑中的阻塞赋值语句中,则设定变量nusmv_string等于表达式variable:=case;如果变量是在组合逻辑中的非阻塞赋值语句中,并且如果exp右边部分中的变量没有在相同的always语句块中被赋值,则设定变量nusmv_string等于表达式variable:=case;如果变量是在组合逻辑中的非阻塞赋值语句中,并且如果exp右边部分中的变量在相同的always语句块中被赋值,则设定变量nusmv_string等于表达式next(variable):=case。如果变量是在时序逻辑中的非阻塞赋值语句中,则设定变量nusmv_string等于表达式next(variable):=case;如果变量是在时序逻辑中的阻塞赋值语句中,并且如果exp右边部分中的变量在相同的always语句块中被赋值,则设定变量nusmv_string等于表达式variable:=case;如果变量是在时序逻辑中的阻塞赋值语句中,并且如果exp右边部分中的变量没有在相同的always语句块中被赋值,则设定变量nusmv_string等于表达式next(variable):=case。依据<pc,exp>将Verilog阻塞赋值语句和非阻塞赋值语句构建为NuSMV的case语句,即一个<pc,exp>表达为pc:exp的形式。一个变量的<pc,exp>列表都转换添加到变量nusmv_string。将每个变量的nusmv_string添加到字符串smv。将字符串smv的内容写入到SMV文件,生成SMV模型。
步骤三、依据硬件设计规范,设定待验证硬件设计的属性,用计算树逻辑CTL表达。
步骤四、对步骤二中得到的SMV模型,利用NuSMV验证步骤三中设定的属性。如果验证结果为真,则步骤三的属性得到满足,验证通过。如果验证结果为假,则会有一个反例输出,验证不通过。反例包含了一个状态序列,该序列中的每一个状态都具体表明了Verilog代码中每一个变量的值。
步骤五、依据步骤四中得到的反例,确定出Verilog代码中的不安全代码。
本发明的有益效果是:该方法采用静态分析Verilog代码的方法得到每个模块对应的控制流图,深度遍历控制流图得到模块中每个变量的<pc,exp>列表,利用<pc,exp>列表构建模块对应的SMV模型。其中,pc是路径条件,exp是在pc为真的情况下变量的表达式。本发明在读入Verilog代码后,针对生成的Verilog代码的解析树,不需要依赖第三方工具进行数据格式的转换和存储,可以作为一个独立的方法将输入的Verilog代码直接转换为SMV模型,实用性好。
下面结合附图和具体实施方式对本发明作详细说明。
附图说明
图1是本发明寄存器传输级Verilog代码的SMV模型构建方法的流程图。
图2是本发明方法实施例中Verilog代码变量的<pc,exp>列表生成流程示意图。
图3是本发明方法实施例构建SMV模型流程示意图。
图4是本发明方法实施例中对应u_xmit.v文件的第60-67行代码的控制流图。
具体实施方式
参照图1-4。本发明寄存器传输级Verilog代码的SMV模型构建方法具体步骤如下:
选取Trust-Hub上的RS232-T600为分析对象,其中包含了三个Verilog文件:uart.v,u_xmit.v和u_rec.v。此三个Verilog文件如下文所示。在文件u_xmit.v中有硬件木马。该硬件木马是一个有限状态机,它检测发送数据序列,当出现序列8’hAA,8’h55,8’h00和8’hFF的时候,木马被激活,输出变量xmit_doneH被置“1”,并且传输数据的第7个bit位被替换。
1.uart.v程序源码:
Figure GDA0002764081650000041
Figure GDA0002764081650000051
2.u_xmit.v程序源码:
Figure GDA0002764081650000061
Figure GDA0002764081650000071
Figure GDA0002764081650000081
Figure GDA0002764081650000091
3.u_rec.v程序源码:
Figure GDA0002764081650000092
Figure GDA0002764081650000101
Figure GDA0002764081650000111
步骤一、变量<pc,exp>列表的生成。
以u_xmit.v的第60-67行代码为例,其对应的控制流图以ENTER_3为根结点,以EXIT_215为最后的结点。结点名称的格式为“结点类型_源码行号”。ENTER_3代表了在u_xmit.v文件中的第三行代码:“module u_xmit(sys_clk,
sys_rst_l,uart_xmitH,xmitH,xmit_dataH,xmit_doneH);”,EXIT_215结点代表了在u_xmit.v文件中的第215行代码:“endmodule”。ALWAYS_60代表的第60代码的后继代码是第61行“case”语句CASE_61,CASE_61有五个分支后继,分别是CASE_ITEM_62到CASE_ITEM_66。分支CASE_ITEM_62的后继语句是第62行的阻塞赋值语句ASSIGN_BLOCK_62。ASSIGN_BLOCK_62的后继语句是第67行的“endcase”语句CASE_END_67。CASE_END_67的后继语句是always语句结束结点ALWAYS_END_67。其他分支具有相同解释。
具体生成u_xmit.v文件第60-67行代码的控制流图的过程如下:
1)深度遍历u_xmit.v文件的语法解析树,获取语句结点的信息。得到的语句信息是:
(1)第0个结点,ENTER结点ENTER_3,索引值0,控制区间[3,215](3和215表示语句所在的行号,后继步骤方括号中数值表示相同含义);
(2)第1个结点,always结点ALWAYS_60,对应第60行的always语句,索引值1,控制区间[60,67],其控制结点为ENTER_3,ENTER_3的控制区间为[3,215];
(3)第2个结点,case结点CASE_61,对应第61行的case语句,索引值2,控制区间[61,67],其控制结点为ALWAYS_60,ALWAYS_60的控制区间为[60,67];
(4)第3个结点,case_item结点CASE_ITEM_62,索引值3,控制区间[62,62],其控制结点为CASE_61,CASE_61的控制区间为[61,67];
(5)第4个结点,阻塞赋值结点ASSIGN_BLOCK_62,索引值4,其控制结点为CASE_ITEM_62,CASE_ITEM_62结点控制区间为[62,62];
(6)第5个结点,endcase结点CASE_END_67,索引值5,控制区间[67,67],其控制结点为CASE_61,CASE_61的控制区间为[61,67];
(7)第6个结点,always结束结点ALWAYS_END_67,索引值6,控制区间[67,67],其控制结点为ALWAYS_60,ALWAYS_60的控制区间为[60,67];
(8)第7个结点,case_item语句结点CASE_ITEM_63,索引值7,控制区间[63,63],其控制结点为CASE_61,CASE_61的控制区间为[61,67];
(9)第8个结点,阻塞赋值结点ASSIGN_BLOCK_63,索引值8,其控制结点为CASE_ITEM_63,CASE_ITEM_63结点的控制区间为[63,63];
(10)以此类推,分析完剩余的三个分支和剩余的u_xmit.v中的代码。
(11)最后一个结点是模块结束语句结点EXIT_215,索引值191,控制区间[215,215],其控制结点为ENTER_3,ENTER_3的控制区间为[3,215];
2)通过语句结点之间的控制区间所属关系,建立各个结点之间的前驱和后继关系。对于1)中得到的语句结点,
(1)结点0为ENTER_3结点,是根结点;
(2)结点1为always结点ALWAYS_60,因为其控制结点0为ENTER_3,所以结点1的前驱包含结点0,结点0的后继包含结点1;
(3)结点2为case结点CASE_61,因为其控制结点1为ALWAYS_60,所以结点2的前驱包含结点1,结点1的后继包含结点2;
(4)结点3为case_item结点CASE_ITEM_62,因为其控制结点2为CASE_61,所以结点3的前驱包含结点2,结点2的后继包含结点3;
(5)结点4为阻塞赋值结点ASSIGN_BLOCK_62,因为其控制结点3为CASE_ITEM_62,所以结点4的前驱包含结点3,结点3的后继包含结点4;
(6)结点5为endcase结点CASE_END_67,因为其为语句段结束结点,所以结点5的前驱包含结点4,结点4的后继包含结点5;
(7)结点6为always结束结点ALWAYS_END_67,因为其语句段结束结点,所以结点6的前驱包含结点5,结点5的后继包含结点6;
(8)结点191为模块结束语句结点EXIT_215,因为其为结束结点,所以结点191的前驱包含结点6,结点6的后继包含结点191;
(9)结点7为case_item语句结点CASE_ITEM_63,因为其控制结点2为CASE_61,所以结点7的前驱包含结点2,结点2的后继包含结点7;
(10)结点8为阻塞赋值结点ASSIGN_BLOCK_63,因为其控制结点7为结点CASE_ITEM_63,所以结点8的前驱包含结点7,结点7的后继包含结8;
(11)以此类推,分析完剩余的三个分支中语句结点的前驱和后继关系。
3)根据广度优先算法进行遍历,最后得到u_xmit.v文件中第60-67行代码的控制流图。
整过控制流图的生成过程首先采用开源的antlr4以及Terence Parr撰写的verilog2001.g4,解析Verilog寄存器传输级设计代码的语法。依次提取每条Verilog语句的语法信息进行分析,设计生成控制流图的语句结点。一条语句对应控制流图中的一个结点,语句结点的类型针对Verilog可综合的语句设定。根据语句结点类型建立语句结点之间的前驱和后继关系:语句结点之间的控制流关系体现在控制结点之间以及控制结点和赋值结点之间的连接,对于赋值结点之间的连接,不表示控制关系,只是表示出赋值结点代表的语句在代码中的位置关系,添加的ENTER结点是整个代码的开始结点,EXIT结点是整个代码的结束结点,always语句段,例化语句和连续赋值语句之间是并行关系,always语句段内的if、case、for语句之间存在着语法相关的控制区间和控制顺序的关系;根据控制区间和控制关系确定出各个语句结点之间的前驱和后继关系。依据每个语句结点之间的前驱和后继关系,采用广度优先遍历,最终生成Verilog代码的控制流图。
以下步骤表明了变量uart_xmitH的<pc,exp>列表的生成。
(1)u_xmit模块对应控制流图的根结点是ENTER_3。使node=ENTER_3。
(2)深度遍历控制流图,还有结点没有被访问,取ENTER_3的后继结点ALWAYS_60,使node=ALWAYS_60。现在node的控制结点是ENTER_3,使controlNode=ENTER_3。
(3)判断node的类型。当前node类型为ALWAYS语句,则使node(ALWAYS_60)的路径条件列表=(xmit_ShiftRegH or xmitDataSelH)。
(4)深度遍历控制流图,还有结点没有被访问,取ALWAYS_60的后继结点CASE_61,使node=CASE_61。现在node的控制结点是ALWAYS_60,使controlNode=ALWAYS_60。
(5)判断node的类型。当前node类型为CASE语句,则使node(CASE_61)的路径条件列表=(xmit_ShiftRegH or xmitDataSelH)。
(6)深度遍历控制流图,还有结点没有被访问,取CASE_61的后继结点CASE_ITEM_62,使node=CASE_ITEM_62。现在node的控制结点是CASE_61,使controlNode=CASE_61。
(7)判断node的类型。当前node类型为CASE_ITEM语句,则使node(CASE_ITEM_62)的路径条件列表=(xmit_ShiftRegH or xmitDataSelH)&(xmitDataSelH==x_STARTbit)。
(8)深度遍历控制流图,还有结点没有被访问,取CASE_ITEM_62的后继结点ASSIGN_BLOCK_62,使node=ASSIGN_BLOCK_62。现在node的控制结点是CASE_ITEM_62,使controlNode=CASE_ITEM_62。
(9)判断node的类型。当前node类型为ASSIGN_BLOCK语句,则使node(ASSIGN_BLOCK_62)的路径条件列表=(xmit_ShiftRegH or xmitDataSelH)&(xmitDataSelH==x_STARTbit)。得到变量uart_xmitH的一个<pc,exp>对,其中pc=(xmit_ShiftRegH orxmitDataSelH)&(xmitDataSelH==x_STARTbit);exp=(uart_xmitH=LO)。
(10)深度遍历控制流图,还有结点没有被访问,取ASSIGN_BLOCK_62的后继结点CASE_END_67,使node=CASE_END_67。现在node的控制结点是CASE_61,使controlNode=CASE_61。
(11)判断node的类型。当前node类型为CASE_END语句,则使node(CASE_END_67)的路径条件列表=xmit_ShiftRegH or xmitDataSelH。
(12)深度遍历控制流图,还有结点没有被访问,取CASE_END_67的后继结点ALWAYS_END_67,使node=ALWAYS_END_67。现在node的控制结点是ALWAYS_60,使controlNode=ALWAYS_60。
(13)判断node的类型。当前node类型为ALWAYS_END语句,则使node(ALWAYS_END_67)的路径条件列表=xmit_ShiftRegH or xmitDataSelH。
(14)深度遍历控制流图,还有结点没有被访问,取CASE_61的后继结点CASE_ITEM_63,使node=CASE_ITEM_63。现在node的控制结点是CASE_61,使controlNode=CASE_61。
(15)判断node的类型。当前node类型为CASE_ITEM语句,则使node(CASE_ITEM_63)的路径条件列表=(xmit_ShiftRegH or xmitDataSelH)&(xmitDataSelH==x_STOPbit)。
(16)深度遍历控制流图,还有结点没有被访问,取CASE_ITEM_63的后继结点ASSIGN_BLOCK_63,使node=ASSIGN_BLOCK_63。现在node的控制结点是CASE_ITEM_63,使controlNode=CASE_ITEM_63。
(17)判断node的类型。当前node类型为ASSIGN_BLOCK语句,则使node(ASSIGN_BLOCK_63)的路径条件列表=(xmit_ShiftRegH or xmitDataSelH)&(xmitDataSelH==x_STOPbit)。得到变量uart_xmitH的一个<pc,exp>对,其中pc=(xmit_ShiftRegH orxmitDataSelH)&(xmitDataSelH==x_STOPbit);exp=(uart_xmitH=HI)。
(18)深度遍历控制流图,还有结点没有被访问。后继依次取CASE_ITEM_64,CASE_ITEM_65,CASE_ITEM_66分支遍历。最终得到变量uart_xmitH的所有<pc,exp>对。
得到Verilog模块对应的控制流图后,深度遍历Verilog模块对应的控制流图,如果遍历结束则步骤一结束。如果遍历没有结束则取出控制流图中还没有被访问过的结点node,得到node的控制结点controlNode。判断node的类型,如果node的结点类型是ALWAYS,则always语句的事件列表加入到node的路径条件中。如果node的结点类型是IF,则将控制结点controlNode的路径条件列表合并上当前if语句的条件,作为node的路径条件列表。如果node的结点类型是ELSE,则controlNode路径条件列表中最后一个条件取反作为node的路径条件。如果node的结点类型是CASE,则将controlNode的路径条件列表作为node的路径条件列表。如果node的结点类型是CASE_ITEM,并且是default语句结点时,controlNode的路径条件列表合并上case语句默认路径条件作为node的路径条件列表;当不是default语句结点时,controlNode的路径条件列表合并上node的语句条件作为node的路径条件列表。如果是赋值语句,controlNode的路径条件列表作为node的路径条件列表,同时node的路径条件列表作为pc,node的赋值表达式作为exp,构成node左边变量的<pc,exp>。其他情况下,controlNode的路径条件列表作为node的路径条件列表。判断是否所有结点都访问完,如果没有访问完,则继续取出控制流图中还没有被访问过的结点node,得到node的控制结点controlNode,然后判断node的类型进行相应的处理。如果所有结点都访问完,深度优先遍历控制流图结束。
步骤二、SMV模型的构建。
1)VAR变量定义。
Uart.v文件中第6-9行的变量定义,对应的SMV模型为VAR类型。具体定义的SMV模型代码为:
VAR
xmit_dataH:unsigned word[8];
xmit_doneH:unsigned word[1];
rec_dataH:unsigned word[8];
rec_readyH:unsigned word[1];
Verilog模块中所有wire,reg,tri,integer类型转换完成,写入到字符串smv中。
2)DEFINE常量定义。
Uart.v文件中第30-33行的parameter类型,对应的SMV模型为DEFINE类型。具体定义的SMV模型代码为:
DEFINE
x_STARTbit:=0ub2_00;
x_STOPbit:=0ub2_01;
x_ShiftReg:=0ub2_10;
x_miDataSend:=0ub2_11;
Verilog模块中所有parameter类型转换完成,添加到字符串smv中。
3)函数语句定义。
Uart.v文件中,第60-66行的例化语句,其SMV模型代码如下:
MODULE u_xmit(sys_clk,sys_rst_l,uart_xmitH,xmitH,
xmit_dataH,xmit_doneH)
Verilog模块中所有例化语句转换完成,添加到字符串smv中。
4)其他Verilog语句的SMV模型定义。
处理变量的<PC,EXP>列表,变量REC_DATAH是在连续赋值语句中,则设定字符串变量NUSMV_STRING等于表达式“REC_DATAH:=PAR_DATAH;”。U_REC.V中第60行,变量REC_DATAH对应的SMV模型如表1所示。表1的字符串内容添加到NUSMV_STRING,NUSMV_STRING添加到字符串SMV。
表1:连续赋值语句的SMV模型
Figure GDA0002764081650000171
U_XMIT.V中第60-67行的组合逻辑语句,变量UART_XMITH是在组合逻辑中的阻塞赋值语句中,则设定字符串NUSMV_STRING等于表达式“UART_XMITH:=CASE”。依据步骤一最后得到的变量UART_XMITH的<PC,EXP>列表,UART_XMITH对应的SMV模型如表2所示。表2的字符串内容添加到NUSMV_STRING,NUSMV_STRING添加到字符串SMV。
表2:组合逻辑语句的SMV模型
Figure GDA0002764081650000172
Figure GDA0002764081650000181
U_XMIT.V中第69-72行的时序逻辑语句,变量是在时序逻辑中的非阻塞赋值语句中,则设定变量NUSMV_STRING等于表达式“NEXT(BITCELL_CNTRH):=CASE”,变量BITCELL_CNTRH对应的SMV模型如表3所示。表3的字符串内容添加到NUSMV_STRING,NUSMV_STRING添加到字符串SMV。
表3:时序逻辑语句的SMV模型
Figure GDA0002764081650000182
每个变量生成的SMV模型保存在字符串nusmv_string中,将每个变量的nusmv_string逐个添加到字符串smv中。最终,字符串smv中包含了Verilog模块对应的完整SMV模型,将字符串smv输出为SMV文件。
根据步骤一生成变量的<pc,exp>列表、Verilog代码中的变量定义、参数常量定义信息构建模型检测用的SMV模型。将Verilog代码中的reg和wire类型变量转换为NuSMV的VAR类型变量,VAR变量写入字符串smv;将Verilog代码中的parameter类型转换为NuSMV的DEFINE标识符,将DEFINE标识符添加到smv;将例化语句转换为NuSMV的函数语句,函数语句添加到smv。处理变量的<pc,exp>列表,如果变量是在连续赋值语句中,则设定字符串变量nusmv_string等于表达式“variable:=exp的NuSMV形式;”。如果变量是在组合逻辑中的阻塞赋值语句中,则设定变量nusmv_string等于表达式“variable:=case”;如果变量是在组合逻辑中的非阻塞赋值语句中,并且如果exp右边部分中的变量没有在相同的always语句块中被赋值,则设定变量nusmv_string等于表达式“variable:=case”;如果变量是在组合逻辑中的非阻塞赋值语句中,并且如果exp右边部分中的变量在相同的always语句块中被赋值,则设定变量nusmv_string等于表达式“next(variable):=case”。如果变量是在时序逻辑中的非阻塞赋值语句中,则设定变量nusmv_string等于表达式“next(variable):=case”;如果变量是在时序逻辑中的阻塞赋值语句中,并且如果exp右边部分中的变量在相同的always语句块中被赋值,则设定变量nusmv_string等于表达式“variable:=case”;如果变量是在时序逻辑中的阻塞赋值语句中,并且如果exp右边部分中的变量没有在相同的always语句块中被赋值,则设定变量nusmv_string等于表达式“next(variable):=case”。依据<pc,exp>将Verilog阻塞赋值语句和非阻塞赋值语句构建为NuSMV的case语句,即一个<pc,exp>表达为“pc:exp”的形式。一个变量的<pc,exp>列表都转换添加到变量nusmv_string。将每个变量的nusmv_string添加到字符串smv。将字符串smv的内容写入到SMV文件,生成SMV模型。
步骤三、依据硬件设计规范,设定待验证硬件设计的属性,使用计算树逻辑CTL表达。
现设定验证属性:
AG((sys_rst_l=0ud1_1)&(xmit_doneH=0ub1_1)&
(rec_readyH=0ub1_1)&(xmitH=0ub1_0)
->(xmit_dataH=rec_dataH))
该属性在uart.v对应的SMV模型uart.smv中进行验证,uart.smv中包含了u_xmit.smv和u_rec.smv模型。属性中的变量名称对应着uart.v文件中的变量名,并保持一致。
该属性的含义是:在复位信号sys_rst_l置“1”后,如果发送端(u_xmit.smv)数据数据已经发送完(xmit_doneH=0ub1_1),并且接收端(u_rec.smv)也已经接收完,在还没有新的数据开始传输前(xmitH=0ub1_0),发送和接收到的数据应该是一样的(xmit_dataH=rec_dataH)。这个属性应该是被一直满足的(AG)。
步骤四、对步骤二中得到的SMV模型,利用NuSMV验证步骤三中设定的属性。验证结果为假,输出一个反例,验证不通过。在反例的状态序列中出现了输入数据为8’hAA,8’h55,8’h00和8’hFF的序列。
步骤五、依据步骤四中得到的反例,确定出Verilog代码中的不安全代码。从反例中得到的输入数据8’hAA,8’h55,8’h00和8’hFF的序列,确定出u_xmit.v中的116-147行的状态机为不安全代码。在反例显示的最终状态中,sys_rst_l=0ud1_1,xmit_doneH=0ud1_1,rec_readyH=0ub1_1,xmitH=0ub1_0,xmit_dataH=0ud8_255,rec_dataH=0ud8_0。出现这种状态的原因是,木马在输入数据出现8’hAA,8’h55,8’h00和8’hFF序列时,提前将xmit_doneH置“1”,导致接收端误判数据0xFF已经发送完,而实际上没有发送完。

Claims (1)

1.一种寄存器传输级Verilog代码的SMV模型构建方法,其特征在于包括以下步骤:
步骤一、设计控制流图中的语句结点类型:ALWAYS,ALWAYS_END,IF,ELSE,IF_END,CASE,CASEX,CASEZ,CASE_ITEM,CASE_END,FOR,FOR_END,TASK,TASK_END,ASSIGN_BLOCK,ASSIGN_NONBLOCK,ASSIGN_CONTINUOUS,INSTANTIATION;整个代码的开始增加一个ENTER结点,对应module语句,结束增加一个EXIT结点,对应endmodule,不确定类型是NONE结点,其中always,if,casex,casez,for,task所对应的结点为控制结点,ENTER和EXIT是控制结点,阻塞赋值、非阻塞赋值和连续赋值为赋值结点;
采用开源的antlr4以及Terence Parr撰写的verilog2001.g4,解析Verilog寄存器传输级设计代码的语法;
依次提取每条Verilog语句的语法信息进行分析,设计生成控制流图的语句结点;一条语句对应控制流图中的一个结点,语句结点的类型针对Verilog可综合的语句设定;根据语句结点类型建立语句结点之间的前驱和后继关系:语句结点之间的控制流关系体现在控制结点之间以及控制结点和赋值结点之间的连接,对于赋值结点之间的连接,不表示控制关系,只是表示出赋值结点代表的语句在代码中的位置关系,添加的ENTER结点是整个模块的开始结点,EXIT结点是整个模块的结束结点,always语句段,例化语句和连续赋值语句之间是并行关系,always语句段内的if、casex,casez、for语句之间存在着语法相关的控制区间和控制顺序的关系;根据控制区间和控制关系确定出各个语句结点之间的前驱和后继关系;依据每个语句结点之间的前驱和后继关系,采用广度优先遍历,生成Verilog代码的控制流图;
得到Verilog模块对应的控制流图后,生成Verilog代码的路径条件pc和对应表达式exp的关系对<pc,exp>,每一个赋值表达式的左边变量拥有一个或者多个<pc,exp>;深度遍历Verilog模块对应的控制流图,如果遍历结束则步骤一结束;如果遍历没有结束则取出控制流图中还没有被访问过的结点node,得到node的控制结点controlNode;判断node的类型,如果node的结点类型是ALWAYS,则always语句的事件列表加入到node的路径条件中;如果node的结点类型是IF,则将控制结点controlNode的路径条件列表合并上当前if语句的条件,作为node的路径条件列表;如果node的结点类型是ELSE,则controlNode路径条件列表中最后一个条件取反作为node的路径条件;如果node的结点类型是CASE,则将controlNode的路径条件列表作为node的路径条件列表;如果node的结点类型是CASE_ITEM,并且是default语句结点时,controlNode的路径条件列表合并上case语句默认路径条件作为node的路径条件列表;当不是default语句结点时,controlNode的路径条件列表合并上node的语句条件作为node的路径条件列表;如果是赋值语句,controlNode的路径条件列表作为node的路径条件列表,同时node的路径条件列表作为pc,node的赋值表达式作为exp,构成node左边变量的<pc,exp>;其他情况下,controlNode的路径条件列表作为node的路径条件列表;判断是否所有结点都访问完,如果没有访问完,则继续取出控制流图中还没有被访问过的结点node,得到node的控制结点controlNode,然后判断node的类型进行相应的处理;如果所有结点都访问完,深度优先遍历控制流图结束;
步骤二、根据步骤一生成变量的<pc,exp>列表,Verilog代码中的变量定义、参数常量定义信息构建模型检测用的SMV模型;将Verilog代码中的reg,wire,tri和integer类型变量转换为NuSMV的VAR类型变量,VAR变量写入字符串smv;将Verilog代码中的parameter类型转换为NuSMV的DEFINE标识符,将DEFINE标识符添加到smv;将例化语句转换为NuSMV的函数语句,函数语句添加到smv;处理变量的<pc,exp>列表,如果变量是在连续赋值语句中,则设定字符串变量nusmv_string等于表达式variable:=exp的NuSMV形式;如果变量是在组合逻辑中的阻塞赋值语句中,则设定变量nusmv_string等于表达式variable:=case;如果变量是在组合逻辑中的非阻塞赋值语句中,并且如果exp右边部分中的变量没有在相同的always语句块中被赋值,则设定变量nusmv_string等于表达式variable:=case;如果变量是在组合逻辑中的非阻塞赋值语句中,并且如果exp右边部分中的变量在相同的always语句块中被赋值,则设定变量nusmv_string等于表达式next(variable):=case;如果变量是在时序逻辑中的非阻塞赋值语句中,则设定变量nusmv_string等于表达式next(variable):=case;如果变量是在时序逻辑中的阻塞赋值语句中,并且如果exp右边部分中的变量在相同的always语句块中被赋值,则设定变量nusmv_string等于表达式variable:=case;如果变量是在时序逻辑中的阻塞赋值语句中,并且如果exp右边部分中的变量没有在相同的always语句块中被赋值,则设定变量nusmv_string等于表达式next(variable):=case;依据<pc,exp>将Verilog阻塞赋值语句和非阻塞赋值语句构建为NuSMV的case语句,即一个<pc,exp>表达为pc:exp的形式;一个变量的<pc,exp>列表都转换添加到变量nusmv_string;将每个变量的nusmv_string添加到字符串smv;将字符串smv的内容写入到SMV文件,生成SMV模型;
步骤三、依据硬件设计规范,设定待验证硬件设计的属性,用计算树逻辑CTL表达;
步骤四、对步骤二中得到的SMV模型,利用NuSMV验证步骤三中设定的属性;如果验证结果为真,则步骤三的属性得到满足,验证通过;如果验证结果为假,则会有一个反例输出,验证不通过;反例包含了一个状态序列,该序列中的每一个状态都具体表明了Verilog代码中每一个变量的值;
步骤五、依据步骤四中得到的反例,确定出Verilog代码中的不安全代码。
CN201910010500.6A 2019-01-07 2019-01-07 寄存器传输级Verilog代码的SMV模型构建方法 Active CN109725900B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910010500.6A CN109725900B (zh) 2019-01-07 2019-01-07 寄存器传输级Verilog代码的SMV模型构建方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910010500.6A CN109725900B (zh) 2019-01-07 2019-01-07 寄存器传输级Verilog代码的SMV模型构建方法

Publications (2)

Publication Number Publication Date
CN109725900A CN109725900A (zh) 2019-05-07
CN109725900B true CN109725900B (zh) 2021-01-05

Family

ID=66298817

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910010500.6A Active CN109725900B (zh) 2019-01-07 2019-01-07 寄存器传输级Verilog代码的SMV模型构建方法

Country Status (1)

Country Link
CN (1) CN109725900B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111814417B (zh) * 2020-06-11 2023-09-26 杭州电子科技大学 一种基于字符分隔值文件转换Verilog代码的方法
CN112445492B (zh) * 2020-12-02 2024-03-29 青岛海洋科技中心 一种基于antlr4的源码翻译方法
CN113568598B (zh) * 2021-09-26 2021-12-14 中科亿海微电子科技(苏州)有限公司 基于yosys实现求和运算的FPGA逻辑综合方法及装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6665848B2 (en) * 2001-01-12 2003-12-16 International Business Machines Corporation Time-memory tradeoff control in counterexample production
US7146605B2 (en) * 2001-01-15 2006-12-05 International Business Machines Corporation Automatic abstraction of software source
US8726241B1 (en) * 2007-06-06 2014-05-13 Rockwell Collins, Inc. Method and system for the development of high-assurance computing elements
CN107367686A (zh) * 2017-06-19 2017-11-21 西北工业大学 一种rtl硬件木马测试向量的生成方法
CN109002601A (zh) * 2018-07-06 2018-12-14 西安电子科技大学 一种基于Petri网的FPGA系统的验证模型建模方法
CN109101239A (zh) * 2018-08-30 2018-12-28 杭州电子科技大学 一种在线Verilog代码自动判决系统的标准答案生成方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2771451A1 (en) * 2011-10-24 2014-09-03 Somalogic, Inc. Selection of preferred sample handling and processing protocol for identification of disease biomarkers and sample quality assessment

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6665848B2 (en) * 2001-01-12 2003-12-16 International Business Machines Corporation Time-memory tradeoff control in counterexample production
US7146605B2 (en) * 2001-01-15 2006-12-05 International Business Machines Corporation Automatic abstraction of software source
US8726241B1 (en) * 2007-06-06 2014-05-13 Rockwell Collins, Inc. Method and system for the development of high-assurance computing elements
CN107367686A (zh) * 2017-06-19 2017-11-21 西北工业大学 一种rtl硬件木马测试向量的生成方法
CN109002601A (zh) * 2018-07-06 2018-12-14 西安电子科技大学 一种基于Petri网的FPGA系统的验证模型建模方法
CN109101239A (zh) * 2018-08-30 2018-12-28 杭州电子科技大学 一种在线Verilog代码自动判决系统的标准答案生成方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
Deadlock Detection in FPGA Design: A Practical Approach;Dexi Wang等;《TSINGHUA SCIENCE AND TECHNOLOGY》;20150430;第20卷(第2期);第212-218页 *
WISHBONE片上总线符号模型检测;逄涛;《计算机研究与发展》;20141231;第51卷(第12期);第2759-2771页 *
一种精确故障效应传播的形式化模型;黄兴利等;《西北工业大学学报》;20141031;第32卷(第5期);第719-724页 *
基于GA与BP神经网络的网络入侵检测组合模型研究;沈利香;《常州工学院学报》;20120831;第25卷(第4期);第27-32页 *

Also Published As

Publication number Publication date
CN109725900A (zh) 2019-05-07

Similar Documents

Publication Publication Date Title
CN109725900B (zh) 寄存器传输级Verilog代码的SMV模型构建方法
CN104503816B (zh) 一种硬件语言vhdl到msvl的自动转换系统
US7509599B1 (en) Method and apparatus for performing formal verification using data-flow graphs
US7340475B2 (en) Evaluating dynamic expressions in a modeling application
US8001500B2 (en) Method and apparatus for formally checking equivalence using equivalence relationships
CN107783758B (zh) 一种智能合约工程方法
CN106682343B (zh) 一种基于图的邻接矩阵的形式化验证方法
CN108279885A (zh) 一种对多个模型代码进行软件集成的方法及装置
CN110162297A (zh) 一种源代码段自然语言描述自动生成方法及系统
CN112199913B (zh) 一种基于Coq的超大规模集成电路RTL漏洞形式化分析方法
CN115438709A (zh) 基于代码属性图的代码相似性检测方法
CN113254026B (zh) 低代码开发方法及装置
CN109325217B (zh) 一种文件转换方法、系统、装置及计算机可读存储介质
CN103646194B (zh) 一种基于形式化验证的同步数据流程序的可信排序方法
CN114510414B (zh) 一种基于符号执行对智能合约功能属性进行形式化验证的方法及系统
van Kesteren et al. Inferring static non-monotone size-aware types through testing
Öberg ProGram: A grammar-based method for specification and hardware synthesis of communication protocols
Oberg et al. Grammar-based hardware synthesis from port-size independent specifications
Morin-Allory et al. Efficient and correct by construction assertion-based synthesis
van Eijndhoven et al. The ASCIS data flow graph: semantics and textual format
CN112989731A (zh) 一种基于抽象语法树的集成电路建模获取方法及系统
Winter Uniformization problems for synchronizations of automatic relations on words
JP2006190085A (ja) デジタル回路のモデリング方法及び設計方法
CN113568598B (zh) 基于yosys实现求和运算的FPGA逻辑综合方法及装置
Kfoury The syntax and semantics of a domain-specific language for flow-network design

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
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20201012

Address after: No. 127 Youyi West Road, Shaanxi, Xi'an

Applicant after: Northwestern Polytechnical University

Applicant after: Huaxin Anxin (Beijing) Technology Co., Ltd

Address before: 710072 Xi'an friendship West Road, Shaanxi, No. 127

Applicant before: Northwestern Polytechnical University

GR01 Patent grant
GR01 Patent grant