微处理器指令集验证方法

文档序号:6377742阅读:590来源:国知局
专利名称:微处理器指令集验证方法
技术领域
本发明涉及一种微处理器指令集的验证方法,具体用于微处理器设计各阶段的功能验证。
背景技术
指令集验证在微处理器设计中非常关键并贯穿于整个设计过程。指令集定义实现的功能越多,电路的集成复杂度的越高,指令集验证工作的复杂度和工作量越大。设计一种自动化、可移植、验证覆盖率高的指令集验证方法对设计正确性、可靠性和缩短芯片从设计到流片的时间非常重要。传统的功能验证方法是通过人工编写大量的“指令序列”作为验证激励,施加到 微处理器设计上,通过EDA软件查看波形,检查指令执行的正确性。这种验证方法具有很大的“随意性”,通常是设计者考虑到某一方面的指令集功能,就设计相应的指令序列,由微处理器执行该段序列来验证设计的正确性。这样就很难完全覆盖到微处理器指令集定义的全部功能。随着微处理器设计规模的增大,需要编写用于验证的指令序列数量成指数量级增长,自动化程度不高。而且当指令集定义发生改变时,需要针对微处理器重新设计验证指令序列,之前的验证代码很难被移植到新设计的验证上。另一种方法是利用高级语言,如C语言,编写复杂的验证程序,经过编译器编译成二进制码,在微处理器上运行该二进制代码对微处理器设计进行验证。这种方法的缺点是,编译器采用优化策略对二进制代码经过优化后,产生的验证代码不能够完全覆盖到微处理器的设计,在一些路径上会缺少对应的验证激励。

发明内容
为了克服现有技术的不足,本发明提供一种自动化、可移植的微处理器指令集验证方法,以提高验证的覆盖率。本发明解决其技术问题所采用的技术方案包括以下步骤步骤I、将监控程序加载到微处理器中,并启动微处理器运行监控程序;步骤2、对微处理器支持的指令集分类,每一类指令由一组参数确定,针对每一类指令,设计一个指令验证的代码框架,将需要验证的指令或指令序列嵌入到这个代码框架中;步骤3、对每组参数按照取指范围遍历取值,根据每组参数值的组合,生成验证的指令或指令序列,并将这个指令或指令序列嵌入到步骤2的验证代码框架中;步骤4、将验证代码框架加载到微处理器中,并发送协议字给微处理器上的监控程序,使微处理器转入到验证代码框架的执行;步骤5、查询微处理器验证结束协议字,如果验证代码执行结束,将执行结果读出;否则,继续查询;步骤6、将步骤5的执行结果和指令执行的期望结果比较,结果正确,将比较结果记录到日志文件中,转步骤2,继续遍历验证;否则,输出错误信息,并记录到日志文件。所述的监控程序按以下步骤操作步骤1-1、查询验证代码框架加载结束协议字,如果协议字有效,转步骤1-2 ;否则继续查询;步骤1-2、跳转至验证代码框架,执行指令验证代码;
步骤1-3、验证代码执行结束,置验证结束协议字,并跳转到步骤1-2,继续下一次验证的查询。所述的指令验证代码框架按以下步骤设计步骤2-1、根据指令的分类,确定验证该类指令所需要的参数,并根据参数,生成指令序列A,通过执行指令序列A准备好当前指令验证的微处理器的状态;步骤2-2、根据参数生成当前被验证的指令B,将指令B添加到序列A之后,生成序列 A&B ;步骤2-3、在序列A&B之后添加一段保护指令B执行结果的指令序列C。本发明的有益效果是本发明提出了一套微处理器指令集自动验证的方法。通过将当前验证的指令的各字段以参数化的形式进行配置,可以对参数进行遍历组合,实现对微处理器设计中所有路径的验证覆盖。验证结果采用自动比对的形式,以文件记录的形式输出,避免了通过分析仿真波形才能判断指令执行真确性的弊端,实现了自动、高效率的验证。发明中提出的验证方法可以移植到在微处理器设计各阶段的验证平台上,如仿真验证阶段的TestBench、时序验证阶段的功能验证TestBench、FPGA验证平台、微处理器的系统验证平台上。


图I :本发明主流程图;图2 :监控程序流程图;图3 :验证代码框架设计流程图;图4 :本发明的具体实施实例框图;图5 :具体实施实例程序存储不意图。
具体实施例方式本发明包括以下步骤步骤I、将监控程序加载到微处理器中,并启动微处理器运行监控程序;步骤2、对微处理器支持的指令集分类,每一类指令由一组参数确定。针对每一类指令,设计一个指令验证的代码框架,需要验证的指令或指令序列嵌入到这个代码框架中;步骤3、对每组参数按照取指范围遍历取值,根据每组参数值的组合,生成验证的指令或指令序列,并将这个指令或指令序列嵌入到步骤2的验证代码框架中;步骤4、将验证代码框架加载到微处理器中,并发送协议字给微处理器上的监控程序,使微处理器转入到验证代码框架的执行;
步骤5、查询微处理器“验证结束”协议字。如果验证代码执行结束,将执行结果读出;否则,继续查询;步骤6、将步骤5的执行结果和指令执行的期望结果比较。结果正确,将比较结果记录到日志文件中,转步骤2,继续遍历验证;否则,输出错误信息,并记录到日志文件。在上述方案中,步骤I所述的监控程序按以下步骤操作步骤1-4、查询验证代码框架加载结束协议字。如果协议字有效,转步骤1-2 ;否贝U,转步骤1-1,继续查询;步骤1-5、跳转至验证代码框架程序段,执行指令验证代码;步骤1-6、验证代码执行结束,置“验证结束”协议字,并跳转到步骤1-2,继续下一次验证的查询。
在上述方案中,步骤2所述的指令验证代码框架按以下步骤设计步骤2-4、根据指令的分类,确定验证该类指令所需要的参数,并根据参数,生成指令序列A.通过执行指令序列A准备好当前指令验证的微处理器的状态;步骤2-5、根据参数生成当前被验证的指令B.将指令B添加到序列A之后;步骤2-6、为避免指令执行的结果被其他指令段“污染”,在序列A&B之后添加一段指令序列C,用来保护指令B执行的结果。下面结合附图和实施例对本发明进一步说明。微处理器的指令集按照完成的功能对指令进行分类寄存器赋值指令一立即数向寄存器赋值、寄存器-寄存器赋值、条件寄存器赋值;访存指令——包括存储器向寄存器加载指令和寄存器向存储器加载指令;算术逻辑指令一包括算术运算指令和逻辑运算指令;跳转控制指令一包括跳转指令、子程序调用和子程序返回指令。如图4,微处理器401实现了设计定义的指令集,是被验证的对象。该微处理器采用RISC结构实现,指令执行分成四级流水,分别是“取指”一“译码”一“执行”一“写回”。微处理器401的实现包括寄存器组(包括通用寄存器、地址寄存器、索引寄存器和其它寄存器)、核内指令存储器、数据存储器和ALU数据通路。结合本实例,发明提出的验证方法模型,由微处理器设计401、微处理器外部存储单元402、主处理器接口 403、指令代码生成框架单元404、数据比较406、结果文件输出405,组成自动化的指令集验证系统,如图4所示。主处理器接口 403、指令代码生成框架单元404、数据比较406、结果文件输出405构成指令集验证的主处理器模拟端。主处理器模拟端控制指令集验证的流程,实现了验证方法的主流程。按以下步骤实施SO:通过处理器接口向微处理器加载协议字监控程序,启动监控程序的运行;SI:随机生成指令验证的参数,包括测试比较数据、操作类型OpType、源操作数Rsrc (包括操作数类型,操作数寄存器索引)、目的操作数Rdst (包括操作数类型,操作数寄存器索引)、条件位cond等指令参数。根据指令分类,每种指令分别由一组参数确定;S2:根据SI的参数,生成指令验证代码的框架;S3:根据处理器指令集的定义,将指令验证代码的框架翻译成二进制码;
S4:通过处理器接口将验证代码加载到微处理器的指令存储器中;S5:发出启动指令验证协议字,控制微处理器跳转到指令验证代码的执行;S6:查询微处理器指令验证结束协议字,并读回执行结果;S7:正确性检查。结果正确,结果以日志记录,转SI,继续下一条指令的验证;否贝IJ,错误信息记录到日志文件,转SI。以“算术逻辑指令”为实例,说明指令验证代码的框架的操作方法“算术逻辑指令”验证需要的参数有(OpType, Rsrc, Rdst, Opl, 0p2, Nif)
其中,OpType :算术逻辑指令操作类型。取值范围为指令集定义的10种算术逻辑操作;Rsrc :源操作数I寄存器索引值。取值范围为微处理器设计中8个通用寄存器;Rdst :源操作数2和目的寄存器索引值。取值范围为微处理器设计中8个通用寄存器;Opl :源操作数I数据。取值范围根据微处理器的设计为32位无符号或有符号数据,在数据表示范围内随机取值;0p2 :源操作数2数据。取值范围根据微处理器的设计为32位无符号或有符号数据,在数据表示范围内随机取值;Nif :定浮点操作类型参数。根据以上参数设计的指令验证代码的框架见表I。表I
序列段指令序列说明
AORsrc-eOpl将数据Opl加载到源寄存器
"AlRdst^Op2将数据Op2加载到目的寄存器
BRdst<-Rsrc OpTypeNif Rdst 被验证的算术逻辑指令C Mem令Rdst将目的寄存器内的执行结果保护到存储器中验证时,首先由主处理器通过处理器接口 403加载协议字监控程序到微处理器的监控程序段501,并启动微处理器的运行。此时,监控程序检查主处理器模拟端是否将指令验证代码加载到指令存储区的指令验证代码段502中。如果监控程序接收到启动协议字503 (位于数据存储器内),监控程序跳转到指令验证框架代码段502执行。执行完成后,写结束协议字到协议约定的数据存储区内504,并跳转到监控程序中,继续等待启动下一条指令的验证,如图5所示。指令验证代码完成对处理器指令集各项功能的验证,根据验证项的不同,指令验证代码可以完成简单指令逐条验证、指令相关等功能项的验证工作。本实例实现自动化的验证方式,每一类指令通过一组参数惟一确定,在验证协议中,根据这组参数生成指令验证的代码框架。参数的范围由微处理器的硬件结构决定。上述的四类指令可以通过四组参数来确定,在验证流程中分成四个验证分支来实现。
对于当前验证的指令,需要将所有的源操作数在指令执行前,存放到指令指定的寄存器中。在本发明的验证方法中,通过增加辅助指令序列,用来设置当前指令验证的环境,主要是设置当前微处理器的寄存器组的状态。同时,指令验证采用在线自动化的验证方式,为避免指令执行结束后,指令的执行结果被“污染”,在指令验证代码框架中增加了将指令执行结果及时保护的指令序列。
为实现对指令所有执行路径的完全覆盖,可以将所有的参数采用遍历的方法,以提高对设计的覆盖率。考虑到设计过程中验证效率,可以在验证过程中,随机选取一组或几组参数值进行功能的正确性检验。
权利要求
1.一种微处理器指令集验证方法,其特征在于包括下述步骤 步骤I、将监控程序加载到微处理器中,并启动微处理器运行监控程序; 步骤2、对微处理器支持的指令集分类,每一类指令由一组参数确定,针对每一类指令,设计一个指令验证的代码框架,将需要验证的指令或指令序列嵌入到这个代码框架中;步骤3、对每组参数按照取指范围遍历取值,根据每组参数值的组合,生成验证的指令或指令序列,并将这个指令或指令序列嵌入到步骤2的验证代码框架中; 步骤4、将验证代码框架加载到微处理器中,并发送协议字给微处理器上的监控程序,使微处理器转入到验证代码框架的执行; 步骤5、查询微处理器验证结束协议字,如果验证代码执行结束,将执行结果读出;否贝U,继续查询; 步骤6、将步骤5的执行结果和指令执行的期望结果比较,结果正确,将比较结果记录到日志文件中,转步骤2,继续遍历验证;否则,输出错误信息,并记录到日志文件。
2.根据权利要求I所述的微处理器指令集验证方法,其特征在于所述的监控程序按以下步骤操作 步骤1-1、查询验证代码框架加载结束协议字,如果协议字有效,转步骤1-2 ;否则继续查询; 步骤1-2、跳转至验证代码框架,执行指令验证代码; 步骤1-3、验证代码执行结束,置验证结束协议字,并跳转到步骤1-2,继续下一次验证的查询。
3.根据权利要求I所述的微处理器指令集验证方法,其特征在于所述的指令验证代码框架按以下步骤设计 步骤2-1、根据指令的分类,确定验证该类指令所需要的参数,并根据参数,生成指令序列A,通过执行指令序列A准备好当前指令验证的微处理器的状态; 步骤2-2、根据参数生成当前被验证的指令B,将指令B添加到序列A之后,生成序列A&B ; 步骤2-3、在序列A&B之后添加一段保护指令B执行结果的指令序列C。
全文摘要
本发明提供了一种微处理器指令集验证方法,将监控程序加载到微处理器中;对微处理器支持的指令集分类,将需要验证的指令嵌入到代码框架中;遍历每组参数按生成验证的指令,嵌入到验证代码框架中;将验证代码框架加载到微处理器中,查询微处理器验证结束协议字,将执行结果和指令执行的期望结果比较,结果正确,将比较结果记录到日志文件中,否则,输出错误信息,并记录到日志文件。本发明避免了通过分析仿真波形才能判断指令执行真确性的弊端,实现了自动、高效率的验证。
文档编号G06F9/46GK102902906SQ20121036223
公开日2013年1月30日 申请日期2012年9月26日 优先权日2012年9月26日
发明者曹辉, 杨靓, 卢强, 何卫强 申请人:中国航天科技集团公司第九研究院第七七一研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1