- 在线时间
- 1084 小时
- 最后登录
- 2015-9-10
- 注册时间
- 2014-4-18
- 听众数
- 162
- 收听数
- 1
- 能力
- 10 分
- 体力
- 43980 点
- 威望
- 6 点
- 阅读权限
- 255
- 积分
- 15251
- 相册
- 0
- 日志
- 0
- 记录
- 1
- 帖子
- 3471
- 主题
- 2620
- 精华
- 1
- 分享
- 0
- 好友
- 513
升级   0% TA的每日心情 | 开心 2015-3-12 15:35 |
|---|
签到天数: 207 天 [LV.7]常住居民III
 群组: 第六届国赛赛前冲刺培 群组: 国赛讨论 群组: 2014美赛讨论 群组: 2014研究生数学建模竞 群组: 数学中国试看培训视频 |
MATLAB生成*.mif、*.hex2008-08-31 03:06做FPGA设计时经常要调用芯片内存。特别对于ROM,内存的初始化就显得比较重要。当然你完全可以手工在QUARTUS II打开mif文件的表格里或是在EXCEL中逐个输入,几十项(字)或是近百项(字)你还可以接受,如果上千项或是更多呢?估计能累的人吐血!
9 S" ~9 [5 n. ^9 X' p6 p
6 p1 `' ?; \. D3 V* K一般内存的初始化数据都是有规律的,符合一定的函数,我们完全可以用MATLAB来完成(如果没规律只能逐项手工输入了)。. O/ ~8 h( [$ a5 g" w7 p5 \
1 {, U5 | ^$ L% u& P6 `# b首先,我们应该知道*.mif文件的格式。它是文本格式。随便打开一个mif文件,你会发现它具有如下的格式:! ]0 m J% i( N5 C& ~
% I I2 a, d/ {7 J* }, J9 t
4 t- J6 A$ A/ p$ |8 T6 x$ b% X
- -- Copyright (C) 1991-2007 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 ******
- -- Subscription Agreement, Altera MegaCore Function ******
- -- Agreement, or other applicable ****** 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;: ]: J8 ?9 r9 @- q# ~$ u. I
格式很简单吧。首先根据需要设置每个字的位宽WIDTH和总字数DEPTH。然后设置地址和数据的进制基数ADDRESS_RADIX、DATA_RADIX,建议大家不要修改,就使用无符号数(UNS)。然后用MATLAB生成需要的数据(按上边的格式,注意中间“:”,最后“;”),往CONTENT BEGIN和END中间一贴就行了。! M* V7 T7 _8 v: T* h- Q
7 a7 k' L6 ?' A- l' q7 {0 W: B
下边举例说明MATLAB程序的写法,希望对大家有用
- y) _* \( y- l& y* t2 O* i3 f7 B
- function data=makedata
- %使用MATLAB生成MIF & HEX2文件
- %see also http://www.matlabsky.com
- %2009.1.10
- %
- 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:\mif_data_matlabsky.txt','w');
- fprintf(fid, '%d%c%d%c\n', data);
- fclose(fid);
: d. N( @3 W& g8 ~ d 在d:\下找到mif_data_matlabsky.txt'文件,用写字板打开mif文件,将data.txt中的内容贴到CONTENT BEGIN和END中间,然后保存就可以了。或者将CONTENT BEGIN和END两边的内容分别贴于data.txt文件的前后,然后保存为.mif文件。( U+ P" ]" Y1 h9 r- j) q0 n# V
" A, s% \$ a) T! E对于hex文件,更简单。大家生成mif文件后,用QUARTUS II打开,然后另存为hex
4 y1 q& F% l$ [+ ?$ q) a' B
6 T+ d6 O+ y9 r5 k) i) H
: B& @7 f( [! s |
zan
|