- 在线时间
- 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中逐个输入,几十项(字)或是近百项(字)你还可以接受,如果上千项或是更多呢?估计能累的人吐血!
5 o( x' s. E: |6 F+ T/ x
% \/ X9 ?7 T# W8 S一般内存的初始化数据都是有规律的,符合一定的函数,我们完全可以用MATLAB来完成(如果没规律只能逐项手工输入了)。
+ L. h8 A: d6 \- L0 S# e1 K, R. L
L' W: J6 Z4 ?: d首先,我们应该知道*.mif文件的格式。它是文本格式。随便打开一个mif文件,你会发现它具有如下的格式:
/ c' @) b7 ]# M0 a1 l- Y5 |, V7 |# |* |4 A& ]) I( i2 Y7 u2 m; E
5 P; H& h4 C. e7 `7 D) [0 y
- -- 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 U& V: I9 Z! T [7 o1 \
格式很简单吧。首先根据需要设置每个字的位宽WIDTH和总字数DEPTH。然后设置地址和数据的进制基数ADDRESS_RADIX、DATA_RADIX,建议大家不要修改,就使用无符号数(UNS)。然后用MATLAB生成需要的数据(按上边的格式,注意中间“:”,最后“;”),往CONTENT BEGIN和END中间一贴就行了。
7 T$ f& O k7 a/ [5 j8 e* \" G& C
6 v/ X, A7 n8 P& Q$ u% a下边举例说明MATLAB程序的写法,希望对大家有用1 J/ k9 v: g/ M5 b. ?/ I4 S! j$ C3 @
" R* r! A# u& ? t4 \3 |
- 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);' j; E1 w% T9 s: q+ |* p
在d:\下找到mif_data_matlabsky.txt'文件,用写字板打开mif文件,将data.txt中的内容贴到CONTENT BEGIN和END中间,然后保存就可以了。或者将CONTENT BEGIN和END两边的内容分别贴于data.txt文件的前后,然后保存为.mif文件。* w6 _- J& X6 m% |( H6 e. E
]0 f! o* V) I1 A
对于hex文件,更简单。大家生成mif文件后,用QUARTUS II打开,然后另存为hex
" n& l) U* o. O; |; j. p8 i, X ?: Z5 t# B& V& V* V0 ?0 _+ j
1 \# @0 Y- j A
|
zan
|