- 在线时间
- 1084 小时
- 最后登录
- 2015-9-10
- 注册时间
- 2014-4-18
- 听众数
- 162
- 收听数
- 1
- 能力
- 10 分
- 体力
- 43976 点
- 威望
- 6 点
- 阅读权限
- 255
- 积分
- 15250
- 相册
- 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中逐个输入,几十项(字)或是近百项(字)你还可以接受,如果上千项或是更多呢?估计能累的人吐血!
' d; ~+ L1 S. q$ a; Z" m4 B; s3 N7 \9 v" Y" j# }5 Z( q9 H
一般内存的初始化数据都是有规律的,符合一定的函数,我们完全可以用MATLAB来完成(如果没规律只能逐项手工输入了)。
( z3 X: y$ }0 j# R i( U8 A; a6 t+ |& ]) @8 v
首先,我们应该知道*.mif文件的格式。它是文本格式。随便打开一个mif文件,你会发现它具有如下的格式:
& q$ J" \6 a9 {. o! D' U4 [6 X2 P/ D$ {8 a3 W) W& ~9 D/ h
+ W# J) V& i& q N5 g5 H- -- 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;
( p5 v# \( W) l: T; d. l- [: o* i 格式很简单吧。首先根据需要设置每个字的位宽WIDTH和总字数DEPTH。然后设置地址和数据的进制基数ADDRESS_RADIX、DATA_RADIX,建议大家不要修改,就使用无符号数(UNS)。然后用MATLAB生成需要的数据(按上边的格式,注意中间“:”,最后“;”),往CONTENT BEGIN和END中间一贴就行了。
* o1 ^0 J; [0 M( ~8 V( d$ J, U) h, I; `& O
下边举例说明MATLAB程序的写法,希望对大家有用5 _; ~$ H: c; F6 |5 `
2 }/ L. u8 G- ~- 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);2 b$ ]; ~) T' U7 r! B- m d
在d:\下找到mif_data_matlabsky.txt'文件,用写字板打开mif文件,将data.txt中的内容贴到CONTENT BEGIN和END中间,然后保存就可以了。或者将CONTENT BEGIN和END两边的内容分别贴于data.txt文件的前后,然后保存为.mif文件。1 C4 l8 Z" Z) ~2 k- |
) X) R, G7 q1 n' X: O2 C: C对于hex文件,更简单。大家生成mif文件后,用QUARTUS II打开,然后另存为hex0 ?5 d! D9 J1 B3 l# n. y5 x
' [- j6 |4 W# V0 X) l$ m% e4 W
% H0 g& K9 l; T+ b
|
zan
|