CN1892616A - 在微处理器用户态随机验证中实现核心态程序验证的方法 - Google Patents

在微处理器用户态随机验证中实现核心态程序验证的方法 Download PDF

Info

Publication number
CN1892616A
CN1892616A CN 200610078226 CN200610078226A CN1892616A CN 1892616 A CN1892616 A CN 1892616A CN 200610078226 CN200610078226 CN 200610078226 CN 200610078226 A CN200610078226 A CN 200610078226A CN 1892616 A CN1892616 A CN 1892616A
Authority
CN
China
Prior art keywords
instruction
exception
execution
simulated environment
kernel mode
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
CN 200610078226
Other languages
English (en)
Other versions
CN100405324C (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.)
Loongson Technology Corp Ltd
Original Assignee
Institute of Computing Technology of CAS
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 Institute of Computing Technology of CAS filed Critical Institute of Computing Technology of CAS
Priority to CNB2006100782269A priority Critical patent/CN100405324C/zh
Publication of CN1892616A publication Critical patent/CN1892616A/zh
Application granted granted Critical
Publication of CN100405324C publication Critical patent/CN100405324C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明公开了一种在微处理器用户态随机验证中实现核心态程序验证的方法。该方法包括:a)在指令模版中添加异常处理相关的约束;b)对指令级随机验证产生引擎进行改进;c)在指令级处理器模拟器中加入核心态指令的执行机制,设置寄存器,在系统运行核心态指令时提供正确结果;d)在指令过滤器中加入步骤a)中所添加的异常处理相关的约束的过滤装置;e)在仿真环境中加入异常监测逻辑和控制寄存器更新逻辑;f)在仿真环境提供的存储器中预存异常处理程序。本发明具有验证全面、验证效率高的优点。

Description

在微处理器用户态随机验证中实现核心态程序验证的方法
技术领域
本发明微处理器验证技术,特别涉及一种在微处理器用户态随机验证中实现核心态程序验证的方法。
背景技术
模拟仿真是处理器验证的常用方法。在进行模拟仿真时,测试向量的广泛覆盖是非常重要的。测试向量的产生可以采用多种方法,其中主要的方法包括指令集随机测试产生、手写测试向量和应用程序封装等。
许多RISC架构处理器可以将指令运行在多种模式上,根据不同的运行模式使用不同的地址空间。以MIPS CPU为例,一个MIPS CPU可以将指令运行在两种优先级别上:用户态和核心态。以MIPS R4000为例,32位模式的用户态可用空间为0x00000000~0x7fffffff共2Gbyte(231),64位模式的用户态可用空间为0x0000000000000000~0x000000ffffffffff共1Tbyte(240)。在用户态模式下,程序地址超越用户态地址边界是非法的,将导致系统陷入异常。而在核心模式下,CPU的权限不受任何限制。除了使用地址空间的差异,MIPS CPU在用户态和核心态模式执行的指令也存在差异。有些指令只能运行在核心态模式下或运行在用户态模式会导致系统异常并带来一系列的CPU控制寄存器的复杂变化。尽管与MIPS CPU的指令集定义有所不同,但是其它RISC架构的处理器,例如SUN SPARC等,也具有类似的机制。
对于RISC架构的处理器来说,在验证过程中充分测试用户态和核心态模式十分重要。由于在核心态模式运行的指令必须处理各种控制寄存器的复杂变化以及由此带来的指令运行方式的变化,特别是可能的异常/例外嵌套,会使程序的行为变得难以预测。指令级随机验证通常在用户态模式下运行。如图1所示,在用户态模式下运行的微处理器随机验证,通常包括六个部分:指令库11,指令模版12、产生引擎13、指令级处理器模拟器14、指令过滤器15、仿真环境16。指令库11中包含处理器支持的所有有效指令;指令模版12是一系列配置文件,用于进行指令的配置和规范,在用户态模式下运行的指令级随机验证系统的指令模版通常会对引起异常的核心态指令加以限制;产生引擎13可以有效支持配置文件约束下的指令生成;指令级模拟器14是待验证的微处理器的最简单参考模型,支持指令级仿真,提供指令的正确执行结果,同时更新指令级处理器模拟器状态;用户态模式的指令,运行在不同的操作数或控制寄存器配置环境下也可能导致系统异常,指令过滤器15根据指令级模拟器提供的执行结果判断产生的指令在用户态模式下运行是否会引起异常,如果会引起异常则及时抛弃引起异常的指令,同时恢复指令产生前的指令级处理器模拟器状态;仿真环境16是包裹在待验证处理器外层的一系列逻辑和操作,主要包括初始化、输入/输出和比较逻辑,可以执行初始化、输入/输出和信号比较等一系列操作。
进行用户态模式随机验证时,产生引擎13根据指令模版12提供的约束从指令库11中选取符合要求的操作码,加入符合约束的操作数,产生出一条符合约束的指令,提供给指令级处理器模拟器14,指令的模拟结果送入指令过滤器15,如果产生的指令会引起系统异常则直接抛弃并恢复该条指令产生前的指令级处理器模拟器状态,则重新产生下一条指令,否则提供指令的模拟结果给仿真环境中的比较逻辑,同时将产生的指令也提供给仿真环境,经处理器执行后,将结果也输出到仿真环境中的比较逻辑,通过二者比较可以检测处理器设计中的错误。
而目前针对核心态指令验证主要依赖手写测试向量和一些应用程序封装的测试向量来完成。用户态随机验证的优势在于对测试向量的约束很灵活,可以是完全约束的指令序列,使其命中指定的测试点,也可以是完全随机的测试序列集,使测试向量尽可能覆盖到角落(corner)状态。与之相比,应用程序封装的测试向量,例如linux,spec cpu 2000,作为固定的指令序列只覆盖有限的固定测试点。而手写测试向量的方法通过列举核心态的指令及控制寄存器的各种状态,采用专家人工书写针对各个测试点的测试向量,这种方法最大的缺点是耗费大量的人工劳动,效率低下,同时,由于核心态指令及控制寄存器的状态组合非常复杂,难以穷举,手写测试向量很难均匀覆盖所有的测试点。显然,只依赖手写测试向量和一些应用程序封装的测试向量无法完成对处理器核心态指令的充分验证。提供一种新方法,在用户态指令级随机验证中支持核心态指令验证,对于更好地进行处理器验证十分重要。
实际上,异常处理是系统进入核心态的重要方式。MIPS R4000异常发生的类型及处理优先级由高到低依次是Reset(重置),soft Reset(软重置),NonmaskableInterrupt(不可屏蔽中断),Address error in instruction fetch(取指地址错),TLB refill in instruction fetch(取指缺页),TLB invalid in instruction fetch(取指页失效),Cache error in instruction fetch(取指缓存错),VirtualConherency in instruction fetch(取指虚一致性错),Bus error in instructionfetch(取指总线错),Integer overflow(整数溢出),Trap(陷阱),System Call(系统调用),Breakpoint(断点),Reserved Instruct ion(保留指令),CoprocessotUnusable(协处理器不可用),Floating-Point Exception(浮点例外),Addresserror in data access(数据访问地址错),TLB refill in data access(数据访问缺页),TLB invalid in data access(数据访问页失效),TLB modified in dataaccess(数据访问),Cache error in data access(数据访问缓存错),Watch(监控异常),Virtual Conherency in data access(数据访问虚一致性错),Bus errorin data access(数据访问总线错),Interrupt(中断)。系统异常发生后程序会转向固定入口地址,不考虑Reset,soft Reset,Nonmaskable Interrupt,64位MIPS处理器常用异常入口地址参见表1。
                      表1
 控制寄存器BEV位   异常种类   入口地址
  0   TLB Refill   0xFFFFFFFF 80000000
  Cache Error   0xFFFFFFFF A0000100
  Others   0xFFFFFFFF 80000180
  1   TLB Refill   0xFFFFFFFF BFC00200
  Cache Error   0xFFFFFFFF BFC00300
  Others   0xFFFFFFFF BFC00380
综上所述,由于现有技术的不足,人们希望有一种在微处理器用户态随机验证中实现核心态程序验证的方法,在保持传统用户态指令级随机验证优势的同时,有效支持核心态指令的验证,提高处理器验证的充分性。
发明内容
本发明的目的是克服现有的处理器核心态指令验证依赖手写测试向量和应用程序封装的测试向量来完成的不足,提供一种在微处理器用户态随机验证中实现核心态程序验证的方法。
为了达到上述目的,本发明是通过以下技术方案实现的:
一种在微处理器用户态随机验证中实现核心态程序验证的方法,包括如下步骤:
a)在指令模版中添加异常处理相关的约束,包括允许发生异常处理的类型和数目;
b)对指令级随机验证产生引擎进行改进,加大TLB项数,改变原有指令序列产生终止条件,使得在指令序列最末尾的两条指令为例外触发指令;
c)在指令级处理器模拟器中加入核心态指令的执行机制,在系统运行核心态指令时提供正确结果;
d)在指令过滤器中加入步骤a)中所添加的异常处理相关的约束的过滤装置,包括异常处理计数器、异常类型过滤器、比较逻辑及输出信号;
e)在仿真环境中加入异常监测逻辑和控制寄存器更新逻辑;
f)在仿真环境提供的存储器中预存TLB refill,Integer overflow,Trap,System Call,Breakpoint,Floating-Point Exception异常处理程序。
在上述方案中,在所述步骤a)中,允许发生异常处理的类型包括:TLB refill,Integer overflow,Trap,System Call,Breakpoint,Floating-Point Exception。
在上述方案中,在所述步骤b)中,加大后的TLB项数可以为待验证处理器物理TLB项数的1~64倍之间的任意数;
在上述方案中,在所述步骤b)中,改变原有指令序列产生终止条件包括:总体指令产生数目减2,在产生程序结尾的最后四条指令时保留程序计数器(ProgramCounter,简称PC)值和跳转指令标示,在指令序列最末尾放置两条SYSCALL指令。
在上述方案中,在所述步骤d)中,在指令过滤器中加入的输出信号是一位的指令保存/取消信号,值为1标示取消指令,值为0标示保留指令,初始值设0;
在上述方案中,在所述步骤d)中,在指令过滤器中加入的异常类型过滤器接收指令级处理器模拟器的执行结果信号,把输入的异常类型与步骤a)中允许发生的异常处理类型相比较,比较结果不一致则设输出信号为1,一致则输出信号不变;
在上述方案中,在所述步骤d)中,在指令过滤器中加入的异常处理计数器统计并累加输入的异常信号数,把输入的异常信号数与步骤a)中允许发生的异常处理数目相比较,输入的异常信号数大于允许发生的异常处理数目则设输出信号为1,否则输出信号不变;
在上述方案中,在所述步骤d)中,在指令过滤器中加入的比较逻辑包括:异常数目比较逻辑和异常类型比较逻辑,前者用于比较输入的异常信号数与步骤a)中允许发生的异常处理数目的大小,后者用于比较输入的异常类型与步骤a)中允许发生的异常处理类型是否一致。
在上述方案中,在所述步骤e)中,在仿真环境中添加的异常监测逻辑包括监测处理器结果总线上异常发生的逻辑和监测处理器结果总线上异常类型的逻辑,异常类型监测逻辑只有在异常发生监测逻辑生效时才生效;
在上述方案中,在所述步骤e)中,在仿真环境中添加的异常监测逻辑监测到指令序列末尾的SYSCALL后停止工作,直到监测到异常处理程序返回指令ERET后,再进行存储器比较;
在上述方案中,在所述步骤e)中,在仿真环境中添加的控制寄存器BEV位更新逻辑在异常监测逻辑检测到异常发生时有效,并根据异常监测逻辑监测到的异常类型强制更新控制寄存器BEV位,TLB refill、Integer overflow、Floating-PointException设置BEV位为0,Trap、System Call、Breakpoint设置BEV位为1;
在上述方案中,在所述步骤f)中,在仿真环境中预存异常处理程序的存储器是只读存储器(ROM)和随机存储器(RAM),ROM中存放核心态异常处理程序,RAM中存放用户态异常处理程序;
在上述方案中,在所述步骤f)中,在仿真环境RAM中存放TLB refill、Integeroverflow、Floating-Point Exception的异常处理程序,TLB refill异常入口地址为0xFFFFFFFF 80000000,其它入口地址为0xFFFFFFFF 80000180;
在上述方案中,在所述步骤f)中,在仿真环境ROM中存放Trap、System Call、Breakpoint的异常处理程序,异常入口地址为0xFFFFFFFF BFC00380;
在上述方案中,在所述步骤f)中,在仿真环境中预存的异常处理程序结构的初始部分必须保存所有异常处理程序体中用到的寄存器,结尾部分释放所有保存的寄存器值,保持进出异常处理程序时通用寄存器和存储器现场不变;
在上述方案中,在所述步骤f)中,在仿真环境中预存TLB refill异常处理程序入口地址的首页存放虚实页号转换表,异常处理程序根据发生缺失页的虚页号,查找虚实页号转换表,找到实页号进行换页操作;
在上述方案中,在所述步骤f)中,在仿真环境中为指令产生序列末尾的SYSCALL指令预存的异常处理程序用CACHE指令写回所有缓存中的数据到存储器中。
与现有技术相比,本发明的有益效果是:
本发明对传统的用户模式指令级随机验证技术进行了有效改进,使之在保持传统指令级随机验证优势的同时,有效支持核心态指令的验证,具体包括两方面:
1)验证更全面:由于核心态指令及控制寄存器的状态组合非常复杂,传统的手写测试向量和应用程序封装的测试向量很难做到对核心态验证空间的均匀覆盖,而本发明依托指令级随机验证方法,在用户态指令级随机验证中支持核心态指令验证,使测试向量对验证空间的覆盖更加广泛、均匀。
2)验证效率高:指令级随机验证主要支持用户态处理器验证,基本可以实现测试向量自动产生和验证,节省大量人力资源,效率高;核心态处理器验证主要依赖手写测试向量和一些应用程序封装完成,需要大量的验证专家的人工劳动,效率低;本发明有效融合用户态和核心态处理器验证的过程,提高处理器验证的整体效率。
附图说明
图1是现有技术中用户态模式指令级随机验证系统结构示意图;
图2是本发明应用于指令级随机验证系统的实施方法流程图;
图3是本发明应用于指令级随机验证系统的一个具体实施例示意图;
图4是本发明应用于指令级随机验证系统的异常处理程序具体实施例示意图;
图5是本发明应用于指令级随机验证系统的执行过程流程图;
具体实施方式
下面结合附图和具体实施方式对本发明作进一步详细描述:
如图2所示,一种在微处理器用户态随机验证中实现核心态程序验证的方法,包括以下步骤:
步骤1,在指令模版中添加异常处理相关的约束,包括允许发生异常处理的类型和数目;
步骤2,对指令级随机验证产生引擎进行改进,加大TLB项数,改变原有指令序列产生终止条件,保证在指令序列最末尾的两条指令为SYSCALL;
步骤3,在指令级处理器模拟器中加入核心态指令Trap,System Call,Breakpoint的执行机制,根据指令手册设置寄存器,在系统运行核心态指令时提供正确结果;
步骤4,在指令过滤器中加入步骤1中所添加的异常处理相关的约束的过滤装置,包括异常处理计数器、异常类型过滤器、比较逻辑及输出信号;
步骤5,在仿真环境中加入异常监测逻辑和控制寄存器BEV位更新逻辑;
步骤6,在仿真环境提供的存储器中预存TLB refill,Integer overflow,Trap,System Call,Breakpoint,Floating-Point Exception异常处理程序;
下面结合图3和图4详细说明对应图2中示出方法的具体步骤:
在步骤1中,在指令模版中添加异常处理相关的约束主要包括两种:
步骤310,设置允许发生异常处理的类型,包括TLB refill,Integeroverflow,Trap,SystemCall,Breakpoint,Floating-Point Exception,例如“{TLB_REFILL,SYSCALL,FP_EXCEPT}”;
步骤311,设置新的参数用于约束异常处理发生的数目,参数形式采用绝对数字表示,例如“{EXCEPT 5}”。
在步骤2中,对指令级随机验证产生引擎进行改进,包括几个方面:
步骤320,加大TLB项数,为TLB refill异常的发生创造条件,加大后的TLB项数可以为待验证处理器物理TLB项数的1~64倍之间的任意数,例如1024;
步骤321,在指令序列最末尾放置两条SYSCALL指令,目的是在随机指令验证结束后可以通过SYSCALL异常处理写回所有缓存,进一步支持内存比较;根据MIPS指令集的规范,SYSCALL指令的指令码格式为:
31           26  25                                                                 6  5                 0
  000000   任意可用于调试信息传递的代码   001100
6                        20                                                                 6
步骤322,改变原有指令序列产生终止条件,包括:总体指令产生数目减2,在产生程序结尾最后四条指令时保留程序计数器(Program Counter,简称PC)值和跳转指令标示,保证SYSCALL异常处理后的正确返回。
在步骤3中,在指令级处理器模拟器中加入核心态指令Trap,System Call,Breakpoint的执行机制,在系统运行核心态指令时提供正确结果,具体包括:
步骤330,根据MIPS指令手册规范,在指令级处理器模拟器运行核心态指令时修改控制寄存器(Control Register简称CR);
步骤331,根据MIPS指令手册规范,在指令级处理器模拟器运行核心态指令时修改通用寄存器(General Register简称GR)。
在步骤4中,在指令过滤器中加入步骤1中所添加的异常处理相关的约束的过滤装置,具体包括:
步骤340,在指令过滤器中加入输出信号,输出信号是一位的指令保存/取消信号,值为1标示取消指令,值为0标示保留指令,初始值设0;
步骤341,在指令过滤器中加入异常类型过滤器,接收指令级处理器模拟器的执行结果信号,把输入的异常类型与步骤1中允许发生的异常处理类型相比较,比较结果不一致则设输出信号为1,一致则输出信号不变;
步骤342,在指令过滤器中加入异常处理计数器,统计并累加输入的异常信号数,把输入的异常信号数与步骤1中允许发生的异常处理数目相比较,输入的异常信号数大于允许发生的异常处理数目则设输出信号为1,否则输出信号不变;
步骤343,在指令过滤器中加入比较逻辑,包括异常数目比较逻辑和异常类型比较逻辑,前者用于比较输入的异常信号数与步骤1中允许发生的异常处理数目的大小,后者用于比较输入的异常类型与步骤1中允许发生的异常处理类型是否一致。
在步骤5中,在仿真环境中加入异常监测逻辑和控制寄存器BEV位更新逻辑,具体包括以下步骤:
步骤350,在仿真环境中添加的异常监测逻辑,包括监测处理器结果总线上异常发生的异常发生监测逻辑351和监测处理器结果总线上异常类型的异常类型监测逻辑352,只有在异常发生监测逻辑监测到异常发生后,异常类型监测逻辑才生效;
步骤353,在仿真环境中添加的异常监测逻辑监测到指令序列术尾的SYSCALL后停止工作,直到监测到异常处理程序返回指令ERET后,再进行存储器比较;
步骤354,在仿真环境中添加的控制寄存器BEV位更新逻辑用于控制寄存器BEV位的强制更新,在异常监测逻辑检测到异常发生时有效,根据异常监测逻辑监测到的异常类型强制更新控制寄存器BEV位,TLB refill、Integer overflow、Floating-Point Exception设置BEV位为0,Trap、System Call、Breakpoint设置BEV位为1。
在步骤6中,在仿真环境中预存异常处理程序的存储器是只读存储器(ROM)和随机存储器(RAM),ROM中存放核心态异常处理程序,RAM中存放用户态异常处理程序。对于允许发生的异常处理类型TLB refill,Integer overflow,Trap,System Call,Breakpoint,Floating-Point Exception,异常处理程序的存放如下:
步骤460,在仿真环境RAM中存放TLB refill、Integer overflow、Floating-Point Exception的异常处理程序,TLB refill异常入口地址为0xFFFFFFFF 80000000,其它入口地址为0xFFFFFFFF 80000180;
步骤461,在仿真环境ROM中存放Trap、System Call、Breakpoint的异常处理程序,异常入口地址为0xFFFFFFFF BFC00380;
步骤462,在仿真环境中预存TLB refill异常处理程序入口地址的首页存放虚实页号转换表,异常处理程序查找虚实页号转换表换页;表2是一个虚实页号转换表的具体实施例。
                  表2
  虚页号   实页号
  110100100010001111001111000   1
  110100100010001000111010001   2
  011001010001100100010001011   3
  …   ……
  001010001100100110010001000   n
异常处理程序的设计包括:
步骤463,在仿真环境中预存的异常处理程序结构的初始部分保存所有异常处理程序体中用到的寄存器,结尾部分释放所有保存的寄存器值,保持进出异常处理程序时通用寄存器和存储器现场不变;
步骤464,TLB refill异常处理程序根据发生缺失页的虚页号,查找虚实页号转换表,找到实页号进行换页操作;
步骤465,入口地址为0xFFFFFFFF 80000180的异常处理程序体可以包含不会发生异常嵌套的任意小于32条的指令;
步骤466,在仿真环境中为指令序列末尾的SYSCALL指令预存的异常处理程序用CACHE指令写回所有缓存中的数据到存储器中,用于存储器比较。
下面结合图5和图2说明利用本发明提供的方法进行处理器指令级随机验证的过程:
步骤51,首先读取并解析指令模版;
步骤52,设定指令长度约束为指令模版设定的指令长度减2;
步骤53,仿真环境初始化;
步骤54,装载异常处理程序;
步骤55,判断已产生指令数是否与设定指令长度约束相匹配;若是,执行步骤580;若否,执行步骤560;
步骤560,根据指令模版中定义的各种约束从指令库中选取指令;
步骤561,随机指令产生引擎产生指令;
步骤562,产生引擎产生的指令被送入指令级处理器模拟器;
步骤563,根据模拟器输出结果判断指令是否会导致异常;若是,执行步骤564;若否则进行两个独立运算过程,分别执行步骤566和步骤587;
步骤564,指令模拟结果送入过滤器,检测产生的指令是否符合异常处理相关的约束;
步骤565,根据指令通过过滤器后的输出结果判断是否要取消产生的指令;若是,执行步骤55;若否,则进行两个独立运算过程,分别执行步骤566和步骤587;
步骤566,根据模拟器输出结果修改相应控制寄存器CR和通用寄存器GR;
步骤567,根据模拟器输出结果修改虚拟内存,然后执行步骤575;
步骤587,产生引擎产生的指令被送入仿真环境;
步骤588,仿真环境中的异常监测逻辑判断异常是否发生;若是,则判断并保存异常类型,执行步骤571;若否,执行步骤570;
步骤570,送入仿真验证环境的指令被装载入待测处理器中运行;然后执行步骤574;
步骤571,根据异常类型进行控制寄存器BEV位的更新,装载指令到待测处理器中运行;
步骤572,根据异常类型转异常入口地址执行异常处理程序;
步骤573,异常处理程序结束,返回仿真环境,执行步骤574;
步骤574,寄存器和内存中的执行结果输出到仿真环境中保存;
步骤575,同步等待模拟器结果送入仿真环境,用于后续步骤的比较操作;
步骤576,比较指令运行结果寄存器是否与指令级模拟器仿真结果一致?若是,则执行步骤577;若否,则执行步骤59;
步骤577,产生指令数加1,然后返回指令选取过程,执行步骤55;
步骤580,随机指令产生引擎产生两条SYSCALL指令;
步骤581,产生引擎产生的指令被送入仿真环境;
步骤582,仿真环境中的异常监测逻辑监测并发现SYSCALL异常发生,设置控制寄存器BEV位,并将指令装载入待测处理器中运行;
步骤583,转异常入口地址0xFFFFFFFF BFC00380执行异常处理程序;
步骤584,异常处理写回所有Cache有效项到内存;
步骤585,异常处理程序结束,返回仿真环境;
步骤586,比较指令运行结果内存是否与指令级模拟器仿真结果一致?若是,则结束整个验证过程;若否,则执行步骤59;
步骤59,发出指令出错警告;
步骤60,异常终止验证过程。
由上述可知,本发明通过在指令模版中添加异常处理相关约束,对指令级随机验证产生引擎进行部分改进,在指令级处理器模拟器中加入核心态指令的执行机制,在指令过滤器中加入异常处理相关的约束的过滤装置,以及在仿真环境中添加少量逻辑和预存异常处理程序,提供一种在微处理器用户态随机验证中实现核心态程序验证的方法,克服现有的处理器核心态指令验证依赖手写测试向量和应用程序封装的测试向量来完成的不足,在保持传统用户态指令级随机验证优势的同时,有效支持核心态指令的验证,提高处理器验证的充分性。
需要说明的是,本文中涉及的步骤,如果没有特别说明,就是指按照书写顺序向下执行。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

Claims (10)

1、在微处理器用户态随机验证中实现核心态程序验证的方法,包括如下步骤:
a)在指令模版中添加异常处理相关的约束,包括允许发生异常处理的类型和数目;
b)对指令级随机验证产生引擎进行改进,加大TLB项数,改变原有指令序列产生终止条件,使得在指令序列最末尾的两条指令为例外触发指令;
c)在指令级处理器模拟器中加入核心态指令的执行机制,设置寄存器,在系统运行核心态指令时提供正确结果;
d)在指令过滤器中加入步骤a)中所添加的异常处理相关的约束的过滤装置,包括异常处理计数器、异常类型过滤器、比较逻辑及输出信号;
e)在仿真环境中加入异常监测逻辑和控制寄存器更新逻辑;
f)在仿真环境提供的存储器中预存TLB refill,Integer overflow,Trap,System Call,Breakpoint,Floating-Point Exception异常处理程序。
2、根据权利要求1所述在微处理器用户态随机验证中实现核心态程序验证的方法,其特征在于,在所述步骤a)中,允许发生异常处理的类型包括:TLB refill,Integer overflow,Trap,System Call,Breakpoint,Floating-Point Exception。
3、根据权利要求1所述在微处理器用户态随机验证中实现核心态程序验证的方法,其特征在于,在所述步骤b)中,加大后的TLB项数为待验证处理器物理TLB项数的1~64倍之间的任意数。
4、根据权利要求3所述在微处理器用户态随机验证中实现核心态程序验证的方法,其特征在于,在所述步骤b)中,改变原有指令序列产生终止条件包括:总体指令产生数目减2,在产生程序结尾的最后四条指令时保留程序计数器值和跳转指令标示,在指令序列最末尾放置两条SYSCALL指令。
5、根据权利要求1所述在微处理器用户态随机验证中实现核心态程序验证的方法,其特征在于,在所述步骤d)中,在指令过滤器中加入的输出信号是一位的指令保存/取消信号,值为1标示取消指令,值为0标示保留指令,初始值设0;在指令过滤器中加入的异常类型过滤器接收指令级处理器模拟器的执行结果信号,把输入的异常类型与步骤a)中允许发生的异常处理类型相比较,比较结果不一致则设输出信号为1,一致则输出信号不变;在指令过滤器中加入的异常处理计数器统计并累加输入的异常信号数,把输入的异常信号数与步骤a)中允许发生的异常处理数目相比较,输入的异常信号数大于允许发生的异常处理数目则设输出信号为1,否则输出信号不变;在指令过滤器中加入的比较逻辑包括:异常数目比较逻辑和异常类型比较逻辑,前者用于比较输入的异常信号数与步骤a)中允许发生的异常处理数目的大小,后者用于比较输入的异常类型与步骤a)中允许发生的异常处理类型是否一致。
6、根据权利要求1所述在微处理器用户态随机验证中实现核心态程序验证的方法,其特征在于,在所述步骤e)中,在仿真环境中添加的异常监测逻辑包括监测处理器结果总线上异常发生的逻辑和监测处理器结果总线上异常类型的逻辑,且异常类型监测逻辑只有在异常发生监测逻辑生效时才生效。
7、根据权利要求6所述在微处理器用户态随机验证中实现核心态程序验证的方法,其特征在于,所述步骤e)中,在仿真环境中添加的异常监测逻辑监测到指令序列末尾的SYSCALL后停止工作,直到监测到异常处理程序返回指令ERET后,再进行存储器比较;在仿真环境中添加的控制寄存器BEV位更新逻辑在异常监测逻辑检测到异常发生时有效,并根据异常监测逻辑监测到的异常类型强制更新控制寄存器BEV位,监测到TLB refill、Integer overflow、Floating-Point Exception时设置BEV位为0,监测到Trap、System Call、Breakpoint时设置BEV位为1。
8、根据权利要求1所述在微处理器用户态随机验证中实现核心态程序验证的方法,其特征在于,在所述步骤f)中,在仿真环境中预存异常处理程序的存储器是只读存储器和随机存储器,只读存储器中存放核心态异常处理程序,随机存储器中存放用户态异常处理程序。
9、根据权利要求1-8中任一项所述在微处理器用户态随机验证中实现核心态程序验证的方法,其特征在于,在所述步骤f)中,在仿真环境中预存的异常处理程序结构的初始部分保存所有异常处理程序体中用到的寄存器,结尾部分释放所有保存的寄存器值,保持进出异常处理程序时通用寄存器和存储器现场不变;在仿真环境中预存TLB refill异常处理程序入口地址的首页存放虚实页号转换表,异常处理程序根据发生缺失页的虚页号,查找虚实页号转换表,找到实页号进行换页操作;在仿真环境中为指令产生序列末尾的SYSCALL指令预存的异常处理程序用CACHE指令写回所有缓存中的数据到存储器中。
10、在微处理器用户态随机验证中实现核心态程序验证的方法,包括如下步骤:
步骤51,读取并解析指令模版;
步骤52,设定指令长度约束为指令模版设定的指令长度减2;
步骤53,仿真环境初始化;
步骤54,装载异常处理程序;
步骤55,判断已产生指令数是否与设定指令长度约束相匹配;若是,执行步骤580;若否,执行步骤560;
步骤560,根据指令模版中定义的各种约束从指令库中选取指令;
步骤561,随机指令产生引擎产生指令;
步骤562,产生引擎产生的指令被送入指令级处理器模拟器;
步骤563,根据模拟器输出结果判断指令是否会导致异常;若是,执行步骤564;若否则进行两个独立运算过程,分别执行步骤566和步骤587;
步骤564,指令模拟结果送入过滤器,检测产生的指令是否符合异常处理相关的约束;
步骤565,根据指令通过过滤器后的输出结果判断是否要取消产生的指令;若是,执行步骤55;若否,则进行两个独立运算过程,分别执行步骤566和步骤587;
步骤566,根据模拟器输出结果修改相应控制寄存器CR和通用寄存器GR;
步骤567,根据模拟器输出结果修改虚拟内存,然后执行步骤575;
步骤587,产生引擎产生的指令被送入仿真环境;
步骤588,仿真环境中的异常监测逻辑判断异常是否发生;若是,则判断并保存异常类型,执行步骤571;若否,执行步骤570;
步骤570,送入仿真验证环境的指令被装载入待测处理器中运行;然后执行步骤574;
步骤571,根据异常类型进行控制寄存器BEV位的更新,装载指令到待测处理器中运行;
步骤572,根据异常类型转异常入口地址执行异常处理程序;
步骤573,异常处理程序结束,返回仿真环境,执行步骤574;
步骤574,寄存器和内存中的执行结果输出到仿真环境中保存;
步骤575,同步等待模拟器结果送入仿真环境,用于后续步骤的比较操作;
步骤576,比较指令运行结果寄存器是否与指令级模拟器仿真结果一致?若是,则执行步骤577;若否,则执行步骤59;
步骤577,产生指令数加1,然后返回指令选取过程,执行步骤55;
步骤580,随机指令产生引擎产生两条SYSCALL指令;
步骤581,产生引擎产生的指令被送入仿真环境;
步骤582,仿真环境中的异常监测逻辑监测并发现SYSCALL异常发生,设置控制寄存器BEV位,并将指令装载入待测处理器中运行;
步骤583,转异常入口地址0xFFFFFFFF BFC00380执行异常处理程序;
步骤584,异常处理写回所有Cache有效项到内存;
步骤585,异常处理程序结束,返回仿真环境;
步骤586,比较指令运行结果内存是否与指令级模拟器仿真结果一致?若是,则结束整个验证过程;若否,则执行步骤59;
步骤59,发出指令出错警告;
步骤60,异常终止验证过程。
CNB2006100782269A 2006-05-12 2006-05-12 在微处理器用户态随机验证中实现核心态程序验证的方法 Active CN100405324C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2006100782269A CN100405324C (zh) 2006-05-12 2006-05-12 在微处理器用户态随机验证中实现核心态程序验证的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2006100782269A CN100405324C (zh) 2006-05-12 2006-05-12 在微处理器用户态随机验证中实现核心态程序验证的方法

Publications (2)

Publication Number Publication Date
CN1892616A true CN1892616A (zh) 2007-01-10
CN100405324C CN100405324C (zh) 2008-07-23

Family

ID=37597501

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2006100782269A Active CN100405324C (zh) 2006-05-12 2006-05-12 在微处理器用户态随机验证中实现核心态程序验证的方法

Country Status (1)

Country Link
CN (1) CN100405324C (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101789034A (zh) * 2009-01-28 2010-07-28 新思科技有限公司 用于构造规范表示的方法和装置
CN102455971A (zh) * 2010-10-28 2012-05-16 无锡江南计算技术研究所 应用级随机指令测试方法、系统及装置
CN102591733A (zh) * 2010-12-21 2012-07-18 Utc消防和保安美国有限公司 用于验证存储器器件完整性的方法和系统
CN105095047A (zh) * 2015-07-17 2015-11-25 中国科学院计算技术研究所 一种提取底层系统行为特征的操作系统监控方法及装置
CN105528177A (zh) * 2014-09-29 2016-04-27 晨星半导体股份有限公司 电子装置及其管理方法
CN106155855A (zh) * 2015-04-07 2016-11-23 龙芯中科技术有限公司 对微处理器进行功能验证的方法及服务器

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100447737C (zh) * 2001-09-27 2008-12-31 中国科学院计算技术研究所 指令流水线中实现访存精确例外的处理方法
JP2003330749A (ja) * 2002-05-17 2003-11-21 Matsushita Electric Ind Co Ltd 情報処理装置の試験方法
US7216337B2 (en) * 2003-04-14 2007-05-08 Microsoft Corporation Automatic determination of invalid call sequences in software components
JP3838998B2 (ja) * 2003-06-20 2006-10-25 富士通株式会社 テストプログラム自動生成システム

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101789034A (zh) * 2009-01-28 2010-07-28 新思科技有限公司 用于构造规范表示的方法和装置
CN101789034B (zh) * 2009-01-28 2015-07-15 新思科技有限公司 用于构造规范表示的方法和装置
CN102455971A (zh) * 2010-10-28 2012-05-16 无锡江南计算技术研究所 应用级随机指令测试方法、系统及装置
CN102455971B (zh) * 2010-10-28 2014-09-03 无锡江南计算技术研究所 应用级随机指令测试方法、系统及装置
CN102591733A (zh) * 2010-12-21 2012-07-18 Utc消防和保安美国有限公司 用于验证存储器器件完整性的方法和系统
CN105528177A (zh) * 2014-09-29 2016-04-27 晨星半导体股份有限公司 电子装置及其管理方法
CN106155855A (zh) * 2015-04-07 2016-11-23 龙芯中科技术有限公司 对微处理器进行功能验证的方法及服务器
CN106155855B (zh) * 2015-04-07 2018-06-19 龙芯中科技术有限公司 对微处理器进行功能验证的方法及服务器
CN105095047A (zh) * 2015-07-17 2015-11-25 中国科学院计算技术研究所 一种提取底层系统行为特征的操作系统监控方法及装置
CN105095047B (zh) * 2015-07-17 2018-05-04 中国科学院计算技术研究所 一种提取底层系统行为特征的操作系统监控方法及装置

Also Published As

Publication number Publication date
CN100405324C (zh) 2008-07-23

Similar Documents

Publication Publication Date Title
CN1892616A (zh) 在微处理器用户态随机验证中实现核心态程序验证的方法
CN1764906A (zh) 数据处理系统中的存储器管理
KR20180132044A (ko) 재구성 가능한 알고리즘 파이프라인 코어 및 알고리즘 매칭 파이프라인 컴파일러를 갖는 프로세서
CN100405323C (zh) 一种在指令级随机测试中支持ejtag测试的实现方法
CN1241272A (zh) 赋予高级微处理器内存储器数据别名的方法和装置
CN101067798A (zh) 一种动态探针方法及其在嵌入式系统中的应用
CN1834922A (zh) 程序变换方法及程序变换系统
CN101826050A (zh) 一种用于制造后处理器芯片验证的随机验证方法及装置
CN1779652A (zh) 一种调试操作系统内核态程序的方法及装置
CN1146784C (zh) 用字长短的指令实现多个寄存器的数据传送的信息处理装置
CN100347683C (zh) 结构无关的微处理器验证及评测方法
CN105760638B (zh) 一种加快soc芯片仿真的方法
Calandrino et al. LinSched: The Linux Scheduler Simulator.
CN1148656C (zh) 面向线程的调试
CN100336033C (zh) 单芯片多处理器结构模拟系统
CN1295778C (zh) 一种验证芯片硬件行为与软件模拟行为的一致性的方法
CN105824696B (zh) 一种具有定时中断功能的处理器装置
Basler et al. satabs: A Bit-Precise Verifier for C Programs: (Competition Contribution)
CN1278237C (zh) 仿真器设备及相关技术
Schmaltz Towards the pervasive formal verification of multi-core operating systems and hypervisors implemented in C
Reid Defining interfaces between hardware and software: Quality and performance
CN100345117C (zh) 二进制翻译中对x86中浮点运算的处理方法
CN1558330A (zh) 家电控制器嵌入式软件的仿真集成开发系统及其纯软件仿真执行方法
Scheipel et al. A Hardware/Software Concept for Partial Logic Updates of Embedded Soft Processors at Runtime
Weinstock et al. AMVP-a high performance virtual platform using parallel SystemC for multicore ARM architectures: work-in-progress

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
EE01 Entry into force of recordation of patent licensing contract

Assignee: Beijing Loongson Zhongke Technology Service Center Co., Ltd.

Assignor: Institute of Computing Technology, Chinese Academy of Sciences

Contract fulfillment period: 2009.12.16 to 2028.12.31

Contract record no.: 2010990000062

Denomination of invention: Method for realizing kernel-mode programe verification in user-mode random verification of microprocessor

Granted publication date: 20080723

License type: exclusive license

Record date: 20100128

LIC Patent licence contract for exploitation submitted for record

Free format text: EXCLUSIVE LICENSE; TIME LIMIT OF IMPLEMENTING CONTACT: 2009.12.16 TO 2028.12.31; CHANGE OF CONTRACT

Name of requester: BEIJING LOONGSON TECHNOLOGY SERVICE CENTER CO., LT

Effective date: 20100128

EC01 Cancellation of recordation of patent licensing contract

Assignee: Longxin Zhongke Technology Co., Ltd.

Assignor: Institute of Computing Technology, Chinese Academy of Sciences

Contract record no.: 2010990000062

Date of cancellation: 20141231

EM01 Change of recordation of patent licensing contract

Change date: 20141231

Contract record no.: 2010990000062

Assignee after: Longxin Zhongke Technology Co., Ltd.

Assignee before: Beijing Loongson Zhongke Technology Service Center Co., Ltd.

LICC Enforcement, change and cancellation of record of contracts on the licence for exploitation of a patent or utility model
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20070110

Assignee: Longxin Zhongke Technology Co., Ltd.

Assignor: Institute of Computing Technology, Chinese Academy of Sciences

Contract record no.: 2015990000066

Denomination of invention: Method for realizing kernel-mode programe verification in user-mode random verification of microprocessor

Granted publication date: 20080723

License type: Common License

Record date: 20150211

TR01 Transfer of patent right

Effective date of registration: 20200820

Address after: 100095, Beijing, Zhongguancun Haidian District environmental science and technology demonstration park, Liuzhou Industrial Park, No. 2 building

Patentee after: LOONGSON TECHNOLOGY Corp.,Ltd.

Address before: 100080 Haidian District, Zhongguancun Academy of Sciences, South Road, No. 6, No.

Patentee before: Institute of Computing Technology, Chinese Academy of Sciences

TR01 Transfer of patent right
EC01 Cancellation of recordation of patent licensing contract

Assignee: LOONGSON TECHNOLOGY Corp.,Ltd.

Assignor: Institute of Computing Technology, Chinese Academy of Sciences

Contract record no.: 2015990000066

Date of cancellation: 20200928

EC01 Cancellation of recordation of patent licensing contract
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing

Patentee after: Loongson Zhongke Technology Co.,Ltd.

Address before: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing

Patentee before: LOONGSON TECHNOLOGY Corp.,Ltd.