本节将介绍信号处理模型的构建与实现,包括信号模型的构建、模型参数的设置、信号处理模型的仿真、生成模型子系统、模型HDL代码的生成、打开生成设计文件并仿真、协同仿真的配置与实现、生成IP核。
本节将实现浮点离散数字信号模型,表示为
通过Z变换,将式(4.1)变换到Z域:
使用System Generator工具实现该模型的步骤主要包括:
(1)在Windows 7的主界面下,选择开始->所有程序->Xilinx Design Tools->Vivado 2017.2->System Generator->System Generator 2017.2,打开MATLAB R2016b集成开发环境。
(2)在MATLAB的主界面下,单击“Simulink”按钮,出现“Simulink Start Page”界面,如图4.3所示。
图4.3 “Simulink Start Page”界面
(3)在“Simulink Start Page”界面中,单击名字为“Blank Model”的图标,出现一个新的空白设计界面。
(4)在空白设计界面的工具栏中,找到并单击 (Library Browser)按钮,出现“Sim ulink Library Browser”界面。
(5)在“Simulink Library Browser”界面左侧的窗口中找到并展开“Xilinx Blockset”。在展开项中,找到并单击名字为“Floating-Point”的选项。
(6)在“Simulink Library Browser”界面右侧的窗口中,给出了可用的浮点处理元件,如图4.4所示。
图4.4 可用的浮点处理元件
(7)在图4.4给出的浮点处理元件中,找到名字为“Gateway In”和“Gateway Out”的元件,并将其拖入图4.5所示的空白界面中。
图4.5 空白界面
注 :(1)Gateway In元件支持:
① 从浮点数转换为N位Boolean类型、有符号(二进制补码)或者无符号的定点数。
② 在转换期间,提供选项管理额外的位。
③ 在System Generator生成的HDL设计中,定义了顶层输入端口的名字。
④ 当在System Generator块中选中“Create Testbench”复选框时,定义了测试平台的激励源。
(2)Gateway Out支持:
① 将System Generator产生的定点数转换为Simulink的双精度数。
② 在System Generator生成的HDL设计中,定义了顶层输出端口的名字。
(8)在图4.4提供的元件窗口中,找到名字为“Delay”的元件,并将4个Delay元件拖入图4.6所示的原理图设计界面中。
图4.6 在原理图中放置元件
(9)在图4.4提供的元件窗口中,找到名字为“CMult”的元件,并将4个CMult元件拖入图4.6所示的原理图设计界面中。
(10)在图4.4提供的元件窗口中,找到名字为“AddSub”的元件,并4个AddSub元件拖入图4.6所示的原理图设计界面中。
(11)在“Simulink Library Browser”主界面的“Libraries”窗口下找到并展开Xilinx Blockset。在展开项中,找到Basic Elements。在右侧窗口中找到名字为“System Generator”的元件符号,并将其拖入原理图设计界面中。
注 :这个符号必须出现在所有的System Generator设计中,否则在运行设计时会报错。
(12)在“Simulink Library Browser”主界面的“Libraries”窗口下找到并展开Simulink。在展开项中,找到Sources。在右侧窗口中找到名字为“Sine Wave”的元件符号,并将其拖入图4.6所示的原理图设计界面中。
(13)在“Simulink Library Browser”主界面的“Libraries”窗口下找到并展开Simulink。在展开项中,找到Sinks。在右侧窗口中找到名字为“Scope”的元件符号,并将其拖入图4.6所示的原理图设计界面中。
注 :① 双击名字为“Scope”的元件符号,打开其配置界面。在配置界面中,通过选择File->Number of Input Ports,将示波器的端口数量设置为2。
② 此外,在配置界面中,选中File->Open at Start of Simulation选项,使得在仿真结束的时候可以自动打开示波器界面。
(14)放置完所有元件后的原理图设计界面如图4.7所示。
图4.7 放置完所有元件后的原理图设计界面
(15)连接完所有元件后的原理图设计界面如图4.8所示。
(16) 保存模型。将其保存在 E:\fpga_dsp_example\model_design\basic_model\basic_model.slx路径下。
图4.8 连接完所有元件后的原理图设计界面
本节将为4.3.1节生成的最终模型设置合适的参数,其参数设置的步骤主要包括:
(1)双击图4.8内的Sine Wave符号,打开正弦信号参数设置界面,如图4.9所示。首先介绍一下该设置界面内一些参数的含义。
图4.9 正弦信号参数设置界面
① 基于时间的模式(Time based)。
在该模式下,正弦信号的输出由下式决定:
注 :该模式下有两个可以选择的子模式:连续模式和离散模式。
设置界面中,“Sample time”的值确定子模式。当该参数为0时,该模块运行在连续模式;当该参数大于0时,该模式运行在离散模式。
② 基于采样的模式(Sample based)。
基于采样的模式使用下面的公式计算正弦信号模块的输出:
其中,A是正弦信号的幅度;p是每个正弦周期的采样个数;k是重复的整数值,其范围为0~p-1;o是信号的偏置(相位移动);b是信号的直流偏置。
注 :按图4.9配置正弦信号的参数。
(2)单击“OK”按钮,退出正弦信号参数设置界面。
(3)双击图4.8中的Gateway In符号,打开参数设置界面,按如下所示设置参数。
① Output Type:Float-point。
② Floating-point Precision:Single。
③ 其他按默认参数设置。
(4)单击“OK”按钮,退出参数设置界面。
(5)在图4.8中,双击名字为“Delay1”的元件符号,打开其参数设置界面,在“Basic”标签下,设置Latency为2(延迟为2)。
(6)单击“OK”按钮,退出Delay1的参数设置界面。
(7)在图4.8中,双击名字为“Delay2”的元件符号,打开其参数设置界面,按如下所示设置参数。
在“Basic”标签下,设置Latency为3(延迟为3)。
(8)单击“OK”按钮,退出Delay2的参数设置界面。
(9)在图4.8中,双击名字为“Delay3”的元件符号,打开其参数设置界面,在“Basic”标签下,设置Latency为4(延迟为4)。
(10)单击“OK”按钮,退出Delay3的参数设置界面。
(11)在图4.8中,双击名字为“CMult”的元件符号,打开其参数设置界面,按如下所示设置参数。
① Constant value:6.0。
② Constant Type:Floating-point。
③ Floating-point Precision:Single。
④ Latency:0。
(12)单击“OK”按钮,退出CMult的参数设置界面。
(13)在图4.8中,双击名字为“CMult1”的元件符号,打开其参数设置界面,按如下所示设置参数。
① Constant value:1.5。
② Constant Type:Floating-point。
③ Floating-point Precision:Single。
④ Latency:0。
(14)单击“OK”按钮,退出CMult1的参数设置界面。
(15)在图4.8中,双击名字为“CMult2”的元件符号,打开其参数设置界面,按如下所示设置参数。
① Constant value:3.5。
② Constant Type:Floating-point。
③ Floating-point Precision:Single。
④ Latency:0。
(16)单击“OK”按钮,退出CMult2的参数设置界面。
(17)在图4.8中,双击名字为“CMult3”的元件符号,打开其参数设置界面,按如下所示设置参数。
① Constant value:4.0。
② Constant Type:Floating-point。
③ Floating-point Precision:Single。
④ Latency:0。
(18)单击“OK”按钮,退出CMult3的参数设置界面。
(19)在图4.8中,双击名字为“AddSub”的元件符号,打开其参数设置界面,在“Basic”标签下,设置Latency为0(无延迟)。
(20)单击“OK”按钮,退出AddSub的参数设置界面。
(21)在图4.8中,双击名字为“AddSub1”的元件符号,打开其参数设置界面,在“Basic”标签下,设置Latency为0(无延迟)。
(22)单击“OK”按钮,退出AddSub的参数设置界面。
(23)在图4.8中,双击名字为“AddSub2”的元件符号,打开其参数设置界面,在“Basic”标签下,设置Latency为0(无延迟)。
(24)在图4.8中,双击名字为“AddSub3”的元件符号,打开其参数设置界面,在“Basic”标签下,设置Latency为0(无延迟)。
(25)单击“OK”按钮,退出AddSub3的参数设置界面。
(26)保存该设计。
本节将对信号处理模型进行仿真。实现仿真的步骤主要包括:
(1)在设计界面工具栏内的输入框中输入45.0。
(2)在设计界面工具栏下,单击 按钮,开始仿真。
(3)仿真结果如图4.10所示。
(4)退出“Scope”窗口。
图4.10 仿真结果
本节将生成模型子系统。实现子系统的步骤主要包括:
(1) 将前面的设计另存为在E:\fpga_dsp_example\model_design\basic_model\basic_model sub_system.slx路径下。
(2)用鼠标选中黑框区域内的所有元件,如图4.11所示。
图4.11 选中黑框区域内的所有元件
(3)单击鼠标右键,出现浮动菜单。在浮动菜单内,选择“Create Subsystem From Selection”选项。
(4)包含子系统的模型如图4.12所示。
图4.12 包含子系统的模型
本节将生成设计模型的HDL代码,步骤主要包括:
(1)双击图4.11中名字为“System Generator”的元件符号,打开“System Generator:basic_model”对话框,如图4.13所示。
图4.13 “System Generator:basic_model”对话框
(2) 在“System Generator:basic_model”对话框中,按如下所示设置参数。
① Part:Artix7 xc7a75t-1 fgg484。
② Compilation:HDL Netlist。
③ Hardware description language:Verilog。
④Target directoty:./basic_model_netlist (编译目标要放在当前工程路径的/basic_model_netlist子目录中)。
⑤ Synthesis strategy:Vivado Synthesis Defaults。
⑥ Implementation strategy:Vivado Implementation Defaults。
⑦ 勾选“Create interface document”前面的复选框。
⑧ 勾选“Create testbench”前面的复选框。
(3)单击“Generate”按钮,生成模型的HDL描述和测试平台。
(4)完成对设计的综合后,出现“Compilation status”对话框。在该对话框中,提示“Generation Completed”信息,表示成功完成生成过程。
(5)单击“OK”按钮。
本节将使用Vivado 2017.2集成开发环境打开System Generator工具生成的Verilog HDL代码和测试平台。打开Verilog HDL代码的步骤主要包括:
(1)定位到E:\fpga_dsp_example\model_design\basic_model\basic_model_netlist\hdl_netlist路径下,找到并双击basic_model.v文件,该设计模型的文件结构如图4.14所示。
图4.14 设计模型的文件结构
(2)对该设计执行“Elaborate”,然后单击“Open Elaborated Design”选项,打开详细描述后的设计结构如图4.15所示。
图4.15 详细描述后的设计结构
(3) 在 “Sources” 窗口中找到并展开 “Simulation Sources”。在展开项中,找到并展开 “sim_1”。在展开项中,选中 “basic_model_tb”,如图4.16所示。
图4.16 “Sources”窗口
(4)在Vivado主界面左侧的“Flow Navigator”窗口中,找到并展开“Simulation”。在展开项中,找到“Run Simulation”,然后选择“Run Behavioral Simulation”,开始对设计进行行为级仿真。
(5)行为仿真的结果如图4.17所示。
图4.17 行为仿真的结果
(6)退出Vivado 2017.2集成开发环境。
System Generator提供了硬件协同仿真能力,这样可以使运行在FPGA上的设计导入Simulink仿真中。Hardware Co-Simulation硬件协同仿真选项用于编译目标,并且自动生成比特流,将其连接到一个模块。在Simulink中对设计进行硬件协同仿真后,就可以知道设计在硬件上的运行结果。这样,就允许在真正的硬件上测试被编译的部分,并且动态加速仿真过程。
1.添加新的编译目标
在进行协同仿真前,需要配置仿真环境参数。该仿真所使用的目标平台为作者开发的A7-EDP-1开发平台,该开发平台上搭载了Xilinx公司的xc7a75t-1 fgg484 FPGA器件。配置协同仿真环境参数的步骤主要包括:
(1)将本书所提供资料的\fgpa_example路径下的a7-edp-1文件夹复制到C:\xilinx\vivado\2017.2\data\boards\board_files路径中。
注 :该文件夹下面保存着Xilinx所支持的所有板描述文件。
(2)建立一个名字为“startup.m”的文件,在该文件中输入如代码清单4-1所示的代码。
代码清单4-1 startup.m文件
注 :该段代码用于在System Generator中加入作者开发的A7-1-EDP硬件平台。
(3) 将该文件放在C:\users\administrator\appdata\roaming\xilinx\vivado路径下。
注 :这是通过System Generator打开MATLAB的默认路径。读者可以在打开的MATLAB中看到这个默认路径。
(4)重新通过System Generator打开MATLAB集成开发环境。
(5)双击名字为“System Generator”的元件符号,打开其参数设置界面,如图4.18所示。从图4.18中可知,在“Board”下面的下拉框中新添加了名字为“a7-edp-1 0”的开发板。
图4.18 System Generator的参数设置界面(1)
(6)选中“a7-edp-1 0”,在“Compilation”下选择“Hardware Co-Simulation(JTAG)”,将“Target directory”设置为“/hw_sim1”,如图4.19所示。
2.生成协同仿真模块
本部分将生成协同仿真模块,步骤主要包括:
图4.19 System Generator的参数设置界面(2)
(1)单击图4.19中的“Generate”按钮,对所选的目标平台进行编译。
(2)编译完成后,出现“Compilation status”对话框。在该对话框中,提示“Generation Completed”信息,表示编译成功。
(3)单击“OK”按钮,生成“basic_model hwcosim”硬件协同仿真模型,如图4.20所示。
图4.20 生成“basic_model hwcosim”硬件协同仿真模块
3.协同仿真的实现
本部分将实现协同仿真,步骤主要包括:
(1)将图4.20所示的“basic_model hwcosim”硬件协同仿真模型粘贴到图4.21所示的界面中。
图4.21 系统硬件协同仿真模型
(2)如图4.21所示,将“basic_model hwcosim”硬件协同仿真模型连接到数字信号处理模型系统中,完成硬件系统仿真的整体结构设计。
(3)单击“OK”按钮。
(4)在主界面的工具栏下单击 按钮,启动硬件协同仿真。
(5)等待仿真结束后,双击Scope1符号。
(6)打开仿真结果界面,观察协同仿真的结果如图4.22所示。
图4.22 协同仿真的结果
System Generator提供了IP封装器编译目标,允许设计者将System Generator生成的设计封装到一个IP核中。这样,就可以将其包含在Vivado IP目录中。然后通过例化语句将其包含在其他设计中,作为其他设计的一部分。生成IP核的步骤主要包括:
(1) 在Simulink设计环境中,在E:\vivado_example\model_design\basic_model_ip路径下重新打开basic_model.slx文件。
(2)双击System Generator符号,打开如图4.23所示的参数设置界面,按如下所示参数设置。
图4.23 System Generator的参数设置界面
① Compilation:IP Catalog。
② Part:Artix7 xc7a75t-1 fgg484。
③ Hardware description language:Verilog。
④Target directoty:./basic_model_netlist (在当前保存工程目录下的子目录basic_model_netlist下)。
⑤ Synthesis strategy:Vivado Synthesis Defaults。
⑥ Implementation strategy:Vivado Implementation Defaults。
⑦ 勾选“Create interface document”前面的复选框。
⑧ 勾选“Create testbench”前面的复选框。
注 :单击 按钮,可以查看IP核封装的一些信息。
(3)单击“Generate”按钮,生成IP核。