rom_8x256.v这个文件中有altsyncram_component.init_file = "rom_8x256.mif"这句话,modelsim编译时会自动地去sim的根目录下找rom_8x256.mif文件,可是该文件只在PLL-ROM-RAM\quartus_prj\ipcore_dir有,故需要将这个mif文件拷贝到sim的根目录下去(否则,modelsim无法用mif文件初始化ROM)。
图30 仿真结果图
由图30可知,odata有了数据产生,并且较地址rom_addr有两个时钟周期的延迟,是由于在ROM的输出端加了寄存器造成的,与当初的设想是一致的。
【用MATLAB产生mif文件】
① 在当前工程目录下新建matlab_sim文件夹,然后将miffile.m文件拷贝到该文件夹中(miffile.m文件的目的是实现miffile(filename,var,width,depth)函数),方便MATLAB程序调用;
② 打开MATLAB,并切换MATLAB的工作目录到matlab_sim文件夹下;
③ 新建一个MATLAB脚本,命名为gen_mif,并保存到matlab_sim文件夹下;
④ 编写MATLAB的程序代码:
⑤ 运行gen_mif.m文件后,发现在matlab_sim文件夹下生成了一个rom_8x256.mif文件,其内容如下(与用quartus生成的mif文件基本一致):
⑥ 将生成的rom_8x256.mif文件拷贝到sim文件夹和ex_6\quartus_prj\ipcore_dir目录下,替换掉原来的rom_8x256.mif文件,然后重新运行仿真,仿真结果如图31和图32所示:
图31 用MATLAB产生mif文件初始化ROM的仿真图1
图32 用MATLAB产生mif文件初始化ROM的仿真图2
由图31和图32可知,ROM的数据范围为0~255,与mif文件中的数据一致。