P6 上机很糟糕,一边做一边怀疑是不是课下出了 bug,开局 40 多分钟时两道题 WA,心态直接爆炸。好在只是课上太蠢的原因,最后 de 出了 bug,侥幸通过。总之这次上机体验很差,很大一部分原因来源于对课下的不信任。

首先课下的弱测是真的弱爆了,5 个点有 2 个是只测 P5,另外 3 个点的强度也不必多说。笔者上周没有构造太多数据测试转发和阻塞,也没有写评测机(愁生成数据),沿用了 P5 的弱机。周末和周一用肉眼发现了三处 bug,顿时失去了对课下的信心。幸好只有这三处 bug,不然 P6 上机真的是 2h 坐以待毙了。

由此可见,做好 P6 的课下测试是至关重要的。

# 评测机

在写 P6 评测机时,笔者果断放弃了之前所写的数据生成器(由 P4 迭代而来,其实在 P5 时就应该废除),修改了往届学长写的数据生成器(强度可以,但访存类指令有 bug,而且对 mthi,mtlo 的冲突覆盖的不够强,笔者对此进行了修改),然后新增了单元测试模式。

# 使用说明

评测机具备三种模式:

  1. 自动生成 10 组测试数据:逐组数据进行评测,当 WA 时将会中断,并保留本次数据及输出
  2. 手动输入测试数据:自己编写 MIPS 代码进行评测
  3. 对单个指令进行功能测试:输入要测试的指令名称(小写);如果输入了 "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 学长

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

CircleCoder 微信支付

微信支付

CircleCoder 支付宝

支付宝

CircleCoder 贝宝

贝宝