- 在线时间
- 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中逐个输入,几十项(字)或是近百项(字)你还可以接受,如果上千项或是更多呢?估计能累的人吐血!& ^8 X2 i2 k7 l S1 P* y' \- S
% k( o3 c( ]# J4 o+ e4 T
一般内存的初始化数据都是有规律的,符合一定的函数,我们完全可以用MATLAB来完成(如果没规律只能逐项手工输入了)。
2 l. I$ k' P' _+ |0 f0 ]. l) S: G) ]6 T) \
首先,我们应该知道*.mif文件的格式。它是文本格式。随便打开一个mif文件,你会发现它具有如下的格式:( a7 K1 ]/ |9 S9 z
J% }! U7 V8 X1 w0 {* |$ j7 H; W1 z
- -- 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;
2 x- }; y, c$ \/ W' G 格式很简单吧。首先根据需要设置每个字的位宽WIDTH和总字数DEPTH。然后设置地址和数据的进制基数ADDRESS_RADIX、DATA_RADIX,建议大家不要修改,就使用无符号数(UNS)。然后用MATLAB生成需要的数据(按上边的格式,注意中间“:”,最后“;”),往CONTENT BEGIN和END中间一贴就行了。9 U- J4 y' s8 i: H
& B- c9 S2 l' G1 ~" Z下边举例说明MATLAB程序的写法,希望对大家有用% X( d: `; ?1 ]- c0 [7 j
^3 c- x# F% U, U- t, F) F8 V- f
- 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);3 O, q% `2 J( l* d& z2 K$ D$ O. Q
在d:\下找到mif_data_matlabsky.txt'文件,用写字板打开mif文件,将data.txt中的内容贴到CONTENT BEGIN和END中间,然后保存就可以了。或者将CONTENT BEGIN和END两边的内容分别贴于data.txt文件的前后,然后保存为.mif文件。
" j( i- n5 J1 O, r! y' [
& o% _% ?4 D) Q6 ~对于hex文件,更简单。大家生成mif文件后,用QUARTUS II打开,然后另存为hex
2 i3 m' L# I, Z* z# a7 Z2 d$ ?9 a0 F( O) J% ?) Z+ a! |
- f0 Z6 I5 \/ W# Z6 K! g |
zan
|