2025-10-22

实现DiffTest的时候对NEMU的ref.c中的几个difftest_函数没什么头绪,于是到网上搜索其他人的经验。其中这一篇我觉得写得很好,虽然没有直接解答问题,但是他的心得我觉得很有启发。例如作者提到在实现NPC的各种trace和sdb功能时,很多人可能是直接从NEMU复制代码到NPC目录(我就是这样),但是这样就会出现copy-paste问题,如果后续在NEMU中发现复制的这部分代码有问题,那么就需要修改两个地方的代码,这中间就可能会产生遗漏或者两边不小心改的不一样。

今天碰到一个问题:按照现在的NPC的仿真环境,每个clk的上升沿都会进行读存储器操作,但是实际上只有LOAD类指令会读存储器,其他指令npc输出的读地址可能是非法的,这就导致本来是正常的npc却没法完成仿真。我暂时的做法是如果请求的地址越界则返回0,当然这样设计是不对的,应该增加一个读请求信号,只有在读请求信号被使能时才进行访问存储器的操作,这样就没问题了,这个bug卡了我一段时间,当然确实也是设计的疏忽导致的。

决定重新整理一下npc仿真代码的结构,现在变的非常乱。