利⽤matlab进⾏ROM初始化mif⽂件⽅法(转)
利⽤matlab进⾏ROM初始化mif⽂件⽅法(转)
⼯具使⽤版本:Quartus II 13.0+Matlab2012d
撰写⼈:Strive_JP
关于FPGA中ROM初始化,最近学会了利⽤matlab强⼤的数据处理能⼒来初始化ROM当中的数据。
先简单介绍下FPGA内部的RAM。这⾥为了简单起见,以EP4CE10为例,先来看下资源情况。
EP4CE10内部有414Kbits的存储容量。有EP4CE10的⽚内存储器内存为M9K。这样,可以计算出EP4CE10内部的M9K有46⽚。再看看handbook⾥⾯介绍的配置特性。
由上图可以看出FPGA虽然内部拥有⼀定数量的M9K,但配置深度和配置位宽均有⼀定的限制。
介绍完上述那些,⾔归正传,这⾥提出⼀种利⽤matlab⽂件来初始化ROM内部数据的⽅式,即对.mif⽂件进⾏配置。
假设⼀组图像数据,现在想将其写⼊ROM中,以供后续的⼯程调⽤。图像数据保存在.txt⽂件中,格式类型如下所⽰:
fprintf格式
这⾥只显⽰了部分图像数据,实际数据有⼏千上万⾏。咋办?总不能⼀点点地敲⼊ROM的初始化⽂件中去吧。别⼈介绍的软件处理⽅法也没提过这种情况。这时候,想到是否可以利⽤matlab强⼤的数据处理能⼒,来对.txt⽂件进⾏处理,再修改为.mif⽂件保存后直接让quartusII读取呢。
思路是有了,接下来看看⼀个可供quartusII识别的.mif⽂件内部是什么结构。此时以txt⽂档打开⼀个简单配置完成的⽂件来看看。
.mif⽂件中的内容包括以下⼏个重要⽅⾯:
WIDTH=8; //数据位宽为8位
DEPTH=256; //存储深度为256
ADDRESS_RADIX=UNS; //地址类型为⽆符号整型
DATA_RADIX=UNS; //数据类型为⽆符号整型
CONTENT BEGIN
0:1; //地址0的存储器内容为1
1:3; //地址为1的存储器内容的3
[2:255]:0;//地址为2~255的存储器内容为0
END;
这样,即可利⽤matlab构造类似的⽂件存储⽅式。利⽤matlab将上述的图像数据转换成.mif。代码如下所⽰:
clear; clc; close all; fid=fopen('');%打开待转换数据的.txt⽂件 temp=fscanf(fid,'%x');%扫描⽂件 n=1024; fid=fopen('convert_data.mif','w');%打开待写⼊的.mif⽂件 fprintf(fid,'WIDTH=8;\n');%写⼊存储位宽8位 fprintf(fid,'DEPTH=1024;\n');%写⼊存储深度1024
fprintf(fid,'ADDRESS_RADIX=UNS;\n');%写⼊地址类型为⽆符号整型 fprintf(fid,'DATA_RADIX=HEX;');%写⼊数据类型为16进制 fprintf(fid,'CONTENT BEGIN\n');%起始内容 for i=0:n-1 fprintf(fid,'\t%d:%x;\n',i,temp(i+1));
end fprintf(fid,'END;\n'); fclose(fid);%关闭⽂件
这样将⽂件转换后⽂件convert_data.mif打开后以及利⽤quartusII打开.mif⽂件如下所⽰:
完全没有任何问题。
针对这种.txt⽂档其实更直接的⽅法是采⽤EXCEL表,将数据做成符合.mif⽂件格式。这样或许也会⽐较简单。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论