matlab生成任意长度余弦波coe文件以及vivado仿真

一、matlab生成任意长度余弦波coe文件

Matlab 复制代码
clear
clc
close all
width=32;   %rom的位宽
depth=3600; %rom的深度
x=linspace(0,2*pi,depth);  %在一个周期内产生3600个采样点
y_cos=cos(x);   %生成余弦数据
y_cos=round(y_cos*(2^(width-1)-1))+2^(width-1)-1;  %将余弦数据全部转换为整数
%y_cos=dec2hex(y_cos);
fid=fopen('C:\rom_coe\rom_cos_3600x32b.coe','w');  %创建.coe文件
% 写入 COE 文件头
fprintf(fid, 'memory_initialization_radix=16;\n');
fprintf(fid, 'memory_initialization_vector=\n');
for i = 1:length(y_cos)
  fprintf(fid,'%x',y_cos(i));  %向.coe文件中写入数据
  if i < length(x)
        fprintf(fid, ',');
    else
        fprintf(fid, ';');
  end
  fprintf(fid, '\n');
end
%关闭.coe文件
fclose(fid);  

二、Block RAM IP配置

三、verilog tb测试文件

matlab生成的是带偏置的波形,在verilog中减去偏置即可。

cpp 复制代码
module sim_1_read_cos( );

reg clk_100m=1'b1;
reg  [11:0] rd_addra=12'd0;

wire [31:0] dout_32b;
reg  [31:0] dout_32b_rectify;
integer i;
initial begin
    rd_addra = 12'd0;
    #100
    
    for(i=0;i<=4095;i=i+1)
        begin
            #10 rd_addra = rd_addra + 1'b1;
        end
end

always #5 clk_100m = ~clk_100m;
//减去偏置
always@(posedge clk_100m) begin
    dout_32b_rectify <= dout_32b - 32'h8000_0000;
end

brom_4096x32b u_brom_4096x32b (
  .clka ( clk_100m  ),  // input wire clka
  .addra( rd_addra  ),  // input wire [11 : 0] addra
  .douta( dout_32b  )   // output wire [31 : 0] douta
);
endmodule

四、仿真结果

相关推荐
JNTeresa2 小时前
锁存器知识点详解
fpga开发
Cao1234567893215 小时前
FPGA基础之基础语法
fpga开发
一大Cpp5 小时前
通过Quartus II实现Nios II编程
fpga开发
随风飘摇的土木狗5 小时前
【MATLAB第118期】基于MATLAB的双通道CNN多输入单输出分类预测方法
matlab·cnn·分类预测·卷积神经网络·双通道
7yewh6 小时前
Verilog 语法 (二)
fpga开发
算法如诗13 小时前
【数据融合】基于拓展卡尔曼滤波实现雷达与红外的异步融合附matlab代码
matlab·数据融合
边缘计算社区18 小时前
FPGA与边缘AI:计算革命的前沿力量
人工智能·fpga开发
S&Z346318 小时前
[官方IP] Shift RAM
网络协议·tcp/ip·fpga开发
Evand J20 小时前
MATLAB技巧——平滑滤波,给出一定的例程和输出参考
开发语言·matlab
S&Z346321 小时前
[FPGA Video IP] Video Processing Subsystem
网络协议·tcp/ip·fpga开发·video