在线时间 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中逐个输入,几十项(字)或是近百项(字)你还可以接受,如果上千项或是更多呢?估计能累的人吐血!" v9 U1 c$ M( k# a/ b, R( ?( |
, w4 q3 J) ~# ]! V 一般内存的初始化数据都是有规律的,符合一定的函数,我们完全可以用MATLAB来完成(如果没规律只能逐项手工输入了)。
5 n2 b' v+ z$ m0 l* ]: R3 |* N
6 ]9 f8 m" `# r) l2 G 首先,我们应该知道*.mif文件的格式。它是文本格式。随便打开一个mif文件,你会发现它具有如下的格式:
4 t* `5 j8 S: Z1 w& h, W3 {7 j0 C
2 j( l, X8 k7 Y8 L9 T2 l" U5 \% c / y7 v) }1 h/ _) a% g
-- 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;: v6 g% |' i$ n* K/ `9 Z
格式很简单吧。首先根据需要设置每个字的位宽WIDTH和总字数DEPTH。然后设置地址和数据的进制基数ADDRESS_RADIX、DATA_RADIX,建议大家不要修改,就使用无符号数(UNS)。然后用MATLAB生成需要的数据(按上边的格式,注意中间“:”,最后“;”),往CONTENT BEGIN和END中间一贴就行了。4 h6 O0 h8 l4 c* J( H
. H. B# w, x% p# o 下边举例说明MATLAB程序的写法,希望对大家有用# U' M/ e5 e1 T3 d4 {- P+ E
& J. E; w+ N3 ~$ I
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);% p1 l/ E7 S* s
在d:\下找到mif_data_matlabsky.txt'文件,用写字板打开mif文件,将data.txt中的内容贴到CONTENT BEGIN和END中间,然后保存就可以了。或者将CONTENT BEGIN和END两边的内容分别贴于data.txt文件的前后,然后保存为.mif文件。( h \) y" n& m) p3 g2 N3 c
6 c$ {% |# [) _% [; Q' f' x7 | 对于hex文件,更简单。大家生成mif文件后,用QUARTUS II打开,然后另存为hex
9 V3 c' k$ v! Q8 m : k$ P Q- J/ u2 W
' N' m, ~# r: r
zan