本帖最后由 1nnocent 于 2024-8-5 11:38 编辑
实现PS端通过串口输出HelloWorld功能,熟悉ZYNQ的操作流程。本次实验使用的芯片是Xilinx Zynq UltraScale+ MPSoC系列,型号为XCZU9CG FFVB1156。使用的软件:vivado2023.2、vitis2023.2。
MPSoC最小系统
MPSoC最小系统包含ARM核心,DDR4,串口(用于打印PS端运行的信息)。
step1 创建vivado工程
打开vivado2023.2后Create Project,根据提示给工程命名并选择工程存放路径,选择相应的芯片(xczu9cg-ffvb1156-2-i)。
step2 使用IP Integrate Processing System
点击Create Block Design创建Block Design并命名,点击“+”号添加Zynq UltraScale+ MPSoC IP核。
生成下图的IP核:
双击该IP核配置外设,此时IP核中maxihpm0_lpd_aclk、pl_clk0、pl_resetn0、M_AXI_HPM0_LPD等接口,这些接口在本实验中不需要,所以要将这些接口关掉。双击IP核后点击UART1,在跳出的窗口中勾选UART1并选择MIO24.25(在选择MIO时需要查看硬件原理图将需要使用的串口接到芯片的那个引脚)。
step3 生成顶层HDL
选中I/O Configuration 中设置IO bank的供电电压(需要查看硬件原理图设置相应的供电电压);选中Clock Configuration,点击Output Clocks取消“PL0”的勾选该部分给PL提供时钟,由于本实验没有使用PL端所以取消勾选。
选中DDR Configuration,根据硬件原理图使用的DDR颗粒进行相应的配置。
选中PS-PL Configuration,取消Fabric Reset Enable和AXI HPM0 LPD。
以上配置完成后点击OK得到的IP核如下图所示,之前不需要的接口都去掉了。
step4 (生成Bitstream)并导出Hardware
本次实验没有使用PL端,所以不需要生成Bitstream,右击创建的Block Design并点击Generate Output Produces。
Generate Output Produces运行完成之后右击创建的Block Design并点击Create HDL Wrapper。
点击File->Export->Export Hardware。
由于没有Bitstream所以不需要include bitstream,命名并选择保存路径。
step5 在Vitis中进行软件设计
点击Tools->Launch Vitis IDE打开Vitis进行设计。
打开vitis后点击Open Workspace选择一个路径作为工作空间,建议在vivado工程目录下新建一个Vitis文件夹,并将生成的xsa文件放到该文件夹下,将这个文件夹设置为工作空间。
单击 Vitis Unified IDE 中的“File”(文件)选项,然后选中“New Component” → “Platform”(新建组件 > 平台)。
选择给Platform命名并选择保存路径后选中xsa文件的路径。
创建完成之后左边VITIS窗口中可以看到Platform工程。
点击自带历程选择HelloWorld
命名并选择保存路径。
选择刚刚创建的Platform后一路Next直到Finish。
创建完成之后左边VITIS窗口多了一个Application文件,点击Source->Src->helloworld.c可以查看代码。
坐标FLOW窗口中选中Platform文件并进行编译。
将文件换成Application文件,进行同上的编译操作。
step6 板级验证
硬件上连接JTAG接口和UART接口,打开串口调试助手进行以下设置并打开串口:
FPGA开发板进行上电,Vitis中运行代码并观察串口输出现象。
成功运行HelloWorld程序。
结语
本实验主要是熟悉Zynq PS端的开发过程,目前网络上找到的教程都是2023.2之前的版本,从2023.2之后的Vitis的操作界面和之前差别较大,跟着网络上旧版本的操作学习时都没能实现功能,最后结合官方文档《ug1400-vitis-embedded-zh-cn-2023.2.pdf》的操作流程后终于实现了HelloWorld功能。