mif文件/coe文件的创建

本文介绍如何使用Matlab生成用于FPGA ROM初始化的COE及MIF文件,包括正弦波数据的具体实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mif文件/coe文件的创建

在FPGA中使用ROM的应用是十分常见的,但数据较少时,可以直接使用Quartus II 或者Vivado工具直接产生mif文件或者coe文件。但当数据量很大的时,在EDA工具中,一个个输入这是非常繁琐的、不现实的,针对这种情况,一般是使用如matlab、C等高级语言产生mif文件/coe文件,然后添加到EDA工具中。

coe文件的创建

在Vivado中创建ROM时,需要利用coe文件初始化ROM。下面将创建一个含有正弦波的coe文件。

depth    =256; % rom深度    
width    =8;   % 数据宽度

sin_coe  = sin(2*pi*(0:depth-1)/depth);   % 将正弦波分为256份
sin_coe  = sin_coe*(2^(width-1)-1);       % 正弦波的幅值范围为-1~1,
                                          %将其转为变为-127~127
                                          %(看到博客是乘以128的,但是这样的话,8位的数据宽度好像不满足
sin_coe  = round(sin_coe+(2^(width-1)-1)); % 将其转为非负数并取整。此时范围为0~254
fid   =fopen('sine.coe','wt');             % 创建文件
fprintf(fid,'memory_initialization_radix=10;\n'); % memory_initialization_radix:定义存储器初始化值的基,可取值为2,10,16等
fprintf(fid,'memory_initialization_vector=\n');  % memory_initialization_vector 储存器内数据向量

for  idnex =1:depth
      if(idnex<depth)    
        fprintf(fid,'%d,\n',sin_coe(idnex));
      else 
         fprintf(fid,'%d;\n',sin_coe(idnex));  % 最后的数据应以‘;’结尾
      end 
end 

COE文件提供了一种设置内存初始化值的高层次方法,但实际上并不能直接使用。当生成IP核,Vivado会将COE文件转换为MIF文件。MIF文件保存了原始值,用于存储类IP核的初始化和仿真模型。

创建后如下:
coe文件

mif文件的创建

depth    =256; % rom深度    
width    =8;   % 数据宽度

sin_mif  = sin(2*pi*(0:depth-1)/depth); 
sin_mif  = sin_mif*(2^(width-1)-1);  

sin_mif  = round(sin_mif+(2^(width-1)-1)); % 将其转为非负数并取整。此时范围为0~254
fid   =fopen('sine.sin','wt');        % 创建文件
fprintf(fid,'depth=%d;\n',depth);
fprintf(fid,'width=%d;\n',width);      
fprintf(fid,'address_radix=UNS;\n');   % 地址的基 可取值为BIN(二进制),HEX(十六进制),OCT(八进制),DEC(有符号十进制),UNS(无符号十进制)
fprintf(fid,'data_radix=UNS;\n');      % 数据的基
fprintf(fid,'content begin\n');        % 地址:数据对包含在 从"content begin    end 中
for  idnex =1:depth
        fprintf(fid ,'%d:%d;\n',idnex-1,sin_mif(idnex));   % 其表示的方法需要和上面申明的基相同
end 

fprintf(fid ,'end');
fclose(fid);

创建如下:

mif文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值