用MATLAB生成*.mif、*.hex(QUARTUS II)文件简介(v1.1)
macro_qian@yahoo
以前写过一个“用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
fprintf格式
-- 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即可使用。
2.MATLAB变量空间拷贝法
此方法更简单。
QUARTUS II下菜单File\New\选择Memory Initialization File,Number of words=256, Word size=8,保存为cosine.mif。按照图1、图2提示在画红圈的地方右击分别修改修改地址数基为十进制、修改内存数基为有符号十进制。
图1 修改地址数基为十进制
图2 修改内存数基为有符号十进制
MATLAB下Command Window中执行:
index=linspace(0,2*pi,2^8+1);
cos_val=fix((2^7-1)*cos(index)+0.5);
在工作空间中双击cos_val,在Array Editor的表格中打开cos_val的变量值,复制前256个(图1),然后粘贴到QUARTUS II中打开的cosine.mif文件的表格中(图4)。得到如图5的结果。保存cosine.mif文件,OK!搞定!
图3
图4
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论