本文介绍两个问题
1.如何使用matlab生成正弦波的.coe文件并在Vivado中使用ROM例化输出正弦波,设计滤波器对正弦波滤波。
2.ROM生成的正弦波波形是乱的,不平滑问题的解决。
使用matlab生成正弦波.coe文件
depth = 4096; %存储器的单元数4096
widths = 16; %数据宽度为16位
fidc = fopen('sine.coe','wt'); %给文件起名字
fprintf(fidc , 'memory_initialization_radix=%d;\nmemory_initialization_vector=\n',10);
for x = 1 : depth-1
fprintf(fidc,'%d,\n',round((2^(widths-1)-1)*sin(2*pi*(x-1)/4096)+2^(widths-1)));
end % 加上直流分量2^(widths-1) 保证值为正范围为(1,2^16-1)
fprintf(fidc,'%d;\n',round((2^(widths-1)-1)*sin(2*pi*(depth-1)/4096)+2^(widths-1)));
fclose(fidc);
设置存储器也就是Vivado中的ROM核的深度为4096,数据位宽为16,使用fidc作为文件标识符打开或新建一个名为sine.coe的文件并准备写入,设置数据进制为10,依次向fidc文件写入正弦波的值。给正选波加上直流分量2^(widths-1)是为了保证输出值是正数,并且范围为(1,2^16-1)。最最后使用fclose(fidc)
来关闭文件,以确保数据正确保存并释放系统资源。
保存运行后,会在跟此matlab脚本文件同一文件夹内生成.coe文件
然后在Vivado中单击IP Catalog搜索Rom 双击Distributed Memory Generator
Distributed Memory Generator 适用与数据量较少的情况,如果数据量较大深度较大推荐使用下面的Block Memory Genertor。
如下图所示 配置ROM 深度为4096,数据宽度为16
输入输出都选择寄存