用MATLAB生成*.mif、*.hex(QUARTUSII)文件简介(v1.1)macro_qian@yahoo.com.cn以前写过一个“用MATLAB生成*.mif、*.hex(QUARTUSII)文件简介”,由于时间和水平原因很粗糙,并且有一些错误。现在修改一下,升级到v1.1。以前的称为v1.0吧。做FPGA设计时经常要调用芯片内存。特别对于ROM,内存的初始化就显得比较重要。当然你完全可以手工在QUARTUSII打开mif文件的表格里逐个输入,几十项或许你还可以接受,但上千项估计能累的人吐血!一般内存的初始化数据都是有规律的,符合一定的函数,我们完全可以用MATLAB来完成(如果没规律只能逐项手工输入了)。1.使用MATLAB直接生成*.mif文件首先,我们应该知道*.mif文件的格式。它是文本格式。随便打开一个mif文件,你会发现它具有如下的格式:--Copyright(C)1991-2008AlteraCorporation--YouruseofAlteraCorporation'sdesigntools,logicfunctions--andothersoftwareandtools,anditsAMPPpartnerlogic--functions,andanyoutputfilesfromanyoftheforegoing--(includingdeviceprogrammingorsimulationfiles),andany--associateddocumentationorinformationareexpresslysubject--tothetermsandconditionsoftheAlteraProgramLicense--SubscriptionAgreement,AlteraMegaCoreFunctionLicense--Agreement,orotherapplicablelicenseagreement,including,--withoutlimitation,thatyouruseisforthesolepurposeof--programminglogicdevicesmanufacturedbyAlteraandsoldby--Alteraoritsauthorizeddistributors.Pleaserefertothe--applicableagreementforfurtherdetails.--QuartusIIgeneratedMemoryInitializationFile(.mif)WIDTH=8;DEPTH=256;ADDRESS_RADIX=UNS;DATA_RADIX=DEC;CONTENTBEGIN[0..3]:127;[4..6]:126;[7..8]:125;9:124;10:123;…………[253..255]:127;END;下边笔者来说明用MATLAB产生所需*.mif文件方法。由于笔者的语文水平仅脱盲,如果空洞讲解很表述清楚并且会很枯燥。所以笔者仍使用一个例子来说明。对[0,2*pi)(包括0,不包括2*pi)256点采样,每点用8位有符号数表示。生成*.mif文件的MATLAB代码如下:clearall;closeall;clc;index=linspace(0,2*pi,2^8+1);%由于linspace函数包括前后两个边界点,所以多加一点除去%cos(2*pi)的值cos_val=fix((2^7-1)*cos(index)+0.5);%求COS值、倍扩成8位有符号数、fix是去尾求整数,%加0.5变成四舍五入求整数fid=fopen('E:\…\cosine.mif','w');%将cosine.mif文件创建到您老的QUARTUS工程目录里。当%然你也可创建到指定的目录,然后拷贝到QUARTUS工程目录。fprintf(fid,'WIDTH=8;\n');%指定每个数值的字宽(本工程用8位)fprintf(fid,'DEPTH=256;\n');%指定数值的个数,即ROM的深度(本工程用256个)fprintf(fid,'ADDRESS_RADIX=UNS;\n');%指定地址的数制(UNS:无符号数。推荐UNS)fprintf(fid,'DATA_RADIX=DEC;\n');%指定数据基数(DEC:十进制(有符号数),推荐DEC)fprintf(fid,'CONTENTBEGIN\n');%固定格式forj=1:256%数据段数据i=j-1;fprintf(fid,'%3d',i);fprintf(fid,':');fprintf(fid,'%3d',cos_val(j));fprintf(fid,';\n');endfprintf(fid,'END;\n');%固定格式fclose(fid);运行此MATLAB程序,得到cosine.mif即可使用。2.MATLAB变量空间拷贝法此方法更简单。QUARTUSII下菜单File\New\选择MemoryInitializationFile,Numberofwords=256,Wordsize=8,保存为cosine.mif。按照图1、图2提示在画红圈的地方右击分别修改修改地址数基为十进制、修改内存数基为有符号十进制。图1修改地址数基为十进制图2修改内存数基为有符号十进制MATLAB下CommandWindow中执行:index=linspace(0,2*pi,2^8+1);cos_val=fix((2^7-1)*cos(index)+0.5);在工作空间中双击cos_val,在ArrayEditor的表格中打开cos_val的变量值,复制前256个(图1),然后粘贴到QUARTUSII中打开的cosine.mif文件的表格中(图4)。得到如图5的结果。保存cosine.mif文件,OK!搞定!图3图4图53.对于*.hex文件,更简单。大家生成mif文件后,用QUARTUSII打开,然后另存为hex文件就可以了。笔者:希望这个教程对大家有帮忙。有什么问题可发邮件到macro_qian@yahoo.com.cn与笔者讨论。本文中用到的MATLAB程序将一同打包奉上。所有代码均为本人编写,由于水平有限,有什么不合适的地方请大家指正,欢迎大家SHARE。如果对你有帮助,可发邮件感谢我一下,让我也虚荣一下,以后更有心情写些其它的教程。哈哈,取笑了。思想有多远,人就能走多远!昨日惊悉饭岛爱君辞世,心中悲痛不已,在此悼念。老钱写于2008年圣诞Poweredbymacro_qianDigifeeCO.,LTD.PS:DigifeeCO.,LTD.是本人虚拟公司,等我有条件时会让她成为现实,希望大家别和我抢注,Digifee中包含了我心爱女子的名字,是我美好的理想。