队伍编号:CICC1449
队伍名称:礼堂盯帧电子研究所
本文描述在进行指令集测试的一种纠错方法
dump文件是指由汇编文件进行反汇编之后,可以供人阅读指令的反汇编文件。其包含了每一条指令的具体操作的信息。指令集测试的所有dump文件都存放在riscv-tools\riscv-tests\isa\generated当中,打开其中一个,如下(以div操作为例):
接下来解析dump文件中包含的信息具体含义,学习过汇编语言的也可以直接跳过该节。
由上图可以看到dump文件将含有指令的信息分为三部分,第一部分是代表着指令所处的地址。第二部分代表着32位指令或16位短指令的具体编码,第三部分代表着指令的具体操作。由此可以解读出,上图test_2所做的工作是,1.将立即数20加载到ra寄存器2.将立即数6加载到sp寄存器3.将ra寄存器值作为被除数,sp寄存器作为除数,进行有符号除法,商写入到t5寄存器4.将立即数3写入t4寄存器5.将立即数2写入gp寄存器6.比较t5和t4寄存器的值是否相同,相同则不跳转,继续执行下一条指令,不相同则跳转到地址8000_030a。
上述指令完成了一个20除以6是否等于3的检验操作,以此完成指令集测试,其中gp寄存器寄存的是当前测试的代号,方便于定位当前处于哪个测试。了解完上述信息后,就可以进行通过仿真信号进行指令集测试纠错了。
如何在linux环境下用搭建好的环境进行指令集测试和跑分程序已在上篇文章中讲述:
https://www.rvmcu.com/community-topic-id-1350.html
以div指令集测试为例,仿真结束后,打开波形图,将tb文件中的x3信号加入到信号列表中,x3信号就是第二点中说到的gp寄存器赋值的。正常情况下,x3寄存器会逐渐累加1,最后跳转到pass段。若仿真失败,则会从失败的测试直接跳到fail指令。因此fail指令的上一条指令一般就是出问题的指令,将相关信号都加入到信号列表中,则可以找到问题所在。如下图:
20/3商为3余数为2,结果通过,则继续下一个测试,x3信号则+1表示进行下一个测试,找到x3寄存器突变到fail的地方,一般都能找出问题所在。以上就是指令集测试纠错的一种方法。