本节将介绍编译MATLAB到FPGA的方法与设计流程。
System Generator通过使用MCode模块提供了对MATLAB的直接支持。MCode模块将输入值应用到M-函数,用于对使用Xilinx定点数据类型的评估,且在每个采样的周期内进行评估。模块通过使用永久的状态变量来保持内部的状态。模块的输入端口是由M-函数指定的输入变量决定的,输出端口是由M-函数的输出变量决定的。这个模块为构建有限状态机和控制逻辑等模块提供了一个便捷的方法。
本节将通过MCode构建两个滤波器模块,并将两个模块的计算结果进行比较。
1.simple_fir函数 ( 见代码清单4-2 )
代码清单4-2 simple_fir函数
2.fir_transpose函数 ( 见代码清单4-3 )
代码清单4-3 fir_transpose函数
注 :预先设计这两个函数,并将其保存在E:\fpga_example_example\model_design\mcode_model路径下。
本节将构建一个系统模型,主要步骤包括:
(1)在Windows 7主界面下,选择开始->所有程序->Xilinx Design Tools->Vivado 2017.2->System Generator->System Generator 2017.2,打开MATLAB R2016b。
(2)在MATLAB主界面的工具栏下打开Simlink工具箱。
(3)在Simulink主界面的主菜单下,选择File->New->Model,建立一个新的模型。
(4)在“Simulink Library Browser”主界面的“Libraries”窗口下,找到并展开“Xilinx Blockset”。在展开项中,找到并单击Math符号,在窗口右边出现数学运算元件。
图4.24 MCode元件
(5)在该界面下,找到图4.24所示的MCode元件,并将其拖入新模型的设计界面中。
注 :读者可以参考已经设计完成的图4.25。
(6)类似地,在该界面下,找到图4.24所示的MCode元件,再次将其拖入新模型的设计界面中。
注 :读者可以参考已经设计完成的图4.25。
(7)在“Simulink Library Browser”主界面的“Libraries”窗口下,找到并展开“Xilinx Blockset”。在展开项中,找到并单击“Basic Elements”。在右侧窗口中找到Gateway In元件,并将其拖入新模型的设计界面中。
注 :读者可以参考已经设计完成的图4.25。
(8)在“Simulink Library Browser”主界面的“Libraries”窗口下,找到并展开“Xilinx Blockset”。在展开项中,找到并单击“Basic Elements”。在右侧窗口中找到Gateway Out元件,将其分两次拖入新模型的设计界面中。
注 :读者可以参考已经设计完成的图4.25。
(9)在“Simulink Library Browser”主界面的“Libraries”窗口下,找到并展开“Simulink”。在展开项中,找到“Sources”,在右边窗口找到Band-Limited White Noise元件,并将其拖入图4.25所示的界面中。
图4.25 完成后的系统结构
(10)在“Simulink Library Browser”主界面的“Libraries”窗口下,找到并展开“Simulink”。在展开项中,找到“Sinks”。在右边窗口找到Scope元件,将其拖入图4.25所示的界面中。
(11)在“Simulink Library Browser”主界面的“Libraries”窗口下,找到并展开“Xilinx Blockset”。在展开项中,找到“Basic Elements”。在右边窗口找到System Generator Token元件,将其拖入图4.25所示的界面中。
(12)双击图4.25中的MCode元件,打开其参数设置界面。如图4.26所示,单击“Basic” 标签。在该标签页下,单击 按钮。定位到 E:\fpga_dsp_example\model_design\mcode_model\simple_fir.m路径下。这样,就可以在 “MATLAB function” 标题下看到“simple-fir”。
图4.26 “Basic”标签页(1)
(13)单击“Interface”标签,如图4.27所示。在该标签页下,按图4.27中所示的设置参数。
图4.27 “Interface”标签页(1)
(14)单击“Advanced”标签,在该标签页下,勾选“Enable printing with disp”前面的复选框。
(15)单击“OK”按钮。
(16)双击图4.25中下面的MCode元件,打开其参数设置界面。如图4.28所示,单击“Basic” 标签。在该标签页下,单击 按钮,定位到 E:\fpga_dsp_example\model_design\mcode_model\fir_transpose.m路径下。这样,就可以在 “MATLAB function” 标题下看到 “fir_transpose”。
图4.28 “Basic”标签页(2)
(17)单击“Interface”标签,如图4.29所示。在该标签页下,按图4.29中所示的设置参数。
图4.29 “Interface”标签页(2)
(18)单击“Advanced”标签,在该标签页下,勾选“Enable printing with disp”前面的复选框。
(19)单击“OK”按钮。
(20)双击图4.25内的Scope元件,将“Number of axis”设置为3。
(21)将模型中的各个元件连接在一起,如图4.25所示。
注 :读者可以按照图4.25修改各个元件的名字。
下面对设计模型进行仿真。系统模型进行仿真的步骤主要包括:
(1)在Simulink主界面工具栏内的输入框中输入“100”。
(2)在Simulink主界面的工具栏内单击 按钮,开始仿真。
(3)在图4.25中单击Scope元件。打开“Scope”窗口,观察仿真的结果,如图4.30所示。
(4)退出“Scope”窗口。
图4.30 仿真的结果