掌桥专利:专业的专利平台
掌桥专利
首页

基于语义等价程序执行的符号化快速错误检测方法

文献发布时间:2024-07-23 01:35:21


基于语义等价程序执行的符号化快速错误检测方法

技术领域

本发明属于芯片形式化验证领域,涉及一种处理器端到端的模型检测方法,具体涉及基于语义等价程序执行的符号化快速错误检测方法。

背景技术

随着信息技术的飞速发展,算力需求呈现出爆炸式增长,导致了对高性能芯片的大量需求,因此迫切需要低成本高效率的芯片验证方法。然而,现代高性能处理器芯片的微架构设计越来越复杂,保证模块实现正确性和模块之间交互正确性呈现出越来越多的挑战。

形式化验证(formal verification),如模型检测(model checking)可以对设计的系统做全面分析,因此可以发现极端情况(corner cases)。模型检测的方法通过给要验证的系统建立数学模型(状态迁移系统),然后指定要证明的属性(property),穷尽遍历系统的状态空间(state space)看属性是否被违反。早期主要基于符号模型检测微架构设计的抽象模型(abstract models)。然而,抽象模型和详细的微架构描述之间终究存在代沟。后来,ARM公司发明了ISA-Formal,RISC-V社区也出现了RISC-V Formal,这些方法可以在RTL层面验证处理器。但是,传统模型检测方法需要人手工编写待验证的属性,需要设计验证人员具备丰富的经验且要花费大量时间。

Singh、Eshan等人在IEEE Transactions on Computer-Aided Design ofIntegrated Circuits and Systems(2018)中的一篇名为“Logic bug detection andlocalization using symbolic quick error detection”提到的符号化快速错误检测(symbolic quick error detection,SQED)技术缓解了以上问题。SQED是一种模型检测技术,它结合了快速错误检测(quick error detection,QED)和有界模型检测(boundedmodel checking,BMC),符号化的指令以长度递增的方式执行在处理器模型上。SQED检测一种叫作自一致性(self-consistency)的属性,即原始指令和复制指令在相同处理器模型中执行的结果须一致。原始指令的复制指的是操作码和原始指令相同,但是复制指令的操作数是原始指令操作数的映射,例如,1号通用寄存器对应到14号通用寄存器。自一致性属性不依赖于微架构设计细节,因此避免了繁琐的属性构造过程。

处理器设计的逻辑错误(bugs)从出现机理上可以分成两类:单指令类型的错误和多指令类型的错误。单指令类型错误的出现只与特定指令的操作码或者操作数有关,与指令执行的环境无关;多指令类型错误的出现与一串指令序列相关,只有特定的指令执行上下文才会触发。

SQED检测多指令类型错误的有效性已经在一些商用产品的验证中得到了印证。它的不足是无法检测单指令类型错误,这是由于单指令类型的错误会同时影响到原始模式和复制模式,导致对于自一致性属性的检测出现假阳性(false positive)。后来出现的完备性S

发明内容

本发明的目的是提出了基于语义等价程序执行的符号化快速错误检测方法用于处理器的形式化验证,与现有的符号化快速错误检测方法相比,改变了基于处理器执行原始指令的结果和执行原始指令的复制指令的结果的对比的机制,实现了基于处理器执行原始指令和执行与原始指令语义等价的指令序列即语义等价程序的比较,从而实现了对于所有逻辑错误的覆盖

本发明为实现上述目的所采用的技术方案是:

一种基于语义等价程序执行的符号化快速错误检测方法,包括以下步骤:

构建指令综合规则,该规则包括以待测处理器的指令集架构(Instruction SetArchitecture,ISA)中的原始指令为目标,设计包含一系列组件的组件库,进行指令综合时从组件库中选择最优组件来构建原始指令的语义等价程序;

构建具有将原始指令转换到语义等价程序功能的EDSEP-V(Error Detectionusing Semantically Equivalent Program for Validation)模块,通过该EDSEP-V模块将待测处理器的通用寄存器堆划分成原始指令使用的一份、原始指令映射到语义等价程序的一份、保存语义等价程序中间输入输出的一份,并根据上述指令综合规则将待测处理器的原始指令转换成语义等价程序,EDSEP-V模块连接到处理器流水线的取指阶段;

构建待测处理器的期望的通用属性,该属性描述了原始指令执行的结果与语义等价程序执行的结果的一致性,描述属性采用标准的属性描述语言,例如SystemVerilog;

将EDSEP-V模块、待测处理器设计和通用属性断言组成的待验证系统,然后通过综合工具转成模型检测器可接受的中间格式,再由模型检测器进行属性验证。

进一步地,在指令综合时,每个组件的语义模型有三类:原生指令类、派生指令类、复合指令类。

进一步地,原生指令类的每个组件是ISA中的指令;派生指令类是ISA中的立即数类型的指令,其立即数由综合时(Satisfiability Modulo Theories,SMT)求解器给出了一个确定的值;复合指令类表示一串指令序列的语义。

进一步地,进行指令综合时添加一条约束条件:当组件与原始指令相同时,组件的输入参数不与原始指令相同。

进一步地,使用基于最高优先级优先的反例引导的归纳综合算法HPF-CEGIS,从组件库中选择最优组件来构建原始指令的语义等价程序;该HPF-CEGIS的步骤包括:

依据总组件库构造子组件库,构造的方式是首先给定每个子组件库中含有的组件数目,然后从总组件库中挑选子组件库的成员,总组件中的组件允许被重复选取;

根据子组件库包含的组件的选择权和排他权来计算子组件库的优先级;

各个子组件库按照优先级高低进行排序,每次进行指令综合时取最高优先级的子组件库;

根据每次指令综合的结果动态调整每个子组件库的优先级,如果当次指令综合成功,则增加当前子组件库中所有组件的选择权,否则增加当前子组件库中所有组件的排他权。

进一步地,子组件库的优先级的计算公式为:

其中,priority表示优先级,c

进一步地,子组件库的优先级排序规则包括:子组件库中含有与原始指令同名的组件则优先级需要降低;子组件库如果能综合出原始指令,则其它子组件库中含有与该子组件库一样的组件的选择权要升高。

进一步地,原始指令使用的一份、原始指令映射到语义等价程序的一份、保存语义等价程序中间输入输出的一份在通用寄存器中的任意两个或三个的交集为空。

进一步地,RTL代码通过Yosys工具等综合工具转换为中间格式,该中间格式包括但不限于BTOR2。

进一步地,属性验证期望的通用属性如下:

其中,ready信号指示所有原始指令与其语义等价程序的结果是否都已成功写回,regs[i]表示i号寄存器,u表示原始指令可引用的寄存器数目,i号寄存器映射到i+u号寄存器;该属性表示当所有原始指令与其语义等价程序的结果都已成功写回后,寄存器堆中对应的寄存器的值应保持一致。

本发明取得的有益效果是:

1.本发明方法的形式化验证的属性不依赖于微架构设计,通过判定原始指令和语义等价程序的执行是否一致验证处理器设计的正确性。

2.本发明方法使用基于最高优先级优先的反例引导的归纳综合算法,提高了程序综合的效率。

3.本发明方法可以覆盖处理器设计中所有能引起架构状态改变的逻辑错误类型,,避免了原SQED方法假阳性检测结果的出现。

附图说明

图1是本发明实施例的基于语义等价程序执行的符号化快速错误检测方法整体流程图;

图2是EDSEP-V模块内的处理流程图;

图3是HPF-CEGIS和普通迭代CEGIS的实验对比图;

图4是本发明和SQED对处理器形式化验证在单指令类型错误上的对比图;

图5是本发明和SQED对处理器形式化验证在多指令类型错误上的对比图。

具体实施方式

为使本发明的上述技术方案中各项技术特征和各项优点或技术效果能更明显易懂,下文配合附图进行详细说明。

图1是本发明的一种基于语义等价程序执行的符号化快速错误检测方法的流程图,具体处理过程说明如下。

一、指令综合

第一步是获得关于原始指令的语义等价程序,这一步利用了Gulwani,Sumit等人发表在ACM SIGPLAN Notices 46.6(2011):62-73中的一篇论文“Synthesis of loop-freeprograms”中提出的基于组件综合的程序综合(program synthesis)技术,以原始指令作为目标,用组件的不同合成方式构建与目标功能一致的语义等价程序。原始指令就是待测处理器ISA中的那些指令,其由操作码和操作数组成,其规范表达为:接收源操作数作为输入,执行操作码限定的功能后,输出结果到目的操作数,以函数形式描述为rd=op(rs1,rs2)。组件除了包含ISA中的正常指令外,还可以包括一些伪指令。下面以RV32IM ISA为例来形式化地说明综合的流程。

根据指令的语义,源寄存器和目的寄存器分别代表输入

综合原始指令的原料来自于组件库,组件库由一系列组件构成,其可以表示为:

1)原生指令类(Native Instruction Class,NIC):组件的语义就是ISA中规定的语义,例如对于ADD来说,Φ(I

2)派生指令类(Derived Instruction Class,DIC):来自于ISA中指令的派生版本,尤其对于操作数包含立即数类型的,其立即数作为内部属性而不作为输入参数。例如ADDI的派生类Φ(I

3)复合指令类(Composite Instruction Class,CIC):由多条指令的语义复合而成,表达的是一串指令序列的语义,其表达成:

指令综合的目标是寻找公式

一般的CEGIS算法在选择组件进行综合的时候不会考虑组件与原始指令之间的联系,因此不仅综合的质量不高,而且当组件库庞大的时候还会带来严重的性能损耗。本发明提出了一种基于最高优先级优先的反例引导的归纳综合算法(CEGIS based on thehighest priority first,HPF-CEGIS)。由于并不要求使用所有的组件去综合一条原始指令,因此,将一个大的组件库分成小的子组件库,每次综合的时候选择这些小的子组件库。这些小的子组件库会首先基于一个优先级进行排序,每次综合的时候选择当下具有最高优先级的子组件库。子组件库的优先级由两个因素决定:

1)如果子组件库中含有与原始指令同名的组件,那么该子组件库的优先级应该降低。例如,本发明倾向对于rd=ADD(rs1,rs2)的综合是t1=SUB(rs1,rs1),t2=SUB(t1,rs2),rd=SUB(rs1,t2),而不是t1=SRAI(rs1,0x0),t2=ADD(rs2,t1),rd=SRAI(t2,0x0)。

2)如果一个子组件库可以综合出原始指令,那么该子组件库中组件的语义应该接近原始指令的语义,那么其它子组件库中若是含有该子组件库中的组件,优先级应该提高。

含有n个组件的子组件库的优先级计算公式为:

每个组件j的优先级由选择权c

二、错误检测

SQED这类测试技术会使用各种转换(QED transformation)将包含一串指令序列的测试转换成新的测试,这些转换包括使用复制指令的错误检测用于验证(ErrorDetection using Duplicated Instruction for Validation,EDDI-V)和主动性加载和检测(Proactive Load and Check,PLC)等,这些转换会强化对错误的覆盖以及缩短错误的检测延时。与之不同的是,本发明实现了另一种转换——使用语义等价程序的错误检测用于验证(Error Detection using Semantically Equivalent Program for Validation,EDSEP-V)。

从图1的下半部分可以看到,EDSEP-V模块主要实现原始指令到语义等价程序的转换功能。与SQED不同,EDSEP-V模块把待测处理器的通用寄存器分成三份:原始指令使用的一份,原始指令映射到语义等价程序的一份,保存语义等价程序中间输入输出的一份。以32个通用寄存器的处理器为例,三部分的划分为:O∷={regs[0],…,regs[12]},E∷={regs[13],…,regs[25]},T∷={regs[26],…,regs[31]},

#原始指令

SUB regs[1](rd)regs[2](rs1)regs[3](rs2)

#语义等价的指令序列

XORI regs[26](t1)regs[15](rs1)0xfff

ADD regs[27](t2)regs[26](t1)regs[16](rs2)

XORI regs[14](rd)regs[27](t2)0xfff

如图1所示,待测处理器设计和EDSEP-V模块以及通用属性断言整合在一起后组成待验证系统,再通过Yosys等工具转换成BTOR2之类的中间格式,然后模型检测器会验证该待验证系统是否违背期望的属性:

ready信号指示所有原始指令的执行结果跟原始指令的语义等价程序的执行结果是否都已经写回到寄存器。

图2是EDSEP-V中进行原始指令到语义等价程序的变换与指令发射到处理器流水线译码阶段的流程。具体的过程为:首先确定原始指令的类型,如ADD、SUB、SLL、SRA。然后依据指令类型,根据指令综合这一步得到的变换规则,将原始指令变换成语义等价程序,并存储到一个指令队列中。根据一个选择信号发射指令到流水线中,其中(or||eq),or表示发射原始指令,eq表示发射指令队列中的指令。原始指令写回结果到regs[0]到regs[12]中,语义等价程序写回结果到regs[13]到regs[25]中。

本发明涉及的处理器形式化验证可以覆盖所有能引起处理器架构状态改变的逻辑错误类型,因为单指令类型的错误在本发明的形式化验证中不会在原始指令和语义等价程序部分产生相同的效果,由此避免了假阳性检测结果的出现。

实验验证:

为了检验本发明提出的方法的有效性,设置了两部分的实验。首先,比较了基于最高优先级优先的CEGIS跟一般CEGIS和普通迭代CEGIS(不对组件设置优先级)在综合指令方面的效率。然后,通过RTL代码突变测试对比了本发明与SQED方法。

实验的硬件选择Intel(R)Core(TM)i9-10900K CPU,频率3.70GHz,内存64GB。软件环境选择Ubuntu 20.04.6LTS。

选择综合RV32IM中的指令,包含29个组件:10个NICs、10个DICs和9个CICs。设置HPF-CEGIS中每个组件的初始权重[c

面对29个组件的时候,一般的CEGIS算法在数周的时间都没法给出一条指令的综合结果。在与普通迭代CEGIS算法比较的时候,大组件库拆成小组件库之后会经历一个洗牌的过程,其目的是防止数据聚类让结果缺乏说服力。图3展示了HPF-CEGIS和普通迭代CEGIS的实验数据,从图中可以看到HPF-CEGIS平均的性能提升在50%以上,在某些案例上甚至达到90%以上。

选择GitHub上开源的处理器核RIDECORE做突变注入以验证本发明的形式化验证效果。RTL代码被转换成BTOR2的模型检测中间格式,使用Pono作为模型检测工具。图4展示了在单指令类型错误上的检测效果,从图上可以看出,本发明可以检测到所有的单指令类型错误。图5展示了本发明和SQED在多指令类型错误上的检测效果,横轴代表错误编号,红色柱子和蓝色柱子分别代表SQED和本发明发现错误的时间,黄色的折线代表SQED和本发明发现错误的指令序列长度的比值,蓝色的折线代表SQED和本发明发现错误的时间比值。本发明在大部分多指令类型错误发现上的时间和反例轨迹小于SQED,这是因为在本发明中,指令序列的类型不是简单的原始指令和复制指令,因此可以提供更多的错误触发的上下文。

虽然本发明已以实施例公开如上,然其并非用以限定本发明,本领域的普通技术人员对本发明的技术方案进行的适当修改或者等同替换,均应涵盖于本发明的保护范围内,本发明的保护范围以权利要求所限定者为准。

相关技术
  • 基于动态符号执行的Java程序错误检测方法
  • 航电程序执行错误处理方法,计算机程序及检测报警系统
技术分类

06120116678135