VIVADO中的IP核在MATLAB中仿真
项目简述
我们都会用MATLAB进行算法验证,但是经常会发现如果VIVADO中调用了IP核,那么最终会发现VIVADO与MATLAB之间的数据不可以统一的对应起来。那么,MATLAB验证的效果就会大大下降,那么可不可以想办法将VIVADO中的IP核封装成一个函数在MATLAB中调用呢?答案是可以的。这篇博客主要以FFT的IP核为例讲解封装成一个函数并且成功在MATLAB中调用。
本次实验所使用的软硬件工具如下:
1、VIVADO 2019.1
2、MATLAB 2015b
3、VS2015
VIVADO建立FFT IP核
首先建立VIVADO工程,然后选择FFT IP核开始定制
这里定制一下IP的信息,这里需要注意定制IP的信息与MATLAB中调用的文件的设置需要一样,这样才可以将MATLAB中的数据与VIVADO相对应。
上面每步定制的意思我们在前面讲解FFT IP的时候已经进行了相应的讲解,需要学习的同学可以查阅前面的文章,这里我们不再赘述。最后点击生成FFT 的IP核。这里特别要注意,数据的输入输出是AXI-Stream格式的数据,也就是说是以字节对齐的,比如所输入数据实部12位、虚部11位,那么在输入数据线上的表示就是实部16位、虚部16位。这也是很多初学者不明白数据位宽与自己设置不一样的原因。
MATLAB调用FFT IP核
上面我们已经生成了FFT IP,然后再生成目录的cmodel文件中有相应的文件,但是需要我们提前编译一下,这里选择的编译环境是VS2015。cmodel中的文件有两个,如下:
上面的是linux系统,下面的是windos系统。我们将下面的文件进行解压放到MATLAB的文件夹中。然后打开MATLAB切换到相应的文件夹下:
然后再MATLAB的命令行输入 run make_xfft_v9_1_mex,然后出现如下结果:
在生成文件中多出了.mexw64后缀的文件证明我们生成相应的MATLAB函数成功。然后查阅技术手册,会发现函数的调用主要有以下几个端口:
函数调用的输出如下:
上面的参数在使用的时候要与VIVADO的IP定制的时候相一致,那么在MATLAB中调用该函数的时候才可以与VIVADO中仿真出来的结果相一致。而且前面我们定制IP的时候选择的是可以实施配置,那么只需要我们MATLAB与VIVADO实时配置的参数相一致,MATLAB与VIVADO两个输出的结果完全一致,最终实现了VIVADO中的IP核在MATLAB中调用的现象。
下面以FFT为例给出相应的代码:
clc;
clear all;
addpath(genpath(pwd));
sim_options = struct(...
'MODE', '2k' ... %fft模式 1k 2k 4k 8k
);
tx_nFrame=1;
%------------------------------------------------------------------------------
% Parameters Definition
%------------------------------------------------------------------------------
switch sim_options.MODE
case '1k'
NFFT = 1024; % FFT number of points
case '2k'
NFFT = 2048; % FFT number of points
case '4k'
NFFT = 4096