![](https://csdnimg.cn/release/download_crawler_static/86364438/bg1.jpg)
首先可以如下测试:
1、首先你要通过:
任何指令后序指令为 sw 的指令的转发与暂停都必须是正确的,如果不正确,也不会有太大
后果,只不过在我的 Function 测试的文档里的对应错误原因你要多考虑是否没有设置该指
令后 sw 的转发
2、打开文件:P6FunctionTest.txt
并打开 word:P6Test_Function.docx
将 P6FunctionTest.tx 复制入你的 P6 工程目录下的 code.txt 中
运行 ISE,直接运行到最后,查看 DM 结果,并与 word 中的截图进行比对,如果发现有错,
找到下面对应位置的可能错误原因,当然如果你的转发没有设计好的话有可能是因为 sw 作
为后序指令的转发有问题。
找到相关指令后,自己建立一个新的 txt,进行如下格式的单条指令测试:
lui $t1,0xffff
ori $t2,$0,0xaabb
nop
nop
nop
________________
在下划线处填写你的指令,用到$t1,$t2 即可(注:自由调整测试策略)
(在本次测试中未能涉及所有指令,没有涉及到的有:bgtz,bltz,lbu,lhu,jal)
当你完成全部的 P6FunctionTest.txt 测试并且全部正确后,进行如下测试:
3、打开助教老师的 P5 测试文件:(五个哪个都可以)
进行测试,如果出现错误,请结合你的 P5 调试经验和错误,以及 P5 实验指导书上所写,进
行测试,当你测试完这些之后,基本可以认为你的 jal 后的转发已经完备。
4、打开文件:P6_ForwardAndHazard.txt
并用 MARS 打开文件:P6_Forward.asm
因为时间关系,没来得及为这个指定一个测试结果的文档,但是在 Mars 程序中我写了一些
标签量,命名如下:
fR_I_Rs
诸如此类,比如 fR_I_Rs 的意思是前序指令是 R,后序指令是 I 型指令,读寄存器为 Rs,进
行一级,二级转发或暂停的测试。
(注意:因为三阶转发的普适性,所以本次测试中未加入太多的三阶转发,所以请确保你
的三阶转发(GPR 内部转发)是正确的)
查看 DM 结果,寻找在 Mars 里对应地址的指令是什么
(beq 是否正确是在我们的$k0 寄存器里有反应的,请查看其与 Mars 里的结果对比即可)
因为我采用的是直接存入数字对应地址法,所以可以通过 ctrl+F 来寻找对应地址所对应的指
令:比如 DM 中第 1 行,第 5 列数据错误(默认 0 在上,列宽为 8,地址显示为十进制)
那么我就查找 DM 中 (5-1)*4 =16 查找 16 这个数字,找到对应的小模块。
自行写个小模块,进行单独的转发与暂停测试。
注意:以上覆盖性测试可以代表你的工程正确成立的条件是你的转发类别分类正确,且基
础指令测试全对。
5、由于 Jr 的特殊性,所以我们把它的测试放在一个单独的文件里,打开文件:Jr.txt
在 Mars 里打开文件:jr.asm
对比 DM 结果,如果 DM 结果正确,一般是对的,如果不正确,请自行寻找原因慢慢锁定。
评论0