基于trace的调试框架

基于trace比对的调试框架

在之前的实验1当中,由于指令条数少,处理器结构简单。仅仅依靠波形调试便可以比较方便的找到bug

但是对于实验2,以及之后的实验3。随着处理器的复杂度不断上升,仅仅依靠波形定位错误将变得十分麻烦(将要面对几百个信号在几十万个周期当中出现的可能的错误)

我们知道,处理器的错误执行,也就是状态机没有按照正常的状态转移图运转,当一条指令被错误的执行之后,处理器一定处于某个错误的状态。也就是说,此时处理器的寄存器内容同正确的 处理器的寄存器内容不同,只需要当发生这种不同时立刻报告,便可以定位到错误所在的指令。

利用参考模型生成golden_trace

于是,我们首先使用一个正确的处理器模型(位于gettrace/目录下),让其先运行程序,生成正确的状态转移图,然后在我们的处理器仿真当中,每执行一条寄存器状态改变的指令,便比较一次 ,用这种方法,便可以快速的定位错误

当生成了正确的.coe文件之后,只需要打开gettrace/下的工程,运行仿真,用于对比的golden_trace.txt便被正确生成

当然,这也以为着我们的处理器要正确的实现采样信号 Trace采样的信号包括,他们在工程代码当中以debug命名开头:

  • 写回(Write Back,WB)指令的PC。

  • 写回指令的写使能。

  • 写回指令的目的寄存器号。

  • 写回指令的写回值。