主要内容

从MATLAB基本HDL代码生成和FPGA合成

这个例子展示了如何创建一个高密度脂蛋白编码器™项目,为你的MATLAB生成代码设计和合成HDL代码。在本例中,您:

  1. 创建一个MATLAB HDL编码项目。

  2. 设计和试验台文件添加到项目中。

  3. 启动HDL工作流MATLAB设计顾问。

  4. 定点运行转换和HDL代码生成。

  5. 从MATLAB生成HDL试验台试验台。

  6. 验证使用高密度脂蛋白HDL代码生成模拟器。这个示例使用ModelSim®工具。

  7. 合成生成的HDL代码通过使用合成工具。这个示例使用Xilinx®Vivado®工具。

冷杉过滤器MATLAB设计

MATLAB设计mlhdlc_sfir是一个简单的对称冷杉过滤器。

design_name =“mlhdlc_sfir”;testbench_name =“mlhdlc_sfir_tb”;

回顾MATLAB设计。

打开(design_name);
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %% MATLAB设计:对称冷杉过滤器%%的介绍:%%我们可以减少冷杉的复杂性过滤器利用其对称性。%的对称n-tap过滤器所暗示的,系数h0 = hn-1系数,h1 = %系数,系数hn-2等等。在这种情况下,数量的%乘数可以大约减半。关键是要添加的%两个数据值需要乘以系数是相同的%之前执行乘法。%%的关键设计模式在这个例子:%(1)过滤器使用持久性变量来表示%(2)滤波器系数作为参数传递% 2011 - 2019版权MathWorks公司。% # codegen函数[y_out, delayed_xout] = mlhdlc_sfir (x_in、h_in1 h_in2, h_in3, h_in4)%对称冷杉过滤器%声明和初始化延迟寄存器持续的ud1 ud2 ud3 ud4 ud5 ud6 ud7 ud8;如果isempty (ud1) ud1 = 0;ud2 = 0;ud3 = 0;ud4 = 0;ud5 = 0;ud6 = 0;ud7 = 0;ud8 = 0;结束%访问国家的前一个值/寄存器a1 = ud1 + ud8;a2 = ud2 + ud7;a3 = ud3 + ud6;a4 = ud4 + ud5;%乘数链m1 = h_in1 * a1;m2 = h_in2 * a2;m3 = h_in3 * a3;m4 = h_in4 * a4;%加法器链a5 = m1 + m2;a6 = m3 + m4;%过滤输出y_out = a5 + a6;% delayout输入信号delayed_xout = ud8;%更新延迟线ud8 = ud7;ud7 = ud6;ud6 = ud5;ud5 = ud4;ud4 = ud3;ud3 = ud2;ud2 = ud1;ud1 = x_in;结束

冷杉过滤MATLAB试验台

一个MATLAB testbenchmlhdlc_sfir_tb练习过滤器设计通过使用一个代表输入范围。回顾MATLAB试验台mlhdlc_sfir_tb

打开(testbench_name);
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %% MATLAB试验台的冷杉过滤器% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %% 2011 - 2019版权MathWorks公司。清晰的mlhdlc_sfir;T = 2;dt = 0.001;N = T / dt + 1;sample_time = 0: dt: T;df = 1 / dt;sample_freq = linspace (1/2, 1/2, N)。* df;%输入信号与噪声x_in = cos(2。*π。* (sample_time)。* (1 + (sample_time)。* 75))。”;%滤波器系数h1 = -0.1339;h2 = -0.0838;h3 = 0.2026;h4 = 0.4064;len =长度(x_in);len y_out = 0 (1);len x_out = 0 (1);2 = 1:len data = x_in (ii);%调用“mlhdlc_sfir”,是针对硬件设计[y_out (ii), x_out (ii)] = mlhdlc_sfir(数据,h1, h2, h3, h4);结束图(“名字”(mfilename“_plot”]);次要情节(1,1);阴谋(1:len x_in,“- b”);包含(“时间(ms)”)ylabel (“振幅”)标题(的输入信号(噪声))次要情节(3、1、2);阴谋(1:len y_out,“- b”);包含(“时间(ms)”)ylabel (“振幅”)标题(的输出信号(过滤))freq_fft = @ (x) abs (fftshift (fft (x)));次要情节(3,1,3);semilogy (sample_freq freq_fft (x_in),“- b”);持有semilogy (sample_freq freq_fft (y_out),“- r”)举行包含(的频率(赫兹))ylabel (“振幅(dB)”)标题(的输入和输出信号(频域))({传奇“FilterIn”,“FilterOut”},“位置”,“南”轴((-500 500 100))

测试原MATLAB算法

为避免运行时错误,模拟试验台的设计使用。

mlhdlc_sfir_tb

创建一个文件夹,复制有关文件

示例文件复制到一个临时文件夹,运行这些命令:

design_name =“mlhdlc_sfir”;testbench_name =“mlhdlc_sfir_tb”;

创建一个临时文件夹

mlhdlc_demo_dir = fullfile (matlabroot,“工具箱”,“hdlcoder”,“hdlcoderdemos”,“matlabhdlcoderdemos”);mlhdlc_temp_dir = [tempdir“mlhdlc_sfir”];cd (tempdir);(~,~,~)=删除文件夹(mlhdlc_temp_dir,“年代”);mkdir (mlhdlc_temp_dir);cd (mlhdlc_temp_dir);

MATLAB文件副本。

拷贝文件(fullfile (mlhdlc_demo_dir design_name,“m *”]),mlhdlc_temp_dir);拷贝文件(fullfile (mlhdlc_demo_dir testbench_name,“m *”]),mlhdlc_temp_dir);

建立高密度脂蛋白模拟器和合成路径工具

如果你想合成生成的HDL代码,在你使用HDL编码器生成代码,设置路径合成工具。设置路径合成工具,使用hdlsetuptoolpath函数。例如,如果您的合成工具Xilinx Vivado:

hdlsetuptoolpath (“ToolName”,“Xilinx Vivado”,“路径”,“C: \ Xilinx \ Vivado \ 2018.3 \ bin \ vivado.bat ');

你必须已经安装了Xilinx Vivado。查看Xilinx Vivado合成工具设置,启动该工具运行这条命令:

vivado !

如果你想模拟生成的HDL代码通过使用HDL试验台,您可以使用一个高密度脂蛋白模拟器等ModelSim®。你必须已经安装了HDL模拟器。

创建一个高密度脂蛋白编码器项目

创建一个高密度脂蛋白编码器项目:

1。通过运行这个命令创建一个项目:

编码器-hdlcoder不管是新sfir_project

2。为MATLAB函数,添加MATLAB设计mlhdlc_sfir。添加mlhdlc_sfir_tb.mMATLAB试验台。

3所示。点击Autodefine类型并使用MATLAB设计推荐的类型。代码生成器通过运行试验台推断数据类型。

创建定点版本的算法和试验台

  1. 单击工作流的顾问按钮打开工作流顾问。你看到定义输入类型任务已经过去了。

  2. 运行定点转换的任务。的定点转换在右窗格中打开的工具。

当您运行定点转换,提出分数浮点数据类型的长度,高密度脂蛋白编码器使用默认字长。在本教程中,默认字长14。顾问提供一个默认模拟最小/最大的安全裕度0%。顾问调整范围数据的安全系数。例如,值4至少指定你想要的4更大的百分比。另请参阅浮点定点转换

选择代码生成选项和生成HDL代码

在生成HDL代码之前,如果你想将代码部署到目标平台,指定合成工具。在目标代码生成任务,离开工作流通用ASIC / FPGA并指定Xilinx Vivado随着合成工具。如果您没有看到合成工具,点击刷新列表。运行这个任务。

HDL代码生成任务,通过使用标签右侧的这个任务,您可以指定额外的代码生成选项。

  1. 默认情况下,HDL编码器生成VHDL®代码。生成Verilog代码,目标选项卡中,选择Verilog随着语言

  2. 生成的代码生成报告的评论和跟踪链接,编码风格选项卡上,选择包括MATLAB源代码注释和“生成报告*。

  3. 优化你的设计,你可以使用分布式流水线优化。在优化选项卡中,指定1输入管道输出管道然后选择寄存器分配管道。欲了解更多,请看分布式流水线

  4. 点击运行来生成Verilog代码。

检查日志窗口并单击链接来探索生成的代码和报告。

产生高密度脂蛋白试验台,模拟生成的代码

HDL编码器生成一个高密度脂蛋白试验台,通过高密度脂蛋白HDL试验台模拟器,并验证高密度脂蛋白仿真是否匹配的数字和延迟定点MATLAB仿真。

生成一个高密度脂蛋白试验台,模拟生成的代码,高密度脂蛋白HDL试验台验证>验证任务:

  1. 输出设置选项卡上,选择产生高密度脂蛋白试验台

  2. 模拟生成的试验台,设置仿真工具ModelSim。你必须已经安装了ModelSim。

  3. 指定代HDL试验台代码和试验台数据在单独的文件中,试验台的选项选项卡上,选择多文件试验台

  4. 单击运行按钮。

任务生成一个高密度脂蛋白试验台,模拟了定点设计通过使用选定的模拟工具,并生成一个编译和仿真报告。

合成HDL代码生成

高密度脂蛋白编码器在目标平台上综合HDL代码并生成区域和时间为你的设计报告根据您指定的目标设备。

合成生成的HDL代码:

1。运行创建项目的任务。

这个任务创建一个Xilinx Vivado合成项目HDL代码。高密度脂蛋白编码器使用这个项目在未来任务合成设计。

2。选择并运行运行合成的任务。

这个任务在后台启动合成工具,打开合成项目,编译HDL代码,综合设计,并生成网表和区域和时间报告。

3所示。选择并运行运行实现的任务。

这个任务在后台启动合成工具,运行地点和路线设计和生成和支应计时信息用于关键路径分析和注释的源模型。

清理生成的文件

清理临时项目文件夹,运行这些命令:

mlhdlc_demo_dir = fullfile (matlabroot,“工具箱”,“hdlcoder”,“hdlcoderdemos”,“matlabhdlcoderdemos”);mlhdlc_temp_dir = [tempdir“mlhdlc_sfir”];清晰的墨西哥人;cd (mlhdlc_demo_dir);删除目录(mlhdlc_temp_dir“年代”);