在调用ROM ip的时候,不可避免的要对其进行初始化,如果进行初始化的话,手动一项一项的添加,估计会累的吐血!有了Matlab 就相当方便了。因为QuartusII 支持.mif 文件,可以用来初始化ROM 。说两点
1.mif文件的格式
WIDTH=16; // ROM 的数据线宽度
DEPTH=1024;// 地址单元的个数 即10根数据线
ADDRESS_RADIX=UNS; // 地址索引是无符号型
DATA_RADIX=BIN;// ROM 中数据格式以二进制存放
CONTENT BEGIN // 下面是ROM 中数据内容 以end结束
0 : 0000000000000000;
1 : 0000000000000110;
2 : 0000000000000000;
3 : 0000000000010011;
4 : 0000000000000000;
5 : 0000000000011111;
6 : 0000000000000000;
7 : 0000000000101100;
。。。。。。
。。。。。
1022 : 0000000000000000;
1023 : 1111111111111010;
END;
网上有一堆讲解 编写Matlab 程序 产生MIF 文件的,但是我觉得还是太繁琐。因为大部分语句都是如何产生上面的格式的。根本没有必要这么做。我的做法是:
1.在quartusii 新建一个.mif 文件,然后保存。这个时候 她里面的内容是空的,全为0;
2.在MATLAB 里面 编写产生你所要的数据的函数。如下:
index=linspace(0,2*pi,257);
temp1=sin(index);
temp2=temp1*127;
temp2=temp2+0.5;
temp3=fix(temp2)
dlmwrite('sin.txt',temp3,'delimiter','\t');
上面这条语句 把你产生的正弦采样值 保存到 sin.txt 中去了。在MATLAB 中双击这个文件,然后复制到 QuartusII 中你新建的那个空白MIF 中 然后保存 编译 就完成了。你可以打开MIF 文件查看下 你复制地数据是按照上面格式来的。
3.如果用MODELSIM 仿真ROM,因为MODELSIM 只认十六进制的文件,所以必须把MIF 文件转成HEX文件才行。具体怎么做 ,有个朋友总结的很好。我粘贴在这里:
A.下载convert_hex2ver.dll文件,convert_hex2ver.dll就是把hex文件转换成ModelSim 能认出
来的ver文件的动态链接库文件。新版本的QuartusII中已经不带此文件了。需要在网上找一份。
(老版本的软件里带了此文件(路径:quartusXX/eda/mentor/modelsim/),应当可以用。)
B.将convert_hex2ver.dll文件放在modelsim安装路径的win32目录下;
C. 在ModelSim安装的目录下找到 modelsim.ini文件,将其只读属性去掉,在“; List of dynamically loaded objects for Verilog PLI applications,”后填入一行“Veriuser = convert_hex2ver.dll”。(我改正下,Verisuer前面要加个;保持格式一致。还有等号右边是convert_hex2ver。dll的路径,如果不行,请改成实际目录下的完整路径!)保存文件,将只读属性改回来。
我再补充两点:1. 用MODELSIM 仿真的时候,要把MIF 文件放到你的工程文件夹里面,否则将会load 不到!
2. 如果你的MIF 文件里面有负数,MODELSIM 可能读不对,如果有这样的情况 请再QuartusII 中 打开MIF 文件,在边框上右键,将数据格式改成二进制 然后保存 编译 就OK 了!
|