Difftest的实现

封装Spike模拟器

使用python的pexpect库封装spike,spike输出日志转为各个寄存器的值,并存入csv表格,这样就获得了difftest的标准模版。

以下是加法器测试的部分寄存器日志。

image-llcv.png

与Verilator联合

一开始想实时运行spike和Verilator,这样后期遇到大工程能减少等待时间。但是我的工程实在太小了,最多运行时间不超过3分钟,封装的时间比我测试时间还久。索性直接用csv存储spike数据,Verilator测试平台(以下简称测试平台)运行difftest时直接读取csv并与测试CPU寄存器对比。

当然由于实际设计考虑到5级流水线,乘法、除法、Cache模块的暂停处理,跳跃之后的冲刷流水线,指令长度不一直为1。但是spike的指令长度一直为1。 所以测试平台需要对实际寄存器的值进行处理,判断他处于指令执行中还是指令执行完毕。

以下是部分寄存器对比处理函数:

image-ewnr.png

结尾

Difftest确实是一本万利的好东西,一键测试的感觉不要太爽😄 就是完成之前,你需要思考究竟是测试平台写错了还是CPU写错了😕