第五章 搭建ZYNQ视频图像处理系统——软件设计
5.1导出硬件平台
ZYNQ的软件设计是在硬件平台的基础上进行的,因此需要将我们在前两章完成的硬件设计导出为Hardware Platform。首先在工程目录中新建一个名为“Vitis”的文件夹,作为后续软件开发的工作空间,如下图所示:
图 5.1.1 新建Vitis文件夹
在Vivado工程界面点击菜单栏中的File,然后在下拉列表中选择“Export > Export Hardware”,如下图所示:
图 5.1.2 导出硬件
在弹出的向导界面中点击Next:
图 5.1.3 导出硬件平台向导界面
由于在前面的硬件设计中,我们使用了PL端的资源,因此需要将编译生成的BIT流文件包含到硬件平台中。在下图所示的界面中选择“Include bitstream”,然后点击Next:
图 5.1.4 选择包含BIT流
接下来选择导出的路径,将硬件平台文件导出到新建的Vitis文件夹中,如下图所示:
图 5.1.5 选择导出路径
最后确认导出信息,可以看到硬件平台会以.xsa的文件格式保存到Vitis文件夹中,同时还包含了bitstream文件。确认无误后点击右下角的Finish,如下图所示:
在成功导出硬件平台后,在工程目录下的Vitis文件夹中可以看到生成的.xsa文件,如下图所示:
图 5.1.7 导出的硬件平台文件
5.2创建软件平台
在第二章《Vivado的下载与安装》中,我们选择安装了完整版的Vitis,它同时包含了传统的Vitis(classic Vitis IDE)和全新的Vitis unified IDE。全新的Vitis unified软件平台将AMD的各种软件开发功能集成到了统一的开发环境中,支持Vitis嵌入式软件开发和Vitis应用加速开发。
但是,2024.2版本的Vitis unified IDE部分功能尚未完善,因此这里我们使用Vitis Classic版本进行ZYNQ VIP系统的软件设计。在桌面上双击Vitis Classic 2024.2的图标打开软件,如下图所示:
图 5.2.1 使用传统Vitis IDE进行软件开发
注意:通过在Vivado的菜单栏中选择Tools > Launch Vitis IDE方式打开的是新版的Vitis软件,并非Classic版本!
Classic Vitis启动之后,在下图所示的界面中选择工程目录下的Vitis文件夹,作为软件开发的工作空间(Workspace):
图 5.2.2 选择工作空间的路径
然后会弹出一个警告,提示Classic版本的Vitis以后会被新版本(Vitis Unified)所取代,这里我们选择继续使用Classic版本,如下图所示:
图 5.2.3 继续使用Classic Vitis
Vitis打开之后,在菜单栏依次点击File > New > Application Project,创建一个新的应用工程:
图 5.2.4 在Vitis中创建应用工程
在欢迎界面中直接点击Next:
图 5.2.5 欢迎界面
然后在Platform界面中,点击标签“Create a new platform from hardware (XSA)”,即创建一个新的平台,并选择Vitis文件夹中的DL_ZYNQ_VIP_SYSTEM_wrapper.xsa文件,最后点击Next:
图 5.2.6 选择导出的硬件
接下来输入应用工程的名称“Hello_World”,然后点击Next:
图 5.2.7 输入工程名Hello World
然后在Domain界面中默认会创建一个新的domain(域),直接点击Next即可:
图 5.2.8 创建一个新的域
最后在Templates界面左侧选择Hello World模板,并点击Finish完成应用工程的创建,如下图所示:
图 5.2.9 选择Hello World模板
创建完成的Hello World应用工程如下图所示:
在图 5.2.10左侧的Exploreer栏,双击src目录下的helloworld.c文件可以查看其源码。源码如下图所示:
在helloworld.c源码的第22行包含了一个名为"xil_printf.h"的头文件,其中定义了一个名为print( const char8 *ptr)的函数,可用于打印字符串。如代码第29行所示,通过在main函数中调用print()函数即可打印出字符串"Hello World "。
在图 5.2.11左侧Explorer栏选中应用工程Hello_World后点击鼠标右键,在弹出的菜单栏中选择Build Project,对工程进行编译。
工程编译完成后,在下方控制台Console中会打印出如下信息:
图 5.2.12 Hello World工程编译完成
5.3Hello World初体验
5.3.1链接ZYNQ开发板
首先我们将USB数据线与征服者开发板左下角的Type C接口相连接,通过该接口可以为板卡供电,同时还可以用于JTAG下载,以及UART串口通信。开发板Type C接口的连接如下图所示:
注意开发板上的“编程模式开关”的设置,将上下两个拨码开关均拨到左侧(即使用JTAG模式下载),如图 5.3.1中红色圆圈所指示。最后将USB数据线的另外一端连接到电脑上的USB接口。
5.3.2打开串口终端
在Vitis IDE的菜单栏中选择Window > Show View,如下图所示:
图 5.3.2 打开Show View
在Show View窗口中找到Terminal,并点击Open打开终端界面,如下图所示:
图 5.3.3 打开终端界面
在Vitis IDE右下角的Terminal窗口中点击下图中红色箭头所指的图标,打开一个终端:
在弹出的窗口中选择串口终端Serial Terminal,如下图所示:
图 5.3.5 选择串口终端
接下来对串口终端进行设置。首先,在Port一栏选择开发板Type C接口所对应的串口端口。在磊哥的电脑上开发板对应的端口为COM14,读者需要根据自己电脑上实际的端口进行选择。然后在Baud Rate一栏将波特率设置为115200,其他选项保持默认,如下图所示:
图 5.3.6 设置串口终端
在选择串口端口时,Port下拉列表中可能会看到多个可选端口。如果你不确定应该选哪个,可以先把电脑上用于连接开发板的USB线拔下来,观察Port端口列表中都有哪些端口;然后重新插上USB线,再次观察端口列表,多出来的端口即为连接至开发板的串口。
串口端口连接成功后可以在Terminal窗口看到终端的连接信息:
5.3.3下载程序
在Vitis IDE左侧的Explorer中右键点击hello_world工程,在弹出的菜单栏中选择Run as > Run Configurations,如下图所示:
图 5.3.8 打开下载界面
在配置界面的左上角双击第一项Single Application Debug,并在右侧Target Setup标签页中确认已经勾选了“Reset entire system”,如下图所示:
图 5.3.9中的红色方框指示出即将下载到ZYNQ开发板中的两个文件,第一个是硬件设计过程中生成的Bitstream文件,用于对PL端进行编程;第二个是软件设计过程生成的可执行文件Hello_World.elf,用于对PS进行编程。确认无误后,点击右下角的Run运行程序。
在下载过程中,首先使用Bitstream文件对PL端进行编程,如下图所示:
图 5.3.10 对PL端进行编程
Bitstream文件下载完成后,开发板上的FPGA配置指示灯会点亮,如下图所示:
图 5.3.11 FPGA配置指示灯点亮
接下来,继续下载可执行文件Hello_World.elf。下载完成后,PS中的应用程序会将字符串“Hello World”通过PS端的串口发送到上位机。在Vitis IDE的串口终端中可以查看接收到的字符串,如下图所示:
图 5.3.12 程序运行结果
到这里,我们已经通过Hello World实验,初步体验了ZYNQ的软件设计与下载流程。在下一章,我们将对ZYNQ VIP系统的图像采集与显示功能进行验证。