前言
随着设计的复杂性增加,基于 RTL(寄存器传输级)设计的难度也在不断增加,为更快更便捷地设计出DSP算法模型,使用system generator工具可以很好地完成Matlab与Vivado的联合设计。
一、基于MATLAB初步实现DSP算法
此处,主要通过matlab脚本完成DSP中基本的矩阵运算,例如,乘法(Multiply)、加法(Add)、延时(Delay)等等。
clc; clear all; close all;
%% System parameters
N = 1024; % Number of Sample(deepth of data)
Fs = 10e3; % kHz, Sample Frequency
Ts = 1 / Fs; % Period
%% Input signal parameters
A = 1;
t = (0 : N-1) * Ts;
f = 50; % Hz
n = Fs / f; % data deepth per period
x = A * sin (2*pi*f*t); % generate test input signal
figure(1)
plot(t, x);
hold on;
%% Mulitply, add, delay
C = 2;
D = n / 2;
% y_0 = C * x;
% allocating memory
y_0 = zeros(1, N);
y_1 = zeros(1, N);
y = zeros(1, N);
for i = 1 : N
y_0(i) = C * x(i); % Multiply
% Delay
if (i > D)
y_1(i) = y_0(i-D);
end
% Add
y(i) = y_0(i) + y_1(i);
end
% Add
% y = y_0 + y_1;
figure(1)
plot(t, y);
legend("Input Signal", "Output Signal");
二、 基于MATLAB中simulink实现电路基本功能模块
创建simulink文件
保存模型
模型创建
将以上元件拖至右边编辑窗口
个人修改如下(此处请根据个人需求修改相关参数)
修改元件名称
根据设计需求选择合适的模块(本次实例选用延时、加法和乘法模块)
将基本模块按照程序设计思路进行连接
从simulink中选择信号发生模块
输出结果展示
根据要求修改m文件
添加如下程序
使用示波器查看输入信号是否符合要求
运行m文件
比较二者图像,检查输入信号是否一致
输入验证完成后,配置其他参数
调整输入输出数据长度为32位,16位小数位
运行simulink仿真,比对实验结果
完成以上步骤后即可生成verilog文件
三、在Vivado中验证实验的准确性
打开Vivado软件
打开工程,找到保存路径
综合网表文件
综合完成后,取消下一步,进行仿真
设置仿真波形为模拟波形
设置模拟波形和显示数据类型
同样,将输出设置为模拟量
三、Simulink修改以便下载至开发板
添加ROM模块
添加计数器模块
设置ROM相关参数
设置计数器的相关参数
运行Simulink仿真结果如下图所示
生成Vivado工程文件
在Vivado中打开新生成的工程文件
添加 ILA 的 IP 核
在顶层文件中连接 ILA
进行RTL分析
Windows --> I/O Ports
根据开发板用户手册设置引脚分配相关参数
生成bit流文件