P6 上机很糟糕,一边做一边怀疑是不是课下出了 bug,开局 40 多分钟时两道题 WA,心态直接爆炸。好在只是课上太蠢的原因,最后 de 出了 bug,侥幸通过。总之这次上机体验很差,很大一部分原因来源于对课下的不信任。
首先课下的弱测是真的弱爆了,5 个点有 2 个是只测 P5,另外 3 个点的强度也不必多说。笔者上周没有构造太多数据测试转发和阻塞,也没有写评测机(愁生成数据),沿用了 P5 的弱机。周末和周一用肉眼发现了三处 bug,顿时失去了对课下的信心。幸好只有这三处 bug,不然 P6 上机真的是 2h 坐以待毙了。
由此可见,做好 P6 的课下测试是至关重要的。
# 评测机
在写 P6 评测机时,笔者果断放弃了之前所写的数据生成器(由 P4 迭代而来,其实在 P5 时就应该废除),修改了往届学长写的数据生成器(强度可以,但访存类指令有 bug,而且对 mthi,mtlo 的冲突覆盖的不够强,笔者对此进行了修改),然后新增了单元测试模式。
# 使用说明
评测机具备三种模式:
- 自动生成 10 组测试数据:逐组数据进行评测,当 WA 时将会中断,并保留本次数据及输出
- 手动输入测试数据:自己编写 MIPS 代码进行评测
- 对单个指令进行功能测试:输入要测试的指令名称(小写);如果输入了 "all",将会依次对所有指令进行测试
在运行评测机前,你需要进行如下操作:
配置环境变量。
由于 ISE 的安装包过大,不再将其打包进评测机内,评测时将使用你本机的 ISE
设置环境变量,key 为
XILINX,value 为 ISE 的安装路径,通常以14.7/ISE_DS/ISE/结尾,下图仅为示例![]()
在 D 盘下建立一个新目录,命名为 P6_AutoTest
在 P6_AutoTest 建立一个新目录,命名为 mips,其需要包含你工程目录下的所有模块的.v 文件和顶层模块的测试文件。
其中,顶层模块命名为 mips.v,其测试文件命名为 mips_tb.v
![]()
如果你希望使用模式 2 进行评测,请将编写好的.asm 文件复制到 "D:\P6_AutoTest" 中,并命名为 test.asm
点击运行 P6_AutoTest.exe,选择评测模式后按下 Enter。评测结果将会显示在控制台上,同时在 "D:\P6_AutoTest" 中生成此次测试的数据点、你的输出(ISEOutput.txt)和正确输出(MARSOutput.txt)
<img src="https://cdn.jsdelivr.net/gh/BUAA-Yzx2023/ImageBed/202411201234467.png" style="zoom:67%;" />
如果你想保存本次测试数据,请将这几个文件复制到其他文件夹中。本目录中的数据,在下次评测时将会被新的数据覆盖
# 备注
运行后,test.asm 中将会有 addu 和 subu,而不是 add 和 sub。这是因为生成测试数据时未考虑溢出问题,而为了保证 Mars 的正常运行,将生成的 add 和 sub 全部替换成了 addu 和 subu,但是机器码仍然是替换前根据 add 和 sub 编译的,所以无需对此产生疑虑。
另外,当你选择模式 2 进行评测时,你的 MIPS 代码使用 add 和 sub 即可,运行时会自动替换
# Download
P6_AutoTest.exe
# 参考资料
Ren HangQi 学长

