Quartus II mif 文件格式及rom如何输出负数

Posted chuanchuan304

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Quartus II mif 文件格式及rom如何输出负数相关的知识,希望对你有一定的参考价值。

1  ADDRESS_RADIX=DEC ;   %设置地址基值(实际就是地址用什么进制的数表示)   可以设为BIN(二进制),OCT(八进制),DEC(十进制)HEX(十六进制)UNS(无符号数)

用verilog模拟DDS产生正弦波信号

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如何输出负数的主要内容,如果未能解决你的问题,请参考以下文章

针对Quartus IP Core的MIF文件格式小记

MIF文件生成说明

用matlab生成mif文件

数字电路基础与Quartus-II入门

quartus中关于添加ip核的问题

Quartus II管脚批量分配文件(.tcl)格式