之前在学《自己动手写CPU》的时候,用modelsim仿真时总是读不到数据,后来发现是因为没有把.data文件移动到modelsim所在的工程下。以课本2.8.3节为例。
错误的仿真结果如下所示:
从图中可以看出,inst_o信号一直是X状态,这是因为readmemh函数没有读到你的 rom.data文件,所以导致rom没有被初始化。
验证这个想法很简单,只需要在命令栏中输入:pwd和ls命令,看看有没有对应的rom.data文件就行了。
pwd表示查看当前文件路径,也就是你建立的工程文件路径,ls表示列出当前路径中所有的文件,我们可以看到ls列出的文件中并没有rom.data文件,这说明没有对rom进行初始化。解决方法:
1.在你的rom.v文件例化的时候,使用绝对路径
把这句话改为:
这里的F:/33333_FPGA/CPU/Chapter02是我当前的文件夹路径,你把它改为你自己对应的文件夹路径就可以了。2.把rom.data文件复制到你的modelsim工程文件夹。
首先这里有个误区,复制到你的工程文件夹中并不是把它添加到你的Project中:
以下是错误示例:
如图所示,你可能把你的rom.data文件添加到你的Project中了,并没有添加到工程文件中,这样是出不来结果的。Project中只对.v文件进行编译,与你是否添加rom.data文件无关。正确做法:
我们在代码文件夹中建一个名为“sim”的文件夹,表示仿真文件夹,在sim文件夹中再建一个chapter02文件夹,表示对应chapter02章节代码的仿真文件。然后打开modelsim
点击File–>Change directory,选择我们刚刚建立的文件夹
在命令栏输入pwd,可以看到当前的路径已经更换了
然后再把rom.data文件复制到该文件夹下。在命令栏输入ls就可以看到rom.data这个文件了。
接下来的做法就和前面“错误示例”的做法一样了。关键在于你把rom.data这个文件是放在modelsim的工程文件夹中(正确),还是放在你建立的Project中(错误)。
我们再重新仿真一遍,就可以看到所有信号都出来了。