【FPGA学习】MATLAB和FPGA实现FFT

本博客记录一下在matlab设计和在FPGA平台实现FFT的方法,平台是Xilinx的ZYNQ

参考:
COE文件制作与使用
Vivado使用技巧(9):COE文件使用方法

.coe文件生成

在某些IP核的配置中,需要使用.coe文件来配置参数,比如说FIR滤波器的系数以及RAM中的初始化数据文件
.coe文件是一种ASCII文本文件,文件头部定义数据基数,数据以向量的形式给出,向量以分号结尾,向量之间用逗号隔开

.coe文件的通用语法如下:

Keyword =Value ; 注释
<Radix_Keyword> =Value ; 注释
<Data_Keyword> =Data_Value1, Data_Value2, Data_Value3;
  • 不区分关键词的大小写
  • 分号后为注释

关键词如下:

  • RADIX:用于非存储类型IP核的基数定义

  • MEMORY_INITIALIZATION_RADIX:定义存储器初始化值的基数

  • COEFDATA:定义滤波器的系数

  • MEMORY_INITIALIZATION_VECTOR:定义块存储器与分布式存储器的数据

  • PATTERN:用于位相关器(Bit Correlator)COE文件

  • BRANCH_LENGTH_VECTOR:用于Interleaver COE文件

实例:生成用于导入到RAM中的窗函数系数的.coe文件

生成1024点汉明窗的.coe文件,matlab程序如下:

w_fl = hamming(1024);
w_tc = double(fi(w_fl,0,16,15));
for i = 1:size(w_tc,1)
    w_fi(i) = org2comp(w_tc(i), 15, 16);
end

fid = fopen('hamming_1024.coe','w');
fprintf(fid, 'memory_initialization_radix=10;\n');
fprintf(fid, 'memory_initialization_vector=\n');
fprintf(fid, '%d,\n', w_fi);

其中有两个函数要说明一下:

  • fi函数:定点函数fi(data,s,w,f)
    • data:需要定点化的浮点数;
    • s:signed or unsigned 标志(1是signed)
    • w:数据位宽,如果是signed包含符号位
    • f:定点小数精度
  • org2comp:原码转补码函数
function data_comp = org2comp(data_org, digit, width)
    data_comp = mod(2.^width + data_org*2.^digit, 2.^width);

生成的.coe文件如下:
.coe文件
可见符合上面提到的语法

调用FFT IP核

实现FFT可以直接调用提供的IP核,本篇博客中使用的是vivado中的FFT IP核

posted @ 2022-04-11 21:26  Destiny_zxx  阅读(769)  评论(0编辑  收藏  举报