Vivado与Matlab联合生成.coe文件使用ROM生成正弦波及滤波输出例程 && 用ROM生成正弦波仿真看不是标准波形bug解决

本文介绍两个问题

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

输入输出都选择寄存

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值