一、生成系数

1.打开 MATLAB(任意一个版本)在命令行输入以下指令

filterDesigner

    2.选择对应的滤波器类型,左下角几个框框即为滤波器类型,图中为直接型FIR滤波器,接着根据自己的需求填响应类型(低通、高通、带通、带阻),并选择采样频率及通带和阻带频率,选择好之后,点击设计滤波器。

    3.在界面选择文件-导出,导出到工作区,变量名是Num,所设计的滤波器系数即可出现在工作区。

    4.把浮点系数转成 FPGA 可用的量化系数,FPGA 不能直接处理浮点数,必须把系数量化成整数,在命令行输入:

    % 1. 获取系数
    h = Num; 
    % 2. 归一化并量化为16位(范围:-32768 ~ 32767)
    scale = 2^15 - 1;  % 最大正系数为32767
    h_scaled = round(h / max(abs(h)) * scale);
    % 3. 生成Vivado需要的.coe文件
    fid = fopen('fir_coeffs.coe', 'w');
    fprintf(fid, 'radix=10;\n'); % 十进制格式
    fprintf(fid, 'coefdata=');
    for i = 1:length(h_scaled)
        fprintf(fid, '%d', h_scaled(i));
        if i < length(h_scaled)
            fprintf(fid, ',');
        else
            fprintf(fid, ';');
        end
    end
    fclose(fid);

    运行后,会得到一个 fir_coeffs.coe 文件,这个文件就是给 Vivado 用的。

    二、Vivado中使用

    1.打开vivado的IP Catalog,搜索FIR,即FIR滤波器

    2.在Coefficient Source 选 COE File,将刚刚生成的coe文件导入,其他的参数根据系统设计来配,比如信号位宽,系统时钟,采样率等。

    3.生成完之后,点击vivado中的IP核例化模板进行例化,将自己的时钟、输入信号及输出信号接到例化里即可。

    更多推荐