着眼于Xilinx Zynq平台
本示例展示了如何使用硬件-软件协同设计工作流在Xilinx®Zynq®ZC702评估套件上以不同频率闪烁led。
简介
这个例子是一个循序渐进的指南,帮助您使用HDL Coder™来生成一个自定义HDL IP核,它可以在Xilinx Zynq ZC702评估套件上闪烁LED,并展示如何使用Embedded Coder®来生成运行在ARM®处理器上的C代码来控制LED闪烁频率。
您可以使用MATLAB®和Simulink®设计金宝app、模拟和验证应用程序,使用算法执行假设场景,并优化参数。然后,您可以通过决定哪些系统元素将由可编程逻辑执行,哪些系统元素将在ARM Cortex-A9上运行,从而为Zynq-7000 AP SoC上的硬件和软件实现准备设计。
使用本例中显示的指导工作流,您可以使用HDL Coder为可编程逻辑自动生成HDL代码,使用Embedded Coder为ARM生成C代码,并在Xilinx Zynq平台上实现设计。
在此工作流中,执行以下步骤:
设置Zynq硬件和工具。
将设计划分为硬件和软件实现。
使用HDL工作流顾问生成HDL IP核。
将IP核整合到Xilinx Vivado项目中,并为Zynq硬件编程。
生成软件接口模型。
从软件接口模型生成C代码,并在ARM Cortex-A9处理器上运行。
使用外部模式优化参数并从Zynq硬件获取结果。
有关更多信息,请参考其他更高级的示例,以及HDL Coder和Embedded Coder文档。
需求
Xilinx Vivado设计套件,其支持版本列在金宝appHDL编码器文档
Xilinx Zynq-7000 SoC ZC702评估试剂盒
Xilinx Zyn金宝appq平台的HDL编码器支持包
Xilinx Zynq平台嵌入金宝app式编码器支持包
设置Zynq硬件和工具
1.设置Xilinx Zynq ZC702评估试剂盒,如下图所示。要了解更多关于ZC702硬件设置,请参阅Xilinx文档.
1.1.确保SW16
开关设置如下图所示,因此您可以从SD卡引导Linux。
1.2.确保SW10
开关(JTAG链输入选择二位拨码开关)设置如下图所示,所以可以使用Digilent USB-to-JTAG接口(U23)。位置1:关;位置2:开启。
1.3使用Micro-USB电缆将计算机连接到USB UART连接器。确保正确安装了USB设备驱动程序,例如Silicon Labs CP210x USB to UART桥接程序。如果没有,请在网上搜索并安装驱动程序。
1.4使用以太网线连接你的电脑和Zynq板。
2.如果你还没有安装Xilinx Zynq平台的HDL编码器和嵌入式编码器支持包。金宝app要启动安装程序,请转到MATLAB工具条并单击附加组件>获取硬件支持包金宝app.有关更多资料,请参阅金宝app支持包安装文档.
3.请确保您使用的是Xilinx Zynq平台嵌入式编码器支持包提供的SD卡映像。金宝app如需更新SD卡映像,请参阅硬件设置部分本文件的。
4.在MATLAB命令窗口中输入以下命令设置Zynq硬件连接:
H = zynq
的zynq
功能通过COM口登录硬件,运行ifconfig
命令获取单板IP地址。此函数还测试以太网连接。
5.您可以选择使用PuTTY™等程序使用以下配置测试串行连接。波特率:115200
;数据位:8
;停止位:1
;奇偶校验:没有一个
;流控制:没有一个
.当你给Zynq板上电时,你应该能够在串口控制台上观察到Linux引导日志。方法之前,必须关闭此串行连接zynq
函数了。
6.在MATLAB命令窗口中使用以下命令设置Xilinx Vivado合成工具路径。运行该命令时,请使用自己的Vivado安装路径。
hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath', 'C:\Xilinx\Vivado\2019.1\bin\ Vivado .bat');
将设计划分为硬件和软件实现
Zynq硬件-软件协同设计工作流的第一步是决定设计的哪些部分要在可编程逻辑上实现,哪些部分要在ARM处理器上运行。
将您想要在可编程逻辑上实现的所有块分组到一个原子子系统中。这个原子子系统是硬件-软件分区的边界。该子系统内部的所有块将在可编程逻辑上实现,而该子系统外部的所有块将在ARM处理器上运行。
在本例中,是子系统led_counter是硬件子系统。它模拟了一个计数器,使FPGA板上的led闪烁。两个输入端口,Blink_frequency而且Blink_direction,是决定LED闪烁频率和方向的控制端口。子系统之外的所有块led_counter用于软件实现。
在Si金宝appmulink中,您可以使用滑块获得或手动开关块来调整硬件子系统的输入值。在嵌入式软件中,这意味着ARM处理器通过写入AXI接口可访问寄存器来控制生成的IP核。硬件子系统的输出端口,领导,连接LED硬件。输出端口,Read_Back,可用于将数据读回处理器。
open_system (“hdlcoder_led_blinking”);
使用HDL工作流顾问生成HDL IP核
使用HDL workflow Advisor中的IP Core Generation工作流,您可以从Simulink模型自动生成可共享和可重用的IP Core模块。金宝app生成的IP核被设计为连接到FPGA设备上的嵌入式处理器。HDL Coder从Simulink块生成HDL代码,也为连接IP核和嵌入式金宝app处理器的AXI接口逻辑生成HDL代码。HDL Coder将所有生成的文件打包到一个IP核文件夹中。然后可以将生成的IP核与Xilinx Vivado环境中的更大的FPGA嵌入式设计集成在一起。
1.启动IP核生成工作流。
1.1.中打开HDL Workflow Advisorhdlcoder_led_blinking / led_counter
的led_counter
子系统和选择HDL代码>HDL工作流顾问.
1.2.在设定目标>设置目标设备和合成工具任务,为目标工作流程中,选择IP核生成.
1.3.为目标平台中,选择Xilinx Zynq ZC702评估试剂盒.如果没有此选项,请选择得到更多的打开“支持包安装程序”。金宝app在“支持包安装金宝app程序”中,选择Xilinx Zynq Platform,并按照“支持包安装程序”提供的说明完成安装。
1.4.点击运行此任务运行设置目标设备和合成工具的任务。
1.5在设定目标>设定目标参考设计任务,选择默认的系统.
1.6.点击运行此任务运行设定目标参考设计的任务。
2.配置目标接口。
将DUT中的每个端口映射到一个IP核心目标接口。本例中为输入端口Blink_frequency而且Blink_direction映射到AXI4-Lite接口,因此HDL Coder为它们生成AXI接口可访问寄存器。的领导输出端口映射到外部接口,led通用用途[0:7],连接到Zynq板上的LED硬件。
2.1在设定目标>设置目标接口任务,选择AXI4-Lite为Blink_frequency,Blink_direction,Read_back.
2.2选择led通用用途[0:7]为领导.
2.3在设定目标>设定目标频率任务,选择目标频率为50 MHz.
3.生成IP Core
生成IP核时,右键单击生成RTL代码和IP核任务和选择运行到选定任务.
4.生成并查看IP核报表。
生成自定义IP核后,IP核文件在ipcore项目文件夹中的文件夹。与自定义IP核一起生成HTML自定义IP核报表。该报表用于描述生成的自定义IP核的行为和内容。
将IP核与Xilinx Vivado环境集成
在这部分工作流程中,您将生成的IP核插入到嵌入式系统参考设计中,生成FPGA比特流,并将比特流下载到Zynq硬件。
参考设计是预定义的Xilinx Vivado项目。它包含Xilinx软件将你的设计部署到Zynq平台所需的所有元素,除了你生成的自定义IP核和嵌入式软件。
1.要与Xilinx Vivado环境集成,请选择创建项目下任务嵌入式系统集成,并单击运行此任务.生成了一个具有IP Integrator嵌入式设计的Xilinx Vivado项目,并在对话框窗口中提供了到该项目的链接。您可以选择打开项目来查看。
2.如果你有嵌入式编码器许可证,你可以在下一个任务中生成软件接口模型,生成软件接口模型.软件接口模型的细节将在本例的下一节“生成软件接口模型”中解释。
3.构建FPGA位流构建FPGA位流的任务。确保在外部运行构建过程选项被选中,因此Xilinx合成工具将在独立于MATLAB的进程中运行。在外部命令窗口中等待合成工具进程运行完成。
4.生成比特流后,选择程序目标设备的任务。选择下载为编程方法将FPGA比特流下载到Zynq板上的SD卡上,这样当您为Zynq板上电循环时,您的设计将自动重新加载。点击运行此任务为Zynq硬件编程。
在对FPGA硬件编程后,Zynq板上的LED开始闪烁。
接下来,您将生成C代码在ARM处理器上运行,以控制LED闪烁的频率和方向。
生成软件接口模型
在HDL Workflow Advisor中,在生成IP核并将其插入Vivado参考设计之后,您可以在嵌入式系统集成>生成软件接口模型的任务。
软件接口模型包含在软件中运行的部分设计。它包括HDL子系统之外的所有块,并用AXI驱动程序块替换HDL子系统。如果您拥有Embedded Coder许可证,您可以从软件接口模型自动生成嵌入式代码,构建它,并在ARM处理器上的Linux上运行可执行文件。生成的嵌入式软件包括由AXI驱动程序块生成的控制HDL IP核的AXI驱动程序代码。
运行生成软件接口模型任务,并查看生成了一个新模型。任务对话框显示了到模型的链接。
在生成的软件接口模型中,将“led_counter”子系统替换为生成ARM处理器与FPGA之间接口逻辑的AXI驱动模块。
在Zynq ZC702硬件上运行软件接口模型
在这部分工作流程中,您配置生成的软件接口模型,自动生成嵌入式C代码,并以外部模式在Zynq硬件中的ARM处理器上运行您的模型。
在创建原型并开发算法时,在算法在硬件上运行时监视和调优算法是很有用的。Simulink中的外部模式特性启用了此功能。金宝app在这种模式下,你的算法首先被部署到Zynq硬件中的ARM处理器上,然后通过以太网连接到主机上的Simulink模型。金宝app
Simulink模型的主要作用是调优和监控金宝app运行在硬件上的算法。由于ARM处理器通过AXI接口连接到HDL IP核,您可以使用外部模式来调优参数,并从FPGA捕获数据。
在生成的模型中,单击Hardware窗格并转到硬件设置打开配置参数对话框。
选择解算器并将“停止时间”设置为“inf”。
从硬件窗格,单击监视和调优单击模型工具条上的按钮,以外部模式在Zynq ZC702硬件的ARM处理器上运行模型。Embedded Coder构建模型,下载ARM可执行文件到Zynq ZC702硬件,执行它,并将模型连接到运行在Zynq ZC702硬件上的可执行文件。
双击滑块获得块。改变滑块增益值,观察Zynq ZC702硬件上LED阵列闪烁频率的变化。双击手动开关块切换闪烁led灯的方向。
对象连接的作用域Read_back并观察FPGA IP核的输出数据被捕获并发送回Simulink作用域。金宝app
当您完成模型参数的更改时,单击停止按钮在模型上。注意,在上一步中打开的系统命令窗口表明模型已经停止。此时,您可以关闭系统命令窗口。
总结
本示例展示了硬件和软件协同设计工作流如何帮助将MATLAB和Simulink设计自动化部署到Zynq-7000全可编程SoC。金宝app您可以通过遍历工作流来探索划分和部署设计的最佳方法。
下面的图表显示了您在本例中所经历的工作流的高级图片。如欲进一步了解硬件及软件协同设计工作流程,请参阅HDL编码器文档.