原创 转用matlab生成mif文件

2011-2-18 21:50 5446 8 9 分类: FPGA/CPLD
用MATLAB生成QUARTUS II的*.mif
 

做设计时经常要调用芯片内存。特别对于ROM,内存的初始化就显得比较重要。当然你完全可以手工在QUARTUS II打开mif文件的表格里或是在EXCEL中逐个输入,几十项(字)或是近百项(字)你还可以接受,如果上千项或是更多呢?估计会累死人!

一般内存的初始化数据都是有规律的,符合一定的函数,我们完全可以用MATLAB来完成(如果没规律只能逐项手工输入了)

首先,我们应该知道*.mif文件的格式,它其实是文本格式文档,用写字板打开一个mif文件,你会发现它具有如下的格式:

-- Copyright (C) 1991-2008 Altera Corporation

-- Your use of Altera Corporation's design tools, logic functions

-- and other software and tools, and its AMPP partner logic

-- functions, and any output files from any of the foregoing

-- (including device programming or simulation files), and any

-- associated documentation or information are expressly subject

-- to the terms and conditions of the Altera Program License

-- Subscription Agreement, Altera MegaCore Function License

-- Agreement, or other applicable License agreement, including,

-- without limitation, that your use is for the sole purpose of

-- programming logic devices manufactured by Altera and sold by

-- Altera or its authorized distributors. Please refer to the

-- applicable agreement for further details.

-- Quartus II generated Memory Initialization File (.mif)

WIDTH=8;

DEPTH=256;

ADDRESS_RADIX=UNS;

DATA_RADIX=UNS;

CONTENT BEGIN

0:127;

1:126;

2:126;

……

……

253:126;

254:126;

255:127;

END;

如果从m到n 单元格内的数据是相同的55,会是这样的格式出现:[m..n] :55;

格式很简单吧。首先根据需要设置每个字的位宽WIDTH和总字数(或总单元格数)DEPTH,然后设置地址和数据的进制基数ADDRESS_RADIXDATA_RADIX,建议大家不要修改,就使用无符号数(UNS)。然后用MATLAB生成需要的数据(按上边的格式,注意中间“:”,最后“;”),往CONTENT BEGINEND中间一贴就行了。

下边举例说明MATLAB生成需要数据的程序的写法,希望对大家有用:

%the walue of cosine

function data=makedata

index = linspace(0,2*pi,2^8);

cos_value = cos(index);

cos_value = cos_value * (2^7 -1 );

cos_value = fix(cos_value);

cos_value =abs(cos_value);

for i=65:192

cos_value(i)=cos_value(i)+128;

end

%///////////////////////////////////////上边的用来生成数据,下边的用于控制格式输出

number=[0:255];

for i=1:256

comer(i)=':';

end

for i=1:256

semi(i)=';';

end

data=[number; comer; cos_value; semi];

fid=fopen('d:\data.txt','w');   %在D盘下生成文件data.txt

fprintf(fid, '%d%c%d%c\n', data);

fclose(fid);

D盘下找到data.txt文件,用写字板打开mif文件,将data.txt中的内容贴到CONTENT BEGINEND中间,然后保存就可以了,这样就用MATLAB工具输入行数不多的程序生成有规律数据,然后复制到用写字板打开的mif文件的CONTENT BEGINEND之间,成功录入ROM的初始化数据了。

注:MATLAB的这两段程序未经本人验证过!!

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户120337 2011-2-16 21:39

呵呵,用写字板打开,不如称用某种文本编辑器打开,例如xxxxxEdit。一切皆可打开,不过是否为可理解的文本,另说。
相关推荐阅读
用户1631420 2011-12-06 08:42
改版了!
很久很久没上edn了~ 改版了,有点不习惯了。 很多事情冲着我来了。可能是每个这个年龄段的人都会遇到的 我不知道我处理的好不好。但我还是按照我的意志去做了。 工作上的事情 突如其来...
用户1631420 2011-07-17 14:08
基于FPGA的PID算法实现
    有段时间没来这里写东西。最近稍微有些忙,工程硕士报名了,又有一部分时间给它了。     言归正传,之前一直在学习PID算法,最近再用FPGA来实现PID控制,目前进行的2个实践一个,一个是温 ...
用户1631420 2011-06-05 12:12
基于ds18b20 的fpga 温度计
作为恒温控制系统选择的前端温度测量模块,ds18b20的控制相对麻烦点,相关ds18b20的资料可以查看手册。 整体模块划分   pll分频模块,25mhz晶振 倍到50 mhz在分频1mhz,1us...
用户1631420 2011-06-02 17:22
随便聊聊~
       年也过完了,2010年对于我自己来说风起云涌,变化不测啊~       今年27了,一事无成。偶然之间在单位图书馆翻到一本fpga的杂志,颇有兴趣,于是找到了这里。      申请用户,...
用户1631420 2011-05-26 13:33
fpga设计流程图
...
用户1631420 2011-05-26 12:47
for循环与阻塞赋值
   阻塞赋值和非阻塞赋值是verilog里一个难点,也是重点,相关区别各大论坛博客里都有详细的讲解。       先说几个经验上的要点。       在时序逻辑里都采用非阻塞赋值,在组合逻辑里采用阻...
EE直播间
更多
我要评论
1
8
关闭 站长推荐上一条 /3 下一条