Quartus II mif 文件格式及rom如何输出负数
Posted chuanchuan304
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Quartus II mif 文件格式及rom如何输出负数相关的知识,希望对你有一定的参考价值。
(1) ADDRESS_RADIX=DEC ; %设置地址基值(实际就是地址用什么进制的数表示) 可以设为BIN(二进制),OCT(八进制),DEC(十进制),HEX(十六进制),UNS(无符号数)
http://www.cnblogs.com/christsong/p/5536995.html
(2)用MATLAB生成正弦波,以及将正弦波存储为.mif文件所需格式代码如下:
clear all
clc
close all
N = 10; %储存单元地址线
depth=2^N; %存储单元深度
widths=N; %数据宽度为8位
index = linspace(0,pi*2,depth);
sin_value = sin(index);
sin_value = sin_value * (depth/2 -1); %扩大正弦幅度值
sin_value = fix((sin_value)+0.5);
plot(sin_value);
number=[0:depth-1];
i=0;
for(i=1:depth)
comer(i)=\':\';
end
for(i=1:depth)
semi(i)=\';\';
end
for i=1:depth
L(i)=sin_value(i);
end
fid=fopen(\'E:\\WORK\\DRS6000_Q\\MATLAB CODE\\test3.txt\',\'wt\');
fprintf(fid,\'WIDTH=%d;\\n\',N);
fprintf(fid,\'DEPTH=%d;\\n\',depth);
fprintf(fid,\'ADDRESS_RADIX=UNS;\\n\');
fprintf(fid,\'DATA_RADIX=DEC;\\n\'); % 有符号十进制表示
fprintf(fid,\'CONTENT BEGIN\\n\');
for i = 1 : depth
fprintf(fid, \'%d%c%d%c\\n\', number(i),comer(i), L(i),semi(i));
end
fprintf(fid,\'END;\\n\');
fclose(fid);
以上代码的作用是在mif文件中存入有符号的十进制数,如图:
但是用有符号十进制(DEC)表示的负数在ROM中读出时全部为0!!!!
修改方法为:在Quartus II中打开该mif文件,并做如下修改:
修改后,mif文件内容也将改变,见下图:
此时再读rom中的初始化数据,q值将会变为有符号数!!!同时,若将mif文件改为二进制表示或者无符号十进制表示,也同样可以实现有符号数读出!
注意:必须将q的位宽设置为与WIDTH相同的数值!!否则读出数据同样出错!
以上是关于Quartus II mif 文件格式及rom如何输出负数的主要内容,如果未能解决你的问题,请参考以下文章