做 FPGA设计时经常要调用芯片内存。 特别对于 ROM, 内存的初始化就显得比较重要。 当然你完全可以手工在 QUARTUS II 打开 mif文件的表格里或是在 EXCEL 中逐个输入,几 十项(字)或是近百项(字)你还可以接受,如果上千项或是更多呢?估计能累的人吐血! 一般内存的初始化数据都是有规律的,符合一定的函数,我们完全可以用 MATLAB 来 完成(如果没规律只能逐项手工输入了)。 首先,我们应该知道*.mif 文件的格式。它是文本格式。随便打开一个 mif 文件,你会 发现它具有如下的格式: -- 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 License -- Subscription Agreement, Altera MegaCore Function License -- Agreement, or other applicable license 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; 格式很简单吧。首先根据需要设置每个字的位宽 WIDTH 和总字数 DEPTH。然后设置地址 和数据的进制基数 ADDRESS_RADIX、DATA_RADIX,建议大家不要修改,就使用无符号 数(UNS) 。然后用 MATLAB 生成需要的数据(按上边的格式,注意中间“: ” ,最后“;” ) , 往 CONTENT BEGIN和 END中间一贴就行了。 下边举例说明 MATLAB程序的写法,希望对大家有用。 %the walue of cosine function data=makedata 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:\data.txt','w'); fprintf(fid, '%d%c%d%c\n', data); fclose(fid); 在 D盘下找到 data.txt 文件,用写字板打开 mif文件,将 data.txt 中的内容贴到 CONTENT BEGIN和 END中间,然后保存就可以了。 对于 hex 文件,更简单。大家生成mif文件后,用 QUARTUS II 打开,然后另存为 hex 文件就可以了。 用MATLAB 生成.mif、.hex(QUARTUS II)文件简介.pdfourdev_624514CO3BS5.pdf(文件大小:64K) (原文件名:用MATLAB 生成.mif、.hex(QUARTUS II)文件简介.pdf) 用 MATLAB 生成*.mif、*.hex(QUARTUS II)文件简介(v1.1) 以前写过一个“用 MATLAB 生成*.mif、*.hex(QUARTUS II)文件简介” ,由于时间和 水平原因很粗糙,并且有一些错误。现在修改一下,升级到 v1.1。以前的称为 v1.0 吧。 做 FPGA设计时经常要调用芯片内存。 特别对于 ROM, 内存的初始化就显得比较重要。 当然你完全可以手工在 QUARTUS II 打开 mif文件的表格里逐个输入, 几十项或许你还可以 接受,但上千项估计能累的人吐血! 一般内存的初始化数据都是有规律的,符合一定的函数,我们完全可以用 MATLAB 来 完成(如果没规律只能逐项手工输入了)。 1. 使用 MATLAB 直接生成*.mif文件 首先,我们应该知道*.mif 文件的格式。它是文本格式。随便打开一个 mif 文件,你会 发现它具有如下的格式: -- Copyright (C) 1991-2008 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 License -- Subscription Agreement, Altera MegaCore Function License -- Agreement, or other applicable license 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=DEC; CONTENT BEGIN [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 代码如下: clear all; close all; 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,'CONTENT BEGIN\n'); %固定格式 for j=1:256 %数据段数据 i=j-1; fprintf(fid,'%3d',i); fprintf(fid,' : '); fprintf(fid,'%3d',cos_val(j)); fprintf(fid,';\n'); end fprintf(fid,'END;\n'); %固定格式 fclose(fid); 运行此 MATLAB 程序,得到 cosine.mif 即可使用。 用MATLAB生成.mif、.hex(QUARTUS II)文件简介(v1.1).pdfourdev_624515VKREOH.pdf(文件大小:135K) (原文件名:用MATLAB生成.mif、.hex(QUARTUS II)文件简介(v1.1).pdf)
|
欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) | Powered by Discuz! X3.4 |