CN107688468A - 推测执行处理器中分支指令与分支预测功能的验证方法 - Google Patents
推测执行处理器中分支指令与分支预测功能的验证方法 Download PDFInfo
- Publication number
- CN107688468A CN107688468A CN201611206840.9A CN201611206840A CN107688468A CN 107688468 A CN107688468 A CN 107688468A CN 201611206840 A CN201611206840 A CN 201611206840A CN 107688468 A CN107688468 A CN 107688468A
- Authority
- CN
- China
- Prior art keywords
- instruction
- processor
- fetching
- branch
- measured
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 76
- 238000012795 verification Methods 0.000 title claims abstract description 38
- 238000012544 monitoring process Methods 0.000 claims abstract description 17
- 239000003795 chemical substances by application Substances 0.000 claims description 40
- 230000008569 process Effects 0.000 claims description 33
- 238000012856 packing Methods 0.000 claims description 6
- 238000001514 detection method Methods 0.000 claims description 5
- 238000012790 confirmation Methods 0.000 claims description 3
- 238000012360 testing method Methods 0.000 abstract description 19
- 230000006870 function Effects 0.000 description 33
- 238000012545 processing Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000005284 excitation Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000000151 deposition Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000000977 initiatory effect Effects 0.000 description 3
- 238000004088 simulation Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 238000003860 storage Methods 0.000 description 2
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3848—Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
Abstract
本发明提出一种推测执行处理器中分支指令与分支预测功能的验证方法,包括:S1:初始化驱动及监控信息;S2:处理器是否发起取指申请,若是,执行S3,否则,执行S2;S3:清空取指流水线信号是否有效,若是,终止本次操作,返回S2,否则,执行S4;S4:停顿取指流水线信号是否有效,如果是,执行S4,否则,执行S5;S5:模拟处理器的取指缓存逻辑,将获取的随机指令驱动到处理器的取指逻辑接口上,以消除指令与程序计数器之间的耦合关系,将对应的取指信号设置为有效状态;S6:在取指信号有效时,将指令信息打包并发送。本发明对推测执行处理器的分支指令及分支预测功能进行充分验证,大大提升随机指令的利用率与测试效率。
Description
技术领域
本发明涉及处理器分支预测技术领域,特别涉及一种推测执行处理器中分支指令与分支预测功能的验证方法。
背景技术
分支预测可以左右处理器的性能,一个准确度高的分支预测器是提高处理器性能的关键部件。因此,对于推测执行处理器,分支指令以及分支预测功能的验证也越来越重要。
在现有技术下,分支指令以及分支预测功能的验证工作主要是在处理器级的验证环境中进行的。处理器验证环境中主要包含待测处理器、参考模型和计分板。在处理器验证环境中,指令与数据存储在同一个存储器中,处理器根据程序计数器去存储器中取到对应的指令,然后供处理器执行。
推测执行处理器指令的执行过程可分为取指(fetch)、译码(decode)、发射(issue)、执行(excute)、写回(write_back)和提交(commit)六个步骤。首先,处理器根据程序计数器通过缓存单元从存储器中获取将要执行的指令,将该指令被传递到译码阶段。当处理器在译码阶段翻译到该指令为分支类指令时,首先会根据分支预测算法来预测分支是否发生,然后根据预测结果的地址,通过缓存单元去存储器中预取指令。该分支指令之后顺次进入发射、执行与写回阶段,并在写回阶段校验该分支指令在译码阶段的预测结果是否正确。如果分支预测正确,则继续执行;如果分支预测错误,则需要将错误预取到的指令清空,并去正确的地址重新取指。因此,推测执行处理器在取指阶段总是根据自身猜测的结果去取指令,在指令的写回阶段对指令进行检查与纠正,以保证处理器最终按正确的程序流执行指令。而在处理器验证环境中,由于参考模型是抽象建模,其并不具备分支预测的功能。所以参考模型会根据程序流中的指令逐条执行,不会有分支预测相关的操作,从而也避免了分支预测对程序流的影响。
处理器验证环境执行的测试程序可分为定向测试程序与随机测试程序。定向测试程序是由验证工程师使用较高级编程语言编写,然后经过编译器和汇编器的编译与链接,形成处理器可执行的二进制代码;随机测试程序则是由随机指令生成器直接生成的可执行的二进制代码。
在验证过程中,无论是定向测试程序还是随机测试程序,当存储器中的指令与数据确定后,程序流也即确定下来。处理器验证环境中的待测处理器与参考模型同时执行相同的程序,在每笔指令完成提交阶段后,根据提交指令的指令地址以及提交后处理器的状态,可判断指令以及指令流是否被正确处理,从而验证分支指令和分支预测功能是否正确。
现有的分支以及分支预测功能相关的验证激励主要来自于定向测试程序与随机测试程序两种方式。由于定向测试程序难以达到验证工作的快速收敛,且容易受验证工程师固有的思维方式影响,比较容易发生功能点漏测的现象。所以,随机测试成了分支以及分支预测功能验证的主要手段。
现有的技术首先通过随机指令生成器生成一段随机测试程序,之后将随机测试程序放入存储器的连续地址空间中。即随机测试程序从程序起始地址开始,每个地址填充一条指令,地址要与指令一一对应。处理器通过缓存单元去存储器中取指、执行,验证平台框架如图1所示,其中,随机程序同时被顺序初始化到虚拟存储器(virtual_mem)的参考存储器(ref_mem)和待测设计存储器(dut_mem),然后参考模型(ref_core)与待测处理器(core)分别去对应的存储器(mem)中取随机指令。这种方法存在以下问题。第一,随机测试程序并不是顺序执行的,当随机程序中存在较多的分支指令,随机测试程序会在存储器中跳跃执行,导致大量随机指令没有被执行到,随机指令的利用率较低。第二,随机指令按连续地址保存在存储器中,由于存在分支指令,当分支指令向前跳转时,测试程序会形成死循环,导致随机测试不充分。
另一种随机测试程序生成技术是,首先单独启动参考模型,参考模型去存储器中取指,如果在存储器中该地址不存在指令,则由随机指令发生器产生一条随机的二进制指令,并填充到程序计数器对应的存储器地址中,供待测处理器之后使用;如果存储器中该地址已经存在指令,则参考模型可直接去获取该指令。即随机指令生成器只根据程序流,填充部分地址空间,剩余未填充指令的地址空间全部做填0处理。参考模型每执行完一条指令,将运行结果保存起来。之后启动待测处理器,处理器读取存储器中预存的指令,执行随机测试程序,然后将指令执行结果与之前参考模型的执行结果进行比对。验证平台框架如图2所示,其中,程序由随机指令生成器指令代理(insn_agent)生成,当虚拟存储器(virtual_mem)中没有指令地址(PC)对应的指令时,需要从指令代理(insn_agent)随机出一条指令,同时放入参考存储器(ref_mem)和待测设计存储器(dut_mem)中。通过这种技术,可以解决随机指令利用率低的问题;但由于分支指令向前跳转依旧会产生死循环,导致了随机分支指令仍有测试不充分的问题存在。同时,这种方法还引入了其他新的问题:第一、由于参考模型与待测处理器不是同步执行,参考模型无法获取外部中断等实时事件,导致参考模型与待测处理器两者的指令流将会发生不匹配的情况,会引起仿真失败。第二、由于在现有技术中,指令与数据处在同一个存储器中,如果在随机过程中,可能会发生存储器访问指令修改其他已经生成的随机指令,引起随机指令丢失的情况。因此参考模型与待测处理器的执行结果就会不同,从而无法正常对待测处理器进行验证。
综上所述,上述两种方案都存在一定的问题,无法同时解决随机指令利用率低下与随机测试不充分的问题。
发明内容
本发明旨在至少解决上述技术问题之一。
为此,本发明的目的在于提出一种推测执行处理器中分支指令与分支预测功能的验证方法,该方法能够对推测执行处理器的分支指令及分支预测功能进行充分验证,大大提升了随机指令的利用率与测试效率。
为了实现上述目的,本发明的实施例提出了一种推测执行处理器中分支指令与分支预测功能的验证方法,包括:待测处理器取指逻辑代理过程,包括以下步骤:S1:初始化取指逻辑代理下的驱动及监控信息;S2:判断所述待测处理器是否发起取指申请,如果是,则执行步骤S3,否则,继续执行所述S2,直至所述待测处理器发起取指申请;S3:判断所述待测处理器清空取指流水线信号是否有效,如果有效,则终止本次操作,并返回执行所述S2,以等待下一次取指申请,否则,执行步骤S4;S4:判断所述待测处理器停顿取指流水线信号是否有效,如果有效,则继续执行所述S4,直至所述停顿取指流水线信号无效,否则,执行步骤S5;S5:从所述取指逻辑代理中获取随机指令,模拟所述待测处理器的取指缓存逻辑,并将获取到的所述随机指令直接驱动到所述待测处理器的取指逻辑接口上,以消除指令与程序计数器之间的耦合关系,并将取指逻辑接口对应的取指信号设置为有效状态;S6:所述取指逻辑代理下的监控模块监控所述取指逻辑接口对应的取指信号,并在所述取指信号有效时,将对应的指令信息打包,并发送出所述取指逻辑代理。
另外,根据本发明上述实施例的推测执行处理器中分支指令与分支预测功能的验证方法还可以具有如下附加的技术特征:
在一些示例中,还包括:添加用于缓存指令的UVM(Universal VerificationMethodology,通用验证方法学)功能部件的过程,包括以下步骤:S10:初始化指令缓存队列;S20:检测接收待测处理器取指逻辑代理下的监控模块是否发出打包的指令信息,如果是,则执行步骤S30,否则执行步骤S40;S30:将所述指令信息存放入先进先出队列fifo中;S40:检测待测处理器是否提交指令,如果是,则执行步骤S50,否则执行步骤S60;S50:根据所述待测处理器一次提交的指令数,从所述先进先出队列fifo中取出与所述指令数相同数量的指令发送给参考模型;S60:判断是否存在清空取指流水线的操作,如果存在,则执行步骤S70;否则,返回执行步骤S20;S70:判断本次清空取指流水线的操作是否为分支预测错误导致的,如果是,则执行步骤S80,否则执行步骤S90;S80:将所述先进先出队列fifo部分清空,并返回执行所述S20,以等待接收后续指令;S90:将所述先进先出队列fifo全部清空,并返回执行所述S20,以等待接收后续指令。
在一些示例中,在所述S70中,在分支指令的写回阶段完成分支预测结果的确认,其中,由分支预测纠正取指地址而引发清空取指流水线操作与由异常导致清空取指流水线操作不同。
在一些示例中,所述由异常导致清空取指流水线操作是将待测处理器中流水线中的全部指令清空;所述由分支预测纠正取指地址而引发清空取指流水线操作是将错误预取到流水线中的指令清空,并不是清空整条流水线操作。
在一些示例中,当清空部分流水线时,根据内部分支指令维护逻辑,以将错误预取到的指令删除。
在一些示例中,所述将所述先进先出队列fifo部分清空,进一步包括:将所述先进先出队列fifo中预测错误的分支指令后面除第一条指令之外的指令进行清空。
在一些示例中,所述待测处理器取指逻辑代理过程与所述添加用于缓存指令的UVM功能部件的过程是并行执行的。
在一些示例中,通过所述参考模型模拟所述待测处理器的执行结果,并将控制状态寄存器的期望值打包发送给计分板。
在一些示例中,当所述监测模块检测到有指令提交时,将提交指令的指令地址与处理器内部控制状态寄存器的值打包,发送给计分板。
在一些示例中,还包括:通过所述计分板对比所述参考模型与待测处理器的执行结果,并判断指令的执行结果是否正确。
根据本发明实施例的推测执行处理器中分支指令与分支预测功能的验证方法,具有如下的优点:
1、随机的指令都能够在仿真过程中,通过取指逻辑代理(agent)驱动到待测处理器中,从而大大提升了随机指令的利用率;
2、指令不再从存储器中获取,解决了随机的存储器访问操作修改随机指令的问题,从而提升了测试效率;
3、程序计数器与指令不存在一一对应的耦合关系,所以分支指令可以任意跳转,从而能够对推测执行处理器的分支指令及分支预测功能进行充分验证;
4、参考模型与待测处理器同时执行,参考模型能够在执行过程中获取待测处理器的中断等实时事件,解决了环境不能验证中断等功能的问题,从而避免生成的随机程序形成死循环;
5、随机的指令直接来自于取指逻辑代理(agent),避免了由于取指缓存不命中(cache miss)导致的流水线停顿操作,从而能够对处理器的冲突检测以及转发相关逻辑进行充分验证。
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1是现有技术中一种分支以及分支预测功能验证平台的结构示意图;
图2是现有技术中另一种分支以及分支预测功能验证平台的结构示意图;
图3是根据本发明一个实施例的推测执行处理器中分支指令与分支预测功能的验证方法的流程图;
图4是根据本发明另一个实施例的推测执行处理器中分支指令与分支预测功能的验证方法的流程图;以及
图5是本发明一个具体实施例的推测执行处理器中分支指令与分支预测功能的验证方法的实现架构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
以下结合附图描述根据本发明实施例的推测执行处理器中分支指令与分支预测功能的验证方法。
图3是根据本发明一个实施例的推测执行处理器中分支指令与分支预测功能的验证方法的流程图。如图3所示,该方法包括:待测处理器取指逻辑代理(agent)过程,具体包括以下步骤:
步骤S1:初始化取指逻辑(agent)下的驱动及监控信息。
步骤S2:判断待测处理器是否发起取指申请,如果是(发起),则执行步骤S3,否则(未发起),继续执行步骤S2,直至待测处理器发起取指申请。
步骤S3:判断待测处理器清空取指流水线信号是否有效,如果有效,则终止本次操作,并返回执行步骤S2,以等待下一次发起取指申请,否则(即待测处理器清空取指流水线信号无效),执行步骤S4。
步骤S4:判断待测处理器停顿取指流水线信号是否有效,如果有效,则继续执行步骤S4,直至停顿取指流水线信号无效,否则(即待测处理器停顿取指流水线信号无效),执行步骤S5。
步骤S5:通过随机激励生成器(sequencer)从取指逻辑代理(agent)中获取随机指令,模拟待测处理器的取指缓存逻辑,并将获取到的随机指令直接驱动到待测处理器的取指逻辑接口上,以消除指令与程序计数器之间的耦合关系,并将取指逻辑接口对应的取指信号设置为有效状态。也就是说,将处理器的取指缓存逻辑去除,并将随机指令直接传输到取指操作后的流水线内,从而打破指令与程序计数器(PC)之间耦合关系,使随机指令在执行时,摆脱分支指令对执行结果的影响。
步骤S6:取指逻辑代理(agent)的监控模块(monitor)监控取指逻辑接口对应的取指信号,并在取指信号有效时,将对应的指令信息打包,并发送至取指逻辑代理(agent)。
进一步地,在本发明的一个实施例中,如图4所示,该方法还包括:添加用于缓存指令的UVM功能部件的过程,结合图4所示,具体包括以下步骤:
步骤S10:初始化用于指令缓存的队列,即初始化指令缓存队列。
步骤S20:检测接收待测处理器取指逻辑代理(agent)下的监控模块(monitor)是否发出打包的指令信息,如果是,则执行步骤S30,否则执行步骤S40。
步骤S30:将指令信息存放入先进先出队列fifo(即指令缓存队列)中。
步骤S40:检测待测处理器是否提交指令,如果是(提交),则执行步骤S50,否则执行步骤S60。
步骤S50:根据待测处理器一次提交的指令数,从指令先进先出队列fifo中取出与指令数相同数量的指令发送给参考模型。
步骤S60:判断是否存在清空取指流水线的操作,如果存在,则执行步骤S70,否则,返回执行步骤S20。
步骤S70:判断本次清空取指流水线的操作是否为分支预测错误导致的,如果是,则执行步骤S80,否则执行步骤S90。
步骤S80:将指令先进先出队列fifo部分清空,并返回执行S20,以等待接收后续指令。
步骤S90:将指令先进先出队列fifo全部清空,并返回执行S20,以等待接收后续指令。
其中,在步骤S70中,由于处理器为了提高分支预测的效率,在分支指令的写回阶段完成分支预测结果的确认。因此,由分支预测纠正取指地址而引发清空取指流水线操作与由异常导致清空取指流水线操作不同。更为具体地,由异常导致清空取指流水线操作是将待测处理器中流水线中的全部指令清空;而由分支预测纠正取指地址而引发清空取指流水线操作是将错误预取到流水线中的指令清空,并不是清空整条流水线操作。因此,用于缓存指令的UVM功能部件需要维护这一功能,当清空部分流水线时,UVM功能部件根据内部分支指令维护逻辑,以将错误预取到的指令删除。基于此,在本发明的一个实施例中,在步骤S80中,将先进先出队列fifo部分清空,进一步包括:将先进先出队列fifo中预测错误的分支指令后面除第一条指令之外的指令进行清空。
具体地说,本发明实施例的推测执行处理器中分支指令与分支预测功能的验证方法,指令不再与程序计数器有耦合关系,指令与程序计数器的一一对应关系也被消除了。在检查分支类指令执行结果时,主要保证待测处理器的指令地址值是否与参考模型的预期指令地址值相同;而在检查顺序类指令执行结果时,主要保证待测处理器控制状态寄存器的值与参考模型的预期值相同。
基于此,在本发明的一个实施例中,该方法还包括:通过参考模型模拟待测处理器的执行结果,并将控制状态寄存器的期望值打包发送给计分板。进一步地,当监测模块检测到有指令提交时,将提交指令的指令地址与处理器内部控制状态寄存器的值打包,发送给计分板。基于此,通过计分板对比参考模型与待测处理器的执行结果,并判断指令的执行结果是否正确。
具体地说,本发明上述实施例描述的待测处理器取指逻辑代理过程与添加用于缓存指令的UVM功能部件的过程是并行执行的,一个是在处理器验证环境中负责发送随机指令,另外一个则是维护待测处理器流水线中的未提交的随机指令信息,保证待测处理器与参考模型执行相同的程序流。
综上,根据本发明实施例的推测执行处理器中分支指令与分支预测功能的验证方法,具有如下的优点:
1、随机的指令都能够在仿真过程中,通过取指逻辑代理(agent)驱动到待测处理器中,从而大大提升了随机指令的利用率;
2、指令不再从存储器中获取,解决了随机的存储器访问操作修改随机指令的问题,从而提升了测试效率;
3、程序计数器与指令不存在一一对应的耦合关系,所以分支指令可以任意跳转,从而能够对推测执行处理器的分支指令及分支预测功能进行充分验证;
4、参考模型与待测处理器同时执行,参考模型能够在执行过程中获取待测处理器的中断等实时事件,解决了环境不能验证中断等功能的问题,从而避免生成的随机程序形成死循环;
5、随机的指令直接来自于取指逻辑代理(agent),避免了由于取指缓存不命中(cache miss)导致的流水线停顿操作,从而能够对处理器的冲突检测以及转发相关逻辑进行充分验证。
为了便于更好地理解本发明,以下结合附图,以具体的实施例对本发明实施例的推测执行处理器中分支指令与分支预测功能的验证方法进行进一步详细描述。
图5是本发明一个实施例的推测执行处理器中分支指令与分支预测功能的验证方法的实现架构示意图。具体地说,在图5中,将待测处理器取值逻辑去除,由取指代理(fetch_agent)代理取指逻辑,激励驱动器(driver)根据取指接口协议的请求信号发送指令,UVM功能部件取指队列监控器(fetch_queue_monitor)用于维护处于流水线中但未被提交的指令信息。
如图5所示,本发明实施例的推测执行处理器中分支指令与分支预测功能的验证方法,对处理器的指令与数据进行了分离,将待测处理器中的取指RTL逻辑去除,使用UVM的代理(agent)来为处理器提供指令,数据则仍存放在存储器中,因此能够防止随机仿存指令修改已生成的随机指令。
同时,本采用参考模型与待测处理器并行执行方案,参考模型在执行过程中能够获取处理器中断等实时事件,解决了无法对中断操作进行验证的问题。
另外,该方法采用的是一种将随机指令与地址分离的方式,打破了指令与地址之间的静态对应关系。不同于前面所述的两种随机指令生成器:在产生随机指令的同时,必须固定指令的地址,使指令与地址一一对应。因此导致向前跳转的分支指令无法从循环中退出,从而使随机程序产生死循环。在本发明的实施例中,处理器执行随机测试程序时,应只关注程序流是否执行正确,随机指令与地址之间应保持动态对应关系。即处理器先后两次访问同一地址时,可以提供给其不同的随机指令。本发明的实施例采用UVM代理(agent)给处理器提供指令,由于随机程序不保存在存储器中,随机程序不用保证程序逻辑上的合理性,为随机指令与地址之间保持动态对应关系提供了技术上的支撑。因此,在随机指令与地址分离后,向前跳转的分支指令将无法导致随机测试程序死循环(循环只可能执行一遍,在同一地址该分支指令不会出现第二次),解决了随机测试不充分的问题。
随机指令与地址分离后,由于验证推测执行处理器,仅仅通过对比处理器与参考模型的指令流是否一致,已经不足以保证处理器行为是正确的,因此带来程序校验困难的问题。因程序是由指令流与地址信息两者共同组成的,所以本发明通过每条指令自身暗含的地址信息,在指令执行结束后反推出该指令的实际地址,并在验证平台中增加对地址的比对功能。即保证处理器提交的指令与地址是正确的,就能确保处理器的程序流是正确的。当处理器推测执行发生错误,虽然其提交的指令流正确,但是指令地址(PC)会发生错误,与参考模型不同。
在指令正常执行过程中,待测处理器会触发清除流水线中全部或部分指令的操作,不能保证进入流水线中的指令全部被执行。为了解决这一问题,本发明的实施例在验证平台中添加了一个UVM功能部件,用于缓存已经进入流水线中而未被执行的指令。该功能部件首先将UVM代理(agent)发送给待测处理器的指令信息放入内部缓存队列中,当待测处理器提交一笔指令后,根据提交的指令数目,从缓存队列中取出相同数目的指令,供参考模型执行。当参考模型执行完后,对比两者的处理器控制状态寄存器以及提交指令对应的指令地址(PC)。
具体地说,在本实施例中,如图5所示,验证平台中的取指代理(fetch_agent)用于模拟取指逻辑,对应本发明实施例中的待测处理器取指逻辑代理(agent)过程;取指队列监控器(fetch_queue_monitor)则是一个UVM的组件,主要用于缓存处于流水线中未执行的指令,对应本发明实施例中的添加用于缓存指令的UVM功能部件的过程;参考核(ref_core)为参考模型,用于模拟处理器的执行结果,并将控制状态寄存器的期望值打包发送给计分板(scoreboard);状态代理(status_agent)则在处理器每提交一次指令时,将处理器的控制状态寄存器信息采样,并发送给计分板(scoreboard)进行对比;scoreboard为计分板,用于对比参考模型与待测处理器的执行结果,并判断指令的执行结果是否正确。而参考数据存储器(ref_data_mem)与待测设计数据存储器(dut_data_mem)则分别模拟参考模型与待测处理器的虚拟存储器,当处理器发生存储器数据访问时,则需要去虚拟存储器中读写数据。
将待测处理器的取指逻辑去掉,采用验证平台中的取指代理(fetch_agent)模拟取指逻辑,指令通过随机序列(sequence)随机后,经过取指代理(fetch_agent)下的随机序列生产器(sequencer),将指令信息传递给取指代理(fetch_agent)下的驱动器(driver),最后驱动器(driver)模拟接口协议,将指令通过接口fetch_if驱动到待测处理器的端口上,完成指令的驱动。同时取指代理(fetch_agent)下的监控器(monitor)监控接口fetch_if的信号,将发送的指令打包传递给取指队列监控器(fetch_queue_monitor)组件,取指队列监控器(fetch_queue_monitor)将发送过来的指令进行缓存,并等待待测处理器指令的提交信号。当待测处理器发生指令提交时,获取待测处理器提交的指令数,从队列取出相同数目的指令,然后发送给参考模型,供参考模型执行。
当仿真开始时,根据待测处理器取指逻辑代理(agent)过程与添加用于缓存指令的UVM功能部件的过程的描述,首先对取指代理(fetch_agent)下的驱动监控信息以及取指队列监控器(fetch_queue_monitor)中的队列进行初始化操作;然后根据待测处理器取指逻辑代理(agent)过程中的具体步骤,先检查取指接口,等待发起取指申请;当检测到有取指申请发起时,判断是否有清空流水线的操作,如果有清空取指流水线的操作,则将该笔操作取消,跳转至待测处理器取指逻辑代理(agent)过程中的步骤S2,继续监控是否发起取指申请;如果没有发生清空取指流水线的操作,判断是否有操作阻塞取指流水线,如果有阻塞流水线的操作,则等待阻塞操作消失;如果没有发生阻塞取指流水线的操作,则通过取指代理(fetch_agent)下的驱动器(driver),向随机序列生产器(sequencer)申请随机激励,并通过接口fetch_if驱动给待测处理器;最后取指代理(fetch_agent)下的监控器(monitor)通过接口fetch_if,按照取指接口协议,将待测处理器接收到的指令信息进行采样,并打包发送给取指代理(fetch_agent)外部的取指缓存队列。
当平台中添加用于缓存指令的UVM功能部件的过程中的UVM组件取指队列监控器(fetch_queue_monitor)接收到监测模块(monitor)发送的指令信息后,将该笔指令信息放入UVM组件中的指令队列fifo中。与此同时,还需要监控待测处理器是否发生指令提交;如果发生指令提交,由于处理器可能为多发射,因此需要根据待测处理器提交的指令数,将相等数量的指令发送给参考模型,供其执行。同时需要监控是否发生清空取指流水线的操作,并进一步判断引起清空取指流水线的原因。如果是由分支预测错误纠正PC导致的清空取指流水线,则需要将指令缓存队列fifo中预测错误的分支指令后面除第一条指令之外的指令进行清空;如果是异常导致的清空取指流水线,则需要将指令缓存队列fifo中的指令全部清空。如果没有清空取指流水线或者执行完以上操作时,跳转至添加用于缓存指令的UVM功能部件的过程中的步骤S20,等待接收处理器取指逻辑(fetch_agent)下的监控器(monitor)发出的指令信息。
当参考模型全部执行完来自于取指队列监控器(fetch_queue_monitor)发送过来的一组指令后,将指令的PC以及与待测处理器对应的控制状态寄存器的值打包,发送给计分板(scoreboard)。
与此同时,状态代理(status_agent)下的监控器(monitor)当检测到有指令提交时,将提交指令的PC与处理器内部控制状态寄存器的值打包,发送给计分板(scoreboard)。
计分板(scoreboard)当接收到两者的状态信息时,对比两者的控制状态寄存器的值是否相等。在对指令提交后的状态进行对比时,通过对提交指令对应的PC值的对比,完成分支类指令执行结果是否正确的校验。
由于本发明实施例中的指令是根据待测处理器取指接口的取指请求信号来逐一发送的,不是依靠取指PC的值,解决了随机指令测试不充分的问题。由于参考模型与待测处理器同时执行,参考模型能够获取处理器的外部中断事件等信息,来对中断等功能进行验证,增加了验证环境的可测试范围。
与此同时,当验证环境中使用本发明实施例的方法后,取指操作排除了由于取指缓存不命中导致的流水线停顿,取指操作的响应速度相比于完整处理器的速度要快的多,能够使处理器的流水线趋于满负荷运行,加大了对于内部冲突与转发功能的验证。
综上,本发明实施例的推测执行处理器中分支指令与分支预测功能的验证方法,将待测处理器取指逻辑代理过程与添加用于缓存指令的UVM功能部件的过程的联合作用,在对处理器进行验证时,指令可以更加随机,随机指令的利用率与测试效率将大大提升。尤其是分支类指令可以实现任意方向的跳转,可以对分支类指令实现全面验证。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同限定。
Claims (10)
1.一种推测执行处理器中分支指令与分支预测功能的验证方法,其特征在于,包括:待测处理器取指逻辑代理过程,包括以下步骤:
S1:初始化取指逻辑代理下的驱动及监控信息;
S2:判断所述待测处理器是否发起取指申请,如果是,则执行步骤S3,否则,继续执行所述S2,直至所述待测处理器发起取指申请;
S3:判断所述待测处理器清空取指流水线信号是否有效,如果有效,则终止本次操作,并返回执行所述S2,以等待下一次取指申请,否则,执行步骤S4;
S4:判断所述待测处理器停顿取指流水线信号是否有效,如果有效,则继续执行所述S4,直至所述停顿取指流水线信号无效,否则,执行步骤S5;
S5:从所述取指逻辑代理中获取随机指令,模拟所述待测处理器的取指缓存逻辑,并将获取到的所述随机指令直接驱动到所述待测处理器的取指逻辑接口上,以消除指令与程序计数器之间的耦合关系,并将取指逻辑接口对应的取指信号设置为有效状态;
S6:所述取指逻辑代理下的监控模块监控所述取指逻辑接口对应的取指信号,并在所述取指信号有效时,将对应的指令信息打包,并发送出所述取指逻辑代理。
2.根据权利要求1所述的推测执行处理器中分支指令与分支预测功能的验证方法,还包括:添加用于缓存指令的UVM功能部件的过程,包括以下步骤:
S10:初始化指令缓存队列;
S20:检测接收待测处理器取指逻辑代理下的监控模块是否发出打包的指令信息,如果是,则执行步骤S30,否则执行步骤S40;
S30:将所述指令信息存放入先进先出队列fifo中;
S40:检测待测处理器是否提交指令,如果是,则执行步骤S50,否则执行步骤S60;
S50:根据所述待测处理器一次提交的指令数,从所述先进先出队列fifo中取出与所述指令数相同数量的指令发送给参考模型;
S60:判断是否存在清空取指流水线的操作,如果存在,则执行步骤S70,否则,返回执行步骤S20;
S70:判断本次清空取指流水线的操作是否为分支预测错误导致的,如果是,则执行步骤S80,否则执行步骤S90;
S80:将所述先进先出队列fifo部分清空,并返回执行所述S20,以等待接收后续指令;
S90:将所述先进先出队列fifo全部清空,并返回执行所述S20,以等待接收后续指令。
3.根据权利要求2所述的执行待测处理器中分支指令与分支预测功能的验证方法,其特征在于,在所述S70中,在分支指令的写回阶段完成分支预测结果的确认,其中,由分支预测纠正取指地址而引发清空取指流水线操作与由异常导致清空取指流水线操作不同。
4.根据权利要求3所述的推测执行处理器中分支指令与分支预测功能的验证方法,其特征在于,
所述由异常导致清空取指流水线操作是将待测处理器中流水线中的全部指令清空;
所述由分支预测纠正取指地址而引发清空取指流水线操作是将错误预取到流水线中的指令清空,并不是清空整条流水线操作。
5.根据权利要求4所述的推测执行处理器中分支指令与分支预测功能的验证方法,其特征在于,当清空部分流水线时,根据内部分支指令维护逻辑,以将错误预取到的指令删除。
6.根据权利要求4所述的推测执行处理器中分支指令与分支预测功能的验证方法,其特征在于,所述将所述先进先出队列fifo部分清空,进一步包括:
将所述先进先出队列fifo中预测错误的分支指令后面除第一条指令之外的指令进行清空。
7.根据权利要求2所述的推测执行处理器中分支指令与分支预测功能的验证方法,其特征在于,所述待测处理器取指逻辑代理过程与所述添加用于缓存指令的UVM功能部件的过程是并行执行的。
8.根据权利要求4所述的推测执行处理器中分支指令与分支预测功能的验证方法,其特征在于,还包括:
通过所述参考模型模拟所述待测处理器的执行结果,并将控制状态寄存器的期望值打包发送给计分板。
9.根据权利要求8所述的推测执行处理器中分支指令与分支预测功能的验证方法,其特征在于,
当所述监测模块检测到有指令提交时,将提交指令的指令地址与处理器内部控制状态寄存器的值打包,发送给所述计分板。
10.根据权利要求9所述的推测执行处理器中分支指令与分支预测功能的验证方法,其特征在于,还包括:
通过所述计分板对比所述参考模型与待测处理器的执行结果,并判断指令的执行结果是否正确。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611206840.9A CN107688468B (zh) | 2016-12-23 | 2016-12-23 | 推测执行处理器中分支指令与分支预测功能的验证方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611206840.9A CN107688468B (zh) | 2016-12-23 | 2016-12-23 | 推测执行处理器中分支指令与分支预测功能的验证方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107688468A true CN107688468A (zh) | 2018-02-13 |
CN107688468B CN107688468B (zh) | 2020-05-15 |
Family
ID=61152282
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611206840.9A Active CN107688468B (zh) | 2016-12-23 | 2016-12-23 | 推测执行处理器中分支指令与分支预测功能的验证方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107688468B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109101276A (zh) * | 2018-08-14 | 2018-12-28 | 阿里巴巴集团控股有限公司 | 在cpu中执行指令的方法 |
CN109684681A (zh) * | 2018-12-06 | 2019-04-26 | 西南电子技术研究所(中国电子科技集团公司第十研究所) | 应用uvm验证平台的高层次化验证方法 |
CN110059391A (zh) * | 2019-04-10 | 2019-07-26 | 北京中科寒武纪科技有限公司 | 待测器件验证装置及相关产品 |
WO2019200618A1 (zh) * | 2018-04-21 | 2019-10-24 | 华为技术有限公司 | 一种指令执行方法及装置 |
CN111158754A (zh) * | 2019-11-19 | 2020-05-15 | 核芯互联科技(青岛)有限公司 | 一种平衡预测精度及时延的处理器分支预测方法和装置 |
CN111324948A (zh) * | 2020-02-10 | 2020-06-23 | 上海兆芯集成电路有限公司 | 模拟方法及模拟系统 |
CN111459551A (zh) * | 2020-04-14 | 2020-07-28 | 上海兆芯集成电路有限公司 | 具高度领先分支预测器的微处理器 |
CN111782217A (zh) * | 2020-06-23 | 2020-10-16 | 上海赛昉科技有限公司 | 快速高效产生cache一致性测试C程序的系统及方法 |
CN111967209A (zh) * | 2020-08-21 | 2020-11-20 | 广芯微电子(广州)股份有限公司 | 一种soc仿真验证方法、装置及存储介质 |
CN113761540A (zh) * | 2021-09-07 | 2021-12-07 | 中国科学院上海高等研究院 | BranchScope及其编译器防护方法的验证方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6260138B1 (en) * | 1998-07-17 | 2001-07-10 | Sun Microsystems, Inc. | Method and apparatus for branch instruction processing in a processor |
CN101427213A (zh) * | 2006-05-04 | 2009-05-06 | 国际商业机器公司 | 用于实现多态分支预测器的方法和装置 |
CN102360282A (zh) * | 2011-09-26 | 2012-02-22 | 杭州中天微系统有限公司 | 快速处置分支指令预测错误的流水线处理器装置 |
CN103150146A (zh) * | 2013-01-31 | 2013-06-12 | 西安电子科技大学 | 基于可扩展处理器架构的专用指令集处理器及其实现方法 |
-
2016
- 2016-12-23 CN CN201611206840.9A patent/CN107688468B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6260138B1 (en) * | 1998-07-17 | 2001-07-10 | Sun Microsystems, Inc. | Method and apparatus for branch instruction processing in a processor |
CN101427213A (zh) * | 2006-05-04 | 2009-05-06 | 国际商业机器公司 | 用于实现多态分支预测器的方法和装置 |
CN102360282A (zh) * | 2011-09-26 | 2012-02-22 | 杭州中天微系统有限公司 | 快速处置分支指令预测错误的流水线处理器装置 |
CN103150146A (zh) * | 2013-01-31 | 2013-06-12 | 西安电子科技大学 | 基于可扩展处理器架构的专用指令集处理器及其实现方法 |
Non-Patent Citations (2)
Title |
---|
LEA HWANG LEE等: "Instruction Fetch Energy Reduction Using Loop Caches For Embedded Applications with Small Tight Loops", 《POWER DRIVEN MICROARCHITECTURE WORKSHOP》 * |
王忠弈等: "ARM9流水线的分支预测设计", 《第三届微处理器技术论坛论文集》 * |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019200618A1 (zh) * | 2018-04-21 | 2019-10-24 | 华为技术有限公司 | 一种指令执行方法及装置 |
US11579885B2 (en) | 2018-08-14 | 2023-02-14 | Advanced New Technologies Co., Ltd. | Method for replenishing a thread queue with a target instruction of a jump instruction |
CN109101276B (zh) * | 2018-08-14 | 2020-05-05 | 阿里巴巴集团控股有限公司 | 在cpu中执行指令的方法 |
CN109101276A (zh) * | 2018-08-14 | 2018-12-28 | 阿里巴巴集团控股有限公司 | 在cpu中执行指令的方法 |
CN109684681A (zh) * | 2018-12-06 | 2019-04-26 | 西南电子技术研究所(中国电子科技集团公司第十研究所) | 应用uvm验证平台的高层次化验证方法 |
CN110059391A (zh) * | 2019-04-10 | 2019-07-26 | 北京中科寒武纪科技有限公司 | 待测器件验证装置及相关产品 |
CN110059391B (zh) * | 2019-04-10 | 2022-12-09 | 中科寒武纪科技股份有限公司 | 待测器件验证装置及相关产品 |
CN111158754A (zh) * | 2019-11-19 | 2020-05-15 | 核芯互联科技(青岛)有限公司 | 一种平衡预测精度及时延的处理器分支预测方法和装置 |
CN111324948A (zh) * | 2020-02-10 | 2020-06-23 | 上海兆芯集成电路有限公司 | 模拟方法及模拟系统 |
CN111324948B (zh) * | 2020-02-10 | 2023-04-25 | 上海兆芯集成电路有限公司 | 模拟方法及模拟系统 |
CN111459551A (zh) * | 2020-04-14 | 2020-07-28 | 上海兆芯集成电路有限公司 | 具高度领先分支预测器的微处理器 |
CN111782217A (zh) * | 2020-06-23 | 2020-10-16 | 上海赛昉科技有限公司 | 快速高效产生cache一致性测试C程序的系统及方法 |
CN111782217B (zh) * | 2020-06-23 | 2023-05-09 | 上海赛昉科技有限公司 | 快速高效产生cache一致性测试C程序的系统及方法 |
CN111967209A (zh) * | 2020-08-21 | 2020-11-20 | 广芯微电子(广州)股份有限公司 | 一种soc仿真验证方法、装置及存储介质 |
CN113761540A (zh) * | 2021-09-07 | 2021-12-07 | 中国科学院上海高等研究院 | BranchScope及其编译器防护方法的验证方法 |
CN113761540B (zh) * | 2021-09-07 | 2023-07-14 | 中国科学院上海高等研究院 | BranchScope及其编译器防护方法的验证方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107688468B (zh) | 2020-05-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107688468A (zh) | 推测执行处理器中分支指令与分支预测功能的验证方法 | |
EP1421490B1 (en) | Methods and apparatus for improving throughput of cache-based embedded processors by switching tasks in response to a cache miss | |
JP2949857B2 (ja) | パイプライン型データプロセッサにおける命令キューを満たす方法 | |
US8082420B2 (en) | Method and apparatus for executing instructions | |
TWI470547B (zh) | 非循序執行微處理器及其操作方法 | |
US5907702A (en) | Method and apparatus for decreasing thread switch latency in a multithread processor | |
US8291202B2 (en) | Apparatus and methods for speculative interrupt vector prefetching | |
US9098653B2 (en) | Verifying processor-sparing functionality in a simulation environment | |
EP0380858A2 (en) | Method and apparatus for detecting and correcting errors in a pipelined computer system | |
US8533394B2 (en) | Controlling simulation of a microprocessor instruction fetch unit through manipulation of instruction addresses | |
Herdt et al. | Early concolic testing of embedded binaries with virtual prototypes: A RISC-V case study | |
US20080229141A1 (en) | Debugging method | |
US11023342B2 (en) | Cache diagnostic techniques | |
JP2005504390A (ja) | ジャバハードウェアアクセラレータ用の投機的実行 | |
CN106843816A (zh) | 一种分支预测控制方法及装置 | |
CN110096129A (zh) | 计算设备 | |
US20080215917A1 (en) | Synchronizing Cross Checked Processors During Initialization by Miscompare | |
KR100719420B1 (ko) | 정보 처리 장치 | |
CN107783817A (zh) | 处理器的模拟方法、功能模拟器、性能模拟器和模拟系统 | |
CN109634666A (zh) | 一种预取机制下融合btb的方法 | |
CN107688467B (zh) | 处理器随机指令复用的验证方法 | |
Campagna et al. | An hybrid architecture to detect transient faults in microprocessors: an experimental validation | |
EP2778906A1 (en) | Apparatus and method for non-blocking execution on static scheduled processor | |
CN105224412B (zh) | 一种基于sparcv8处理器的存储器精确陷阱控制结构与方法 | |
KR102579320B1 (ko) | 캐시 메모리 장치 및 이를 이용하는 캐시 스케줄링 구현 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20180929 Address after: 100085 west 4 Street 5, five street, Haidian District, Beijing. Applicant after: Beijing Guorui Zhongshu Technology Co.,Ltd. Applicant after: No. 14 Inst., China Electronic Science & Technology Group Corp. Address before: 100085 Beijing Haidian District Haidian District road information Road 5 Street high Li two thousand science and Technology Building 4 floor West Applicant before: Beijing Guorui Zhongshu Technology Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |