之前在学《自己动手写CPU》的时候,用modelsim仿真时总是读不到数据,后来发现是因为没有把.data文件移动到modelsim所在的工程下。以课本2.8.3节为例。

错误的仿真结果如下所示:

readmemh readmemh读取data只能读0_文件路径


从图中可以看出,inst_o信号一直是X状态,这是因为readmemh函数没有读到你的 rom.data文件,所以导致rom没有被初始化。

验证这个想法很简单,只需要在命令栏中输入:pwd和ls命令,看看有没有对应的rom.data文件就行了。

readmemh readmemh读取data只能读0_readmemh_02


pwd表示查看当前文件路径,也就是你建立的工程文件路径,ls表示列出当前路径中所有的文件,我们可以看到ls列出的文件中并没有rom.data文件,这说明没有对rom进行初始化。解决方法:

1.在你的rom.v文件例化的时候,使用绝对路径

readmemh readmemh读取data只能读0_文件路径_03


把这句话改为:

readmemh readmemh读取data只能读0_fpga开发_04


这里的F:/33333_FPGA/CPU/Chapter02是我当前的文件夹路径,你把它改为你自己对应的文件夹路径就可以了。2.把rom.data文件复制到你的modelsim工程文件夹。

首先这里有个误区,复制到你的工程文件夹中并不是把它添加到你的Project中:

以下是错误示例:

readmemh readmemh读取data只能读0_工程文件_05

readmemh readmemh读取data只能读0_工程文件_06


如图所示,你可能把你的rom.data文件添加到你的Project中了,并没有添加到工程文件中,这样是出不来结果的。Project中只对.v文件进行编译,与你是否添加rom.data文件无关。正确做法:

readmemh readmemh读取data只能读0_readmemh_07


我们在代码文件夹中建一个名为“sim”的文件夹,表示仿真文件夹,在sim文件夹中再建一个chapter02文件夹,表示对应chapter02章节代码的仿真文件。然后打开modelsim

点击File–>Change directory,选择我们刚刚建立的文件夹

readmemh readmemh读取data只能读0_文件复制_08


在命令栏输入pwd,可以看到当前的路径已经更换了

readmemh readmemh读取data只能读0_文件路径_09


然后再把rom.data文件复制到该文件夹下。在命令栏输入ls就可以看到rom.data这个文件了。

readmemh readmemh读取data只能读0_工程文件_10


接下来的做法就和前面“错误示例”的做法一样了。关键在于你把rom.data这个文件是放在modelsim的工程文件夹中(正确),还是放在你建立的Project中(错误)。

我们再重新仿真一遍,就可以看到所有信号都出来了。

readmemh readmemh读取data只能读0_文件路径_11