对于一个CPU工程而言, 保证其正确性是极其重要的. 一般而言, 确保一个CPU工程的正确性的手段有两种:
- 形式化验证
- 随机样例测试
而本节将针对随机样例测试进行讲解. 我们采用如下方法进行测试:
黄金模型MARS与命令行
MARS提供了内置的仿真CPU程序, 我们将以之为标准进行对拍测试.
MARS提供了命令行工具运行MIPS汇编程序, 具体可在 MARS->Help->MARS->Command 中查看. 下面列出一些本系列博文中最常用到的命令行:
汇编转机器码
1
2
3
4
5
java -jar <mars> <assembly-file> [db]
nc mc CompactDataAtZero a dump .text HexText code.txt
java -jar <mars> <assembly-file> [db]
nc mc CompactDataAtZero a dump 0x00004180-0x00005180 HexText code_handler.txt
有关参数说明
参数 | 属性 | 说明 | 示例 |
---|---|---|---|
<mars> |
必选 | MARS的JAR包名称 | Mars.jar |
<assembly-file> |
必选 | 汇编程序文件 | TestPoint1.asm |
[db] |
可选 | 启用延迟槽 | db |
汇编运行
为与CPU工程对拍, 我们需要对MARS进行一些修改:
- 指令写寄存器时, 输出信息
@PC : $Reg <= Data
, 其中PC是该指令的PC的十六进制值, Reg是寄存器编号的十进制值, Data是写入数据的十六进制值. - 指令写内存时, 输出信息
@PC : *Addr <= Data
, 其中PC是该指令的PC的十六进制值, Addr是内存地址的十六进制值(地址字对齐), Data是写入数据的十六进制值(数据宽度为一字宽).
为进行这些修改, 可以参考 项目
修改完毕后, 命令行运行汇编程序即可得到黄金模型的输出
1
java -jar <mars> <assembly-file> [db] nc mc CompactDataAtZero >std_ans.txt
有关参数说明参见上文.
仿真工具ISim与命令行
ISE带有的ISim是仿真CPU工程的软件, 可以通过命令行运行CPU工程并得到输出.
约定: 顶层模块为
mips.v
, 针对顶层模块的测试文件为mips_tb.v
PRJ文件与TCL文件
PRJ文件用于说明工程包含哪些模块, 使用绝对路径说明. 如若 D:\Project
文件夹下有工程:
1
2
3
4
5
6
7
8
9
10
11
|-mips.prj
|-mips.v
|-mips_tb.v
|-datapath
|-datapath.v
|-module
|-module1.v
|-module2.v
|-controller
|-decoder.v
|-main_controller.v
则需要在 mips.prj
中编写:
1
2
3
4
5
6
7
Verilog work "D:\Project\mips.v"
Verilog work "D:\Project\mips_tb.v"
Verilog work "D:\Project\datapath\datapath.v"
Verilog work "D:\Project\datapath\module\module1.v"
Verilog work "D:\Project\datapath\module\module2.v"
Verilog work "D:\Project\controller\decoder.v"
Verilog work "D:\Project\controller\main_controller.v"
TCL文件用于配置工程的运行参数, 如若工程运行200us后停止, 则需要在 mips.tcl
中编写:
1
2
run 200us;
exit
注意: PRJ 文件与TCL文件都要放在工程目录下.
可以编写一个简单的程序生成这两个文件
命令行
ISim命令行需要设置环境变量, 我们采用 Python3 来设置环境变量并进行命令行调用:
1
2
3
4
5
import os
# ...
os.environ['XILINX'] = xilinx_path
os.system(xilinx_path + '\\bin\\nt64\\fuse -nodebug -prj mips.prj -o mips.exe mips_tb>log.txt')
os.system('mips.exe -nolog -tclbatch mips.tcl> test_ans.txt')
其中xilinx_path
即为ISE的安装目录.
文件比对
通过MARS, 我们得到了标准输出; 通过ISim, 我们得到了测试输出. 只须编写一个简单的文件比对程序, 即可完成测试.