CN102902906B - 微处理器指令集验证方法 - Google Patents
微处理器指令集验证方法 Download PDFInfo
- Publication number
- CN102902906B CN102902906B CN201210362231.8A CN201210362231A CN102902906B CN 102902906 B CN102902906 B CN 102902906B CN 201210362231 A CN201210362231 A CN 201210362231A CN 102902906 B CN102902906 B CN 102902906B
- Authority
- CN
- China
- Prior art keywords
- instruction
- microprocessor
- sequence
- checking
- code
- 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
Links
Abstract
本发明提供了一种微处理器指令集验证方法,将监控程序加载到微处理器中;对微处理器支持的指令集分类,将需要验证的指令嵌入到代码框架中;遍历每组参数按生成验证的指令,嵌入到验证代码框架中;将验证代码框架加载到微处理器中,查询微处理器验证结束协议字,将执行结果和指令执行的期望结果比较,结果正确,将比较结果记录到日志文件中,否则,输出错误信息,并记录到日志文件。本发明避免了通过分析仿真波形才能判断指令执行真确性的弊端,实现了自动、高效率的验证。
Description
技术领域
本发明涉及一种微处理器指令集的验证方法,具体用于微处理器设计各阶段的功能验证。
背景技术
指令集验证在微处理器设计中非常关键并贯穿于整个设计过程。指令集定义实现的功能越多,电路的集成复杂度的越高,指令集验证工作的复杂度和工作量越大。设计一种自动化、可移植、验证覆盖率高的指令集验证方法对设计正确性、可靠性和缩短芯片从设计到流片的时间非常重要。
传统的功能验证方法是:通过人工编写大量的“指令序列”作为验证激励,施加到微处理器设计上,通过EDA软件查看波形,检查指令执行的正确性。这种验证方法具有很大的“随意性”,通常是设计者考虑到某一方面的指令集功能,就设计相应的指令序列,由微处理器执行该段序列来验证设计的正确性。这样就很难完全覆盖到微处理器指令集定义的全部功能。随着微处理器设计规模的增大,需要编写用于验证的指令序列数量成指数量级增长,自动化程度不高。而且当指令集定义发生改变时,需要针对微处理器重新设计验证指令序列,之前的验证代码很难被移植到新设计的验证上。
另一种方法是:利用高级语言,如C语言,编写复杂的验证程序,经过编译器编译成二进制码,在微处理器上运行该二进制代码对微处理器设计进行验证。这种方法的缺点是,编译器采用优化策略对二进制代码经过优化后,产生的验证代码不能够完全覆盖到微处理器的设计,在一些路径上会缺少对应的验证激励。
发明内容
为了克服现有技术的不足,本发明提供一种自动化、可移植的微处理器指令集验证方法,以提高验证的覆盖率。
本发明解决其技术问题所采用的技术方案包括以下步骤:
步骤1、将监控程序加载到微处理器中,并启动微处理器运行监控程序;
步骤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验证平台、微处理器的系统验证平台上。
附图说明
图1:本发明主流程图;
图2:监控程序流程图;
图3:验证代码框架设计流程图;
图4:本发明的具体实施实例框图;
图5:具体实施实例程序存储示意图。
具体实施方式
本发明包括以下步骤:
步骤1、将监控程序加载到微处理器中,并启动微处理器运行监控程序;
步骤2、对微处理器支持的指令集分类,每一类指令由一组参数确定。针对每一类指令,设计一个指令验证的代码框架,需要验证的指令或指令序列嵌入到这个代码框架中;
步骤3、对每组参数按照取指范围遍历取值,根据每组参数值的组合,生成验证的指令或指令序列,并将这个指令或指令序列嵌入到步骤2的验证代码框架中;
步骤4、将验证代码框架加载到微处理器中,并发送协议字给微处理器上的监控程序,使微处理器转入到验证代码框架的执行;
步骤5、查询微处理器“验证结束”协议字。如果验证代码执行结束,将执行结果读出;否则,继续查询;
步骤6、将步骤5的执行结果和指令执行的期望结果比较。结果正确,将比较结果记录到日志文件中,转步骤2,继续遍历验证;否则,输出错误信息,并记录到日志文件。
在上述方案中,步骤1所述的监控程序按以下步骤操作:
步骤1-4、查询验证代码框架加载结束协议字。如果协议字有效,转步骤1-2;否则,转步骤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构成指令集验证的主处理器模拟端。主处理器模拟端控制指令集验证的流程,实现了验证方法的主流程。按以下步骤实施:
S0:通过处理器接口向微处理器加载协议字监控程序,启动监控程序的运行;
S1:随机生成指令验证的参数,包括测试比较数据、操作类型OpType、源操作数Rsrc(包括操作数类型,操作数寄存器索引)、目的操作数Rdst(包括操作数类型,操作数寄存器索引)、条件位cond等指令参数。根据指令分类,每种指令分别由一组参数确定;
S2:根据S1的参数,生成指令验证代码的框架;
S3:根据处理器指令集的定义,将指令验证代码的框架翻译成二进制码;
S4:通过处理器接口将验证代码加载到微处理器的指令存储器中;
S5:发出启动指令验证协议字,控制微处理器跳转到指令验证代码的执行;
S6:查询微处理器指令验证结束协议字,并读回执行结果;
S7:正确性检查。结果正确,结果以日志记录,转S1,继续下一条指令的验证;否则,错误信息记录到日志文件,转S1。
以“算术逻辑指令”为实例,说明指令验证代码的框架的操作方法:
“算术逻辑指令”验证需要的参数有:
(OpType,Rsrc,Rdst,Op1,Op2,Nif)
其中,OpType:算术逻辑指令操作类型。取值范围为指令集定义的10种算术逻辑操作;
Rsrc:源操作数1寄存器索引值。取值范围为微处理器设计中8个通用寄存器;
Rdst:源操作数2和目的寄存器索引值。取值范围为微处理器设计中8个通用寄存器;
Op1:源操作数1数据。取值范围根据微处理器的设计为32位无符号或有符号数据,在数据表示范围内随机取值;
Op2:源操作数2数据。取值范围根据微处理器的设计为32位无符号或有符号数据,在数据表示范围内随机取值;
Nif:定浮点操作类型参数。
根据以上参数设计的指令验证代码的框架见表1。
表1
验证时,首先由主处理器通过处理器接口403加载协议字监控程序到微处理器的监控程序段501,并启动微处理器的运行。此时,监控程序检查主处理器模拟端是否将指令验证代码加载到指令存储区的指令验证代码段502中。如果监控程序接收到启动协议字503(位于数据存储器内),监控程序跳转到指令验证框架代码段502执行。执行完成后,写结束协议字到协议约定的数据存储区内504,并跳转到监控程序中,继续等待启动下一条指令的验证,如图5所示。
指令验证代码完成对处理器指令集各项功能的验证,根据验证项的不同,指令验证代码可以完成:简单指令逐条验证、指令相关等功能项的验证工作。
本实例实现自动化的验证方式,每一类指令通过一组参数惟一确定,在验证协议中,根据这组参数生成指令验证的代码框架。参数的范围由微处理器的硬件结构决定。上述的四类指令可以通过四组参数来确定,在验证流程中分成四个验证分支来实现。
对于当前验证的指令,需要将所有的源操作数在指令执行前,存放到指令指定的寄存器中。在本发明的验证方法中,通过增加辅助指令序列,用来设置当前指令验证的环境,主要是设置当前微处理器的寄存器组的状态。同时,指令验证采用在线自动化的验证方式,为避免指令执行结束后,指令的执行结果被“污染”,在指令验证代码框架中增加了将指令执行结果及时保护的指令序列。
为实现对指令所有执行路径的完全覆盖,可以将所有的参数采用遍历的方法,以提高对设计的覆盖率。考虑到设计过程中验证效率,可以在验证过程中,随机选取一组或几组参数值进行功能的正确性检验。
Claims (2)
1.一种微处理器指令集验证方法,其特征在于包括下述步骤:
步骤1、将监控程序加载到微处理器中,并启动微处理器运行监控程序;
步骤2、对微处理器支持的指令集分类,每一类指令由一组参数确定,针对每一类指令,设计一个指令验证的代码框架,将需要验证的指令或指令序列嵌入到这个代码框架中;
步骤3、对每组参数按照取指范围遍历取值,根据每组参数值的组合,生成验证的指令或指令序列,并将这个指令或指令序列嵌入到步骤2的验证代码框架中;
步骤4、将验证代码框架加载到微处理器中,并发送协议字给微处理器上的监控程序,使微处理器转入到验证代码框架的执行;
步骤5、查询微处理器验证结束协议字,如果验证代码执行结束,将执行结果读出;否则,继续查询;
步骤6、将步骤5的执行结果和指令执行的期望结果比较,结果正确,将比较结果记录到日志文件中,转步骤2,继续遍历验证;否则,输出错误信息,并记录到日志文件;
所述的监控程序按以下步骤操作:
步骤1-1、查询验证代码框架加载结束协议字,如果协议字有效,转步骤1-2;否则继续查询;
步骤1-2、跳转至验证代码框架,执行指令验证代码;
步骤1-3、验证代码执行结束,置验证结束协议字,并跳转到步骤1-2,继续下一次验证的查询。
2.根据权利要求1所述的微处理器指令集验证方法,其特征在于:所述的指令验证代码框架按以下步骤设计:
步骤2-1、根据指令的分类,确定验证该类指令所需要的参数,并根据参数,生成指令序列A,通过执行指令序列A准备好当前指令验证的微处理器的状态;
所述的指令序列A的产生方法:
2-1-1、产生指令片段Rsrc←Op1,将数据Op1写入源寄存器中;
2-1-2、产生指令片段Rdst←Op2,将数据Op2写入目的寄存器中;
步骤2-2、根据参数生成当前被验证的指令B,将指令B添加到序列A之后,生成序列A&B;
所述指令B的产生方法:产生指令片段Rdst←Rsrc OpTypeNif Rdst,构成被验证的指令;
步骤2-3、在序列A&B之后添加一段保护指令B执行结果的指令序列C。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210362231.8A CN102902906B (zh) | 2012-09-26 | 2012-09-26 | 微处理器指令集验证方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210362231.8A CN102902906B (zh) | 2012-09-26 | 2012-09-26 | 微处理器指令集验证方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102902906A CN102902906A (zh) | 2013-01-30 |
CN102902906B true CN102902906B (zh) | 2015-06-10 |
Family
ID=47575133
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210362231.8A Active CN102902906B (zh) | 2012-09-26 | 2012-09-26 | 微处理器指令集验证方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102902906B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104182205B (zh) * | 2014-08-18 | 2016-08-31 | 中国航天科技集团公司第九研究院第七七一研究所 | SoC处理器指令验证方法 |
CN104461798B (zh) * | 2014-11-12 | 2017-08-18 | 中国航天科技集团公司第九研究院第七七一研究所 | 一种用于处理器算术逻辑单元指令的随机数验证方法 |
CN104914815A (zh) * | 2015-04-15 | 2015-09-16 | 北汽福田汽车股份有限公司 | 处理器监控方法、装置及系统 |
RU2659742C1 (ru) * | 2017-08-17 | 2018-07-03 | Акционерное общество "Лаборатория Касперского" | Способ эмуляции исполнения файлов, содержащих инструкции, отличные от машинных |
CN108563580B (zh) * | 2017-12-27 | 2024-02-23 | 贵阳忆芯科技有限公司 | 介质接口控制器微码执行路径提取方法 |
CN108595295B (zh) * | 2017-12-27 | 2023-09-12 | 贵阳忆芯科技有限公司 | 微指令序列的测试方法与系统 |
CN109189479B (zh) * | 2018-10-12 | 2023-02-24 | 西安微电子技术研究所 | 一种用于处理器指令集的并行自动化验证方法 |
CN109767210B (zh) * | 2018-12-28 | 2020-08-04 | 深圳市讯联智付网络有限公司 | 防止eSe芯片生命周期被意外终止的系统及方法 |
CN110007962A (zh) * | 2019-03-08 | 2019-07-12 | 浙江大学 | 一种基于代码自动生成的指令集模拟方法 |
CN112887175A (zh) * | 2021-03-10 | 2021-06-01 | 北京电子工程总体研究所 | 一种基于xml的发射控制设备hdlc接口单元测试方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5646949A (en) * | 1996-06-04 | 1997-07-08 | Motorola, Inc. | Method and apparatus for generating instructions for use in testing a microprocessor |
CN101826050A (zh) * | 2010-02-03 | 2010-09-08 | 北京龙芯中科技术服务中心有限公司 | 一种用于制造后处理器芯片验证的随机验证方法及装置 |
CN101673236B (zh) * | 2009-10-13 | 2011-05-11 | 中国人民解放军国防科学技术大学 | 一种全覆盖的微处理器测试用例包自动生成方法 |
CN102455971A (zh) * | 2010-10-28 | 2012-05-16 | 无锡江南计算技术研究所 | 应用级随机指令测试方法、系统及装置 |
-
2012
- 2012-09-26 CN CN201210362231.8A patent/CN102902906B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5646949A (en) * | 1996-06-04 | 1997-07-08 | Motorola, Inc. | Method and apparatus for generating instructions for use in testing a microprocessor |
CN101673236B (zh) * | 2009-10-13 | 2011-05-11 | 中国人民解放军国防科学技术大学 | 一种全覆盖的微处理器测试用例包自动生成方法 |
CN101826050A (zh) * | 2010-02-03 | 2010-09-08 | 北京龙芯中科技术服务中心有限公司 | 一种用于制造后处理器芯片验证的随机验证方法及装置 |
CN102455971A (zh) * | 2010-10-28 | 2012-05-16 | 无锡江南计算技术研究所 | 应用级随机指令测试方法、系统及装置 |
Non-Patent Citations (2)
Title |
---|
一种微处理器芯片的验证测试分析及应用;檀彦卓 等;《计算机工程》;20060531;第219-221页 * |
基于ATE的DSP测试方法;轩涛;《电子测试》;20100228;第63-68页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102902906A (zh) | 2013-01-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102902906B (zh) | 微处理器指令集验证方法 | |
US7865346B2 (en) | Instruction encoding in a hardware simulation accelerator | |
CN109189479B (zh) | 一种用于处理器指令集的并行自动化验证方法 | |
CN104536898B (zh) | C程序并行区域的检测方法 | |
Donaldson et al. | Automatic analysis of scratch-pad memory code for heterogeneous multicore processors | |
US20110145799A1 (en) | Path-sensitive dataflow analysis including path refinement | |
EP2706459B1 (en) | Apparatus and method for validating a compiler for a reconfigurable processor | |
US9134979B2 (en) | Convergence analysis in multithreaded programs | |
CN102073480B (zh) | 基于时分复用实现多核处理器内核模拟的方法 | |
US7085964B2 (en) | Dynamic test program generator for VLIW simulation | |
Brady et al. | Learning conditional abstractions | |
Li et al. | Formal Methods and Software Engineering: 24th International Conference on Formal Engineering Methods, ICFEM 2023, Brisbane, QLD, Australia, November 21–24, 2023, Proceedings | |
CN102520984A (zh) | 目标软件在指定硬件环境中最差时间的计算方法 | |
CN104461798A (zh) | 一种用于处理器算术逻辑单元指令的随机数验证方法 | |
US20230116546A1 (en) | Method for compilation, electronic device and storage medium | |
CN105242905B (zh) | 数据假相关的处理方法和装置 | |
KR101910934B1 (ko) | 루프의 프롤로그 또는 에필로그의 비유효 연산을 처리하는 장치 및 방법 | |
Youn et al. | Fast graph‐based instruction selection for multi‐output instructions | |
Shi | Certification of an instruction set simulator | |
Charvát et al. | Using formal verification of parameterized systems in RAW hazard analysis in microprocessors | |
Bartsch et al. | Efficient SAT/simulation-based model generation for low-level embedded software. | |
Mansouri et al. | Automated correctness condition generation for formal verification of synthesized RTL designs | |
CN116861829B (zh) | 用于定位逻辑系统设计中错误的方法、电子设备 | |
CN104239080B (zh) | 异构系统程序启动方法和装置 | |
Charvát et al. | An Abstraction of Multi-port Memories with Arbitrary Addressable Units |
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 |