一种在指令级随机测试中支持ejtag测试的实现方法

文档序号:6631676阅读:109来源:国知局
专利名称:一种在指令级随机测试中支持ejtag测试的实现方法
技术领域
本发明涉及微处理器验证技术,特别涉及一种在指令级随机测试中支持增强联合测试行动组(Enhanced Joint Test Action Group,以下简称EJTAG)测试的方法。
背景技术
指令级随机测试是通用微处理器验证的常用方法,如图1所示,通常包括五个部分指令库11,指令模版12、产生引擎13、指令级模拟器14、仿真环境15。指令库11中包含处理器支持的所有有效指令;指令模版12是一系列配置文件,用于进行指令的配置、规范和过滤;产生引擎13可以有效支持配置文件约束下的指令生成;指令级模拟器14是待验证的微处理器的最简单参考模型,支持指令级仿真,提供指令的正确执行结果;仿真环境15是包裹在待验证处理器外层的一系列逻辑和操作,主要包括初始化、输入/输出和比较逻辑,可以执行初始化、输入/输出和信号比较等一系列操作。进行指令级随机测试时,产生引擎根据指令模版提供的约束从指令库中选取符合要求的操作码,加入符合约束的操作数,产生出一条符合约束的指令,提供给仿真环境,经处理器执行后,将结果输出到仿真环境中的比较逻辑;同时,该条指令也提供给指令级模拟器,指令的模拟结果作为参考值也提供给仿真环境中的比较逻辑,通过二者比较可以检测处理器设计中的错误。
随着嵌入式系统在越来越多的领域得到广泛的应用,嵌入式微处理器核的验证也越来越受到重视,许多原来应用在通用处理器的验证技术也被移植到嵌入式微处理器核的验证中。然而,嵌入式微处理器核的一些特性会对通用处理器验证技术提出新的挑战。与通用处理器不同,为了便于软件开发和调试,嵌入式微处理器核设计时需要提供交叉调试器。交叉调试器由功能处理模块、控制应用程序模块两部分组成功能处理模块运行在宿主机上,控制应用程序模块运行在目标机上。交叉调试器主要功能是调试运行在目标机上的可执行代码,一般应能够提供执行程序、添加删除断点、单步执行、修改代码、查看和修改变量值等基本调试功能。
片上调试(On Chip Debugging)是实现交叉调试器的常用方法。在处理器内部嵌入额外的控制模块,当满足了一定的触发条件时进入某种特殊状态。在该状态下,被调试程序停止运行,主机的调试器可以通过处理器外部特设的通信接口访问各种资源(寄存器、存储器等)并执行指令。EJTAG是嵌入式CPU上由硬件实现的一个模块,用于实现片上调试,协助进行开发板监控程序和OS的移植、运行开发板诊断程序等。EJTAG可实现的功能包括采用多种模式设置硬件断点、单步执行等,实现方式处理器在某个调试例外(包括单步调试,硬件断点等等)产生以后进入到调试模式下,一直到DERET指令执行以后从调试模式退出来。在这段时间里,处理器执行调试例外处理程序,在例外处理程序中,可以进行各种EJTAG操作。常见的EJTAG调试例外参见表1。系统退出调试模式以后允许应用程序或是系统代码继续执行。
对于包含EJTAG片上交叉调试器的嵌入式CPU验证,传统的指令级随机测试技术,只考虑连续指令的仿真验证,并未覆盖EJTAG的测试和验证,而作为嵌入式CPU的一个组成部分,针对EJTAG的验证显然是必不可少的。目前,测试EJTAG主要以手写测试向量的方法来实现,通过列举EJTAG的各种状态,采用专家人工书写针对各个测试点的测试向量,这种方法最大的缺点是耗费大量的人工劳动,效率低下,同时,由于EJTAG的各种状态组合非常复杂,难以穷举,手写测试向量很难均匀覆盖所有的测试点。
综上所述,由于现有技术的不足,人们希望提供一种改进的指令级随机测试嵌入式CPU的方法,在保持传统指令级随机测试优势的同时,有效支持包含EJTAG片上交叉调试器的微处理器核的测试和验证。

发明内容
本发明的目的是克服现有的指令级随机测试技术无法实现片上交叉调试器测试的不足,从而提供一种在指令级随机测试中支持EJTAG测试的方法,该方法可以有效支持包含EJTAG片上交叉调试器的微处理器核的测试和验证,同时不影响指令级随机测试原有的性能优势。
为了达到上述目的,本发明是通过以下技术方案实现的一种在指令级随机测试中支持EJTAG测试的实现方法,包括如下步骤
a)在指令库中添加EJTAG调试指令SDBBP/DRET,指令SDBBP用于引起EJTAG调试例外,指令DRET用于调试例外返回;b)在指令模版中加入步骤a)中所添加调试指令相关的约束;c)对指令级随机测试产生引擎进行改进,加入存取指令判断、程序计数器(Program Counter,简称PC)随机抽取、存取地址记录、存取数据记录、跳转指令记录,同时添加相应的输出信号;d)在指令级模拟器中加入调试指令SDBBP/DRET的执行机制,同时加入调试控制寄存器(Debug Control Register,简称DCR),在系统进入EJTAG调试中断时提供正确结果;e)在仿真环境中加入信号输入、输出和比较逻辑;f)在仿真环境提供的存储器中预存EJTAG调试例外处理程序;在上述方案中,在所述步骤b)中,调试指令相关的约束包括一个是每一条SDBBP指令必须有一条DRET指令与之相匹配,另一个是设置新的参数用于调整调试例外发生的比例。
在上述方案中,在所述步骤c)中,指令级随机测试产生引擎添加的输出信号包括随机提取的程序计数器(PC)有效信号、load/store指令提示信号、随机抽取的与load/store指令相匹配的地址、随机抽取的与load/store指令相匹配的数据、与load/store指令相匹配的程序计数器(PC)值、分支转移指令提示信号、调试例外计数信号。
在上述方案中,在所述步骤d)中,指令级模拟器提供的在系统进入EJTAG调试中断时的正确执行结果包括一是控制寄存器(Control Register简称CR)的修改,二是调试控制寄存器(Debug Control Register,简称DCR)的修改。
在上述方案中,在所述步骤e)中,在仿真环境中添加的输入信号即为所述步骤c)中产生引擎的输出信号包括随机提取的程序计数器(PC)有效信号、load/store指令提示信号、随机抽取的与load/store指令相匹配的地址、随机抽取的与load/store指令相匹配的数据、与load/store指令相匹配的PC值、分支转移指令提示信号、调试例外计数信号;
在仿真环境中添加的输出信号包括调试指令出错信号、程序计数器(PC)调试例外出错信号、地址调试例外出错信号、数据调试例外出错信号。
在上述方案中,在所述步骤e)中,在仿真环境中添加的比较逻辑包括,调试指令结果比较逻辑、程序计数器(PC)调试例外结果比较逻辑、地址调试例外结果比较逻辑、数据调试例外结果比较逻辑。
在上述方案中,在所述步骤f)中,在仿真环境中预存调试例外处理程序的存储器是只读存储器(ROM)或随机存储器(RAM)。
在上述方案中,在所述步骤e)中,仿真环境中添加的比较逻辑包括所有的通用寄存器(General Register简称GR)、浮点寄存器(Float Point Register简称FR)、控制寄存器(Congtrol Register,简称CR)和调试控制寄存器(Debug Control Register,简称DCR)的比较。
在上述方案中,在所述步骤e)中,仿真环境中添加的比较逻辑要求数据调试例外结果比较逻辑只在地址调试例外结果比较逻辑生效时才生效。
与现有技术相比,本发明的有益效果是对传统的指令级随机测试技术进行了有效改造,使之在保持传统指令级随机测试优势的同时,有效支持包含EJTAG片上交叉调试器的微处理器核的测试和验证,具体包括两方面1)测试更全面传统的手写测试向量很难做到对所有测试空间的均匀覆盖,而依托随机测试产生,可以使测试向量对测试空间的覆盖更加全面、均匀。
2)测试效率高手写测试向量需要大量的测试专家的人工劳动,效率低,而随机测试产生基本可以实现测试向量的自动生成,节省大量人力资源,效率高。


图1是现有技术中指令级随机测试系统结构示意图;图2是本发明应用于指令级随机测试系统的实施方法流程图;图3是本发明应用于指令级随机测试系统的一个具体实施例示意图;图4是本发明应用于指令级随机测试系统的执行过程流程图;
表1常见EJTAG调试例外;表2调试例外处理程序返回地址;具体实施方式
下面结合附图和具体实施方式
对本发明作进一步详细描述如图2所示,一种在指令级随机测试中支持EJTAG测试的方法,包括以下步骤步骤1,在指令库中添加EJTAG调试指令SDBBP/DRET;步骤2,在指令模版中加入调试指令相关的约束;步骤3,对指令级随机测试产生引擎进行改进,加入存取指令判断、程序计数器随机抽取、存取地址记录、存取数据记录、跳转指令记录,同时添加相应的输出信号;步骤4,在指令级模拟器中加入调试指令SDBBP/DRET的执行机制,同时加入调试控制寄存器(DCR),在系统进入EJTAG调试中断时提供正确结果;步骤5,在仿真环境中加入信号输入、输出和比较逻辑;步骤6,在仿真环境提供的存储器中预存调试例外处理程序;下面结合图3详细说明对应图2中示出方法的各步骤在步骤1中,对于在指令库31中添加EJTAG调试指令包括两个方面步骤310,在指令库中加入调试指令的指令名称“SDBBP”和“DRET”;步骤311,在指令库中加入调试指令SDBBP/DRET的指令码;根据无内部互锁流水级的处理器(Microprocessor without Interlocked Piped Stages,简称MIPS)指令集的规范,32位SDBBP的指令码格式为31 26 25 6 5 0

6 20 6
DRET的指令码格式为3126 2524 6 50

6 119 6在步骤2中,对于在指令模版32中加入调试指令相关的约束包括两种步骤320,一种是每一条SDBBP指令必须有一条DRET指令与之相匹配,例如“{SDBBP,DRET}”。
步骤321,另一种是设置新的参数用于调整调试例外发生的比例,参数形式可以采用绝对或相对比例数字,例如“SDBBP 1%”。
在步骤3中,对于指令级随机测试产生引擎33的改进包括如下方面步骤330,添加存取指令判断逻辑;步骤331,通过识别操作码标记并记录所有的load/store存取指令;步骤332,进一步保存所有load/store指令的存取地址记录和存取数据记录;步骤333,添加分支转移指令判断;步骤334,通过识别操作码标记并记录分支转移指令;步骤335,从程序计数器栈中随机抽取程序计数器值并加以记录;步骤336,添加相应的输出信号,输出信号有七种一是随机提取的PC有效信号,二是load/store指令提示信号,三是随机抽取的与load/store指令相匹配的地址,四是随机抽取的与load/store指令相匹配的数据,五是与load/store指令相匹配的PC值,六是分支转移指令提示信号,七是调试例外计数信号。
在步骤4中,分为如下过程步骤340,对于在指令级模拟器34中加入调试指令SDBBP/DRET的执行机制;首先添加调试指令入口,可通过标准操作码或内部自定义编码标示入口;步骤341,调试例外提示信号设置;步骤342,虚拟存储器的修改;
步骤343,通用控制寄存器(CR)和调试控制寄存器(DCR)的修改。
在步骤5中,对于在仿真环境35中加入信号输入、输出和比较逻辑,具体过程如下步骤350,添加输入信号,即为步骤3中指令级随机测试产生引擎的输出信号(即参见步骤336),共有七种一是随机提取的PC有效信号,二是load/store指令提示信号,三是随机抽取的与load/store指令相匹配的地址,四是随机抽取的与load/store指令相匹配的数据,五是与load/store指令相匹配的PC值,六是分支转移指令提示信号,七是调试例外计数信号;步骤351,添加比较逻辑,有四种,一是调试指令结果比较逻辑,识别SDBBP/DRET调试指令,将所有待测微处理器的GR、FR、CR和DCR的值与指令模拟器的输出进行比较,二是PC调试例外结果比较逻辑,识别PC断点,将所有待测微处理器的GR、FR、CR和DCR的值与指令模拟器的输出进行比较,三是地址调试例外结果比较逻辑,识别LOAD/STORE指令的地址,将所有待测微处理器的GR、FR、CR和DCR的值与指令模拟器的输出进行比较,四是数据调试例外结果比较逻辑,在LOAD/STORE指令地址匹配的基础上,识别LOAD/STORE指令的被存取数据,将所有待测微处理器的GR、FR、CR和DCR的值与指令模拟器的输出进行比较;仿真环境中添加的比较逻辑要求数据调试例外结果比较逻辑只在地址调试例外结果比较逻辑生效时才生效;根据调试例外提示信号,所有比较逻辑的结果送至步骤352中相应的输出信号。
步骤352,仿真环境中添加输出信号,有四种,一是调试指令出错信号,二是PC调试例外出错信号,三是地址调试例外出错信号,四是数据调试例外出错信号。
在步骤6中,对于在仿真环境提供的存储器中预存调试例外处理程序,在仿真环境中提供的存储器可以是只读存储器(Read-only Memory,简称ROM),也可以是随机存储器(Random Access Memory,简称RAM);本实施例采用ROM;预存的调试例外处理程序可以采用手写或随机产生,但返回地址需要根据步骤5中输入的分支转移指令提示信号和比较逻辑的不同结果组合分别处理,参见表2。
下面结合图4和图2说明利用本发明提供的方法进行嵌入式CPU验证的过程步骤41,首先读取并解析指令模版;
步骤42判断指令长度是否与指令模版中的约束参数相匹配;若是,则结束整个验证过程,执行步骤48;若否,执行步骤43;步骤43,根据指令模版中定义的各种约束从指令库中选取指令;步骤44,随机指令产生引擎产生指令;步骤440,分支转移指令判断;若是,执行步骤441;若否,执行步骤442;步骤441,通过识别操作码标记并记录所有的分支转移指令,执行步骤442;步骤442,load/store存取指令判断;若是,执行步骤443;若否,执行步骤444;步骤443,load/store存取指令及其存取地址记录和存取数据记录;步骤444,完成PC值随机抽取和记录;然后进行两个独立运算过程,分别执行步骤46和步骤47;步骤46,产生引擎产生的指令被送入指令级模拟器;步骤460,判断是否为EJTAG断点指令;若是,执行步骤461;若否执行步骤462;步骤461,根据具体调试断点类型修改相应的CR、DCR,同时设置例外提示信号,然后执行步骤472;步骤462,直接修改GR、FR、其他CR和内存,然后执行步骤472;步骤47,产生引擎产生的指令被送入方针环境;步骤470,送入仿真验证环境的指令被装载入待测微处理器中运行;步骤471,保存在寄存器和内存中的结果由信号线输出到仿真环境中;步骤472,同步等待模拟器结果送入仿真环境,用于后续步骤的比较操作;步骤473,在仿真环境中判断是否发生了调试断点例外;若是,执行步骤474;若否,执行步骤475;步骤474,比较调试例外运行结果是否与指令级模拟器仿真结果一致?若是,执行步骤475;若否,执行步骤476;步骤475,比较标准指令运行结果是否与指令级模拟器仿真结果一致?若是,则返回指令选取过程,执行步骤42;若否,执行步骤477;步骤476,发出调试例外出错警告,执行步骤49;步骤477,发出标准指令出错警告;执行步骤49;步骤49,异常终止验证过程。
由上述可知,本发明的优点是通过在指令库和指令模版中添加EJTAG调试指令及相关约束,在指令级随机测试产生引擎和仿真环境中添加少量比较逻辑和记录操作,克服了现有的指令级随机测试技术在片上交叉调试器测试领域的不足,有效支持EJTAG测试。
需要说明的是,本文中涉及的步骤,如果没有特别说明,就是指按照书写顺序向下执行。
最后应说明的是以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
权利要求
1.一种在指令级随机测试中支持EJTAG测试的实现方法,包括如下步骤a)在指令库中添加EJTAG调试指令SDBBP/DRET,指令SDBBP用于引起EJTAG调试例外,指令DRET用于调试例外返回;b)在指令模版中加入步骤a)中所添加调试指令相关的约束;c)对指令级随机测试产生引擎进行改进,加入存取指令判断、程序计数器随机抽取、存取地址记录、存取数据记录、跳转指令记录,同时添加相应的输出信号;d)在指令级模拟器中加入调试指令SDBBP/DRET的执行机制,同时加入调试控制寄存器,在系统进入EJTAG调试中断时提供正确结果;e)在仿真环境中加入信号输入、输出和比较逻辑;f)在仿真环境提供的存储器中预存EJTAG调试例外处理程序;
2.根据权利要求1所述在指令级随机测试中支持EJTAG测试的实现方法,其特征是,所述步骤b)中,调试指令相关的约束有一个是每一条SDBBP指令必须有一条DRET指令与之相匹配,另一个是设置新的参数用于调整调试例外发生的比例。
3.根据权利要求1所述在指令级随机测试中支持EJTAG测试的实现方法,其特征是,所述步骤c)中,指令级随机测试产生引擎添加的输出信号包括随机提取的程序计数器有效信号、load/store指令提示信号、随机抽取的与load/store指令相匹配的地址、随机抽取的与load/store指令相匹配的数据、与load/store指令相匹配的程序计数器、分支转移指令提示信号、调试例外计数信号。
4.根据权利要求1所述在指令级随机测试中支持EJTAG测试的实现方法,其特征是,所述步骤d)中,指令级模拟器提供的在系统进入EJTAG调试中断时的正确执行结果包括两方面一是控制寄存器的修改,二是调试控制寄存器的修改。
5.根据权利要求1所述在指令级随机测试中支持EJTAG测试的实现方法,其特征是,所述步骤e)中,在仿真环境中添加的输入信号就是所述步骤c)中产生引擎的输出信号,包括随机提取的程序计数器有效信号、load/store指令提示信号、随机抽取的与load/store指令相匹配的地址、随机抽取的与load/store指令相匹配的数据、与load/store指令相匹配的PC值、分支转移指令提示信号、调试例外计数信号;在仿真环境中添加的输出信号包括调试指令出错信号、程序计数器调试例外出错信号、地址调试例外出错信号、数据调试例外出错信号。
6.根据权利要求1所述在指令级随机测试中支持EJTAG测试的实现方法,其特征是,所述步骤e)中,在仿真环境中添加的比较逻辑包括调试指令结果比较逻辑、程序计数器调试例外结果比较逻辑、地址调试例外结果比较逻辑、数据调试例外结果比较逻辑。
7.根据权利要求1所述在指令级随机测试中支持EJTAG测试的实现方法,其特征是,所述步骤f)中,在仿真环境中预存调试例外处理程序的存储器是只读存储器或随机存储器。
8.根据权利要求1所述在指令级随机测试中支持EJTAG测试的实现方法,其特征是,所述步骤e)中,仿真环境中添加的比较逻辑包括所有的通用寄存器、浮点寄存器、控制寄存器和调试控制寄存器的比较。
9.根据权利要求1所述在指令级随机测试中支持EJTAG测试的实现方法,其特征是,所述步骤e)中,仿真环境中添加的比较逻辑要求数据调试例外结果比较逻辑只在地址调试例外结果比较逻辑生效时才生效。
10.一种利用权利要求1提供的在指令级随机测试中支持EJTAG测试的实现方法进行嵌入式CPU验证的过程,包括如下步骤步骤41,首先读取并解析指令模版;步骤42,判断指令长度是否与指令模版中的约束参数相匹配若是,则结束整个验证过程,执行步骤48;若否,执行步骤43;步骤43,根据指令模版中定义的各种约束从指令库中选取指令;步骤44,随机指令产生引擎产生指令;步骤440,分支转移指令判断;若是,执行步骤441;若否,执行步骤442;步骤441,通过识别操作码标记并记录所有的分支转移指令,执行步骤442;步骤442,load/store存取指令判断;若是,执行步骤443;若否,执行步骤444;步骤443,load/store存取指令及其存取地址记录和存取数据记录;步骤444,完成PC值随机抽取和记录;然后进行两个独立运算过程,分别执行步骤46和步骤47;步骤46,产生引擎产生的指令被送入指令级模拟器;步骤460,判断是否为EJTAG断点指令;若是,执行步骤461;若否执行步骤462;步骤461,根据具体调试断点类型修改相应的CR、DCR,同时设置例外提示信号,然后执行步骤472;步骤462,直接修改GR、FR、其他CR和内存,然后执行步骤472;步骤47,产生引擎产生的指令被送入方针环境;步骤470,送入仿真验证环境的指令被装载入待测微处理器中运行;步骤471,保存在寄存器和内存中的结果由信号线输出到仿真环境中;步骤472,同步等待模拟器结果送入仿真环境,用于后续步骤的比较操作;步骤473,在仿真环境中判断是否发生了调试断点例外;若是,执行步骤474;若否,执行步骤475;步骤474,比较调试例外运行结果是否与指令级模拟器仿真结果一致?若是,执行步骤475;若否,执行步骤476;步骤475,比较标准指令运行结果是否与指令级模拟器仿真结果一致?若是,则返回指令选取过程,执行步骤42;若否,执行步骤477;步骤476,发出调试例外出错警告,执行步骤49;步骤477,发出标准指令出错警告;执行步骤49;步骤49,异常终止验证过程。
全文摘要
本发明公开了一种在指令级随机测试中支持EJTAG测试的方法,包括步骤a)在指令库中添加EJTAG调试指令SDBBP/DRET;b)在指令模版中添加调试指令相关的约束;c)对指令级随机测试产生引擎进行改进;d)在指令级模拟器中加入调试指令SDBBP/DRET的执行机制,同时添加调试控制寄存器;e)在仿真环境中加入信号输入、输出和比较逻辑;f)在仿真环境提供的存储器中预存EJTAG调试例外处理程序。本发明对传统的指令级随机测试技术进行有效改造,在保持传统指令级随机测试优势的同时,有效支持包含EJTAG片上交叉调试器的微处理器核的测试和验证。
文档编号G06F11/36GK1936860SQ20051008644
公开日2007年3月28日 申请日期2005年9月20日 优先权日2005年9月20日
发明者沈海华, 王朋宇, 胡伟武 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1