第一章 体验 ARM,裸机输出“Hello World”

《ZYNQ MPSoC 开发平台 Vitis 应用教程》学习

第一章 体验 ARM,裸机输出“Hello World”


文章目录

  • 《ZYNQ MPSoC 开发平台 Vitis 应用教程》学习
  • 准备
    • 批处理下载 QSPI Flash
    • 批处理建立 Vitis 工程
  • 硬件介绍
  • FPGA流程
  • 软件流程
    • 创建 Application 工程
    • 工程使用
    • 软件下载
    • 固化程序
      • FSBL
      • 启动测试
        • SD卡启动
      • QSPI 启动
  • 常见问题


准备

软件:vivado2023.1
硬件:Xczu4ev-sfvc784-1-i

下面的批处理是一些脚本,可以看作是快捷方式,直接调用对应的程序,就不用打开vivado或者图形界面了。

批处理下载 QSPI Flash

这个调用的是program_flash 来进行程序烧写。

call E:\XilinxVitis\Vitis\2020.1\bin\program_flash -f BOOT.bin    -offset 0 -flash_type qspi-x4-single  -fsbl fsbl.elf -verify
pause

批处理建立 Vitis 工程

硬件描述文件是xx.xsa。
调用xsct.bat脚本。

call E:\XilinxVitis\Vitis\2020.1\bin\xsct.bat build_vitis.tcl
pause

硬件介绍

ZYNQ 芯片分为 PL 和 PS,PS 端的 IO 分配相对是固定的,不能任意分配,而且不需要在 Vivado 软件里分配管脚。
虽然本实验仅仅使用了 PS,但是还要建立一个 Vivado 工程,用来配置 PS 管脚。
虽然 PS 端的 ARM 是硬核,但是在 ZYNQ 当中也要将 ARM硬核添加到工程当中才能使用。
本章开始介绍 ZYNQ 的图形化方式建立工程。

FPGA流程

步骤 说明
建立工程
使用图形化方式进行设计,首先“Create Block Design” 在这里插入图片描述
点击加号添加IP,Zynq UltraScale+ MPSoC 第一章 体验 ARM,裸机输出“Hello World”_第1张图片
双击IP核进行配置,绿色部分是可配置模块,可以点击进入相应的编辑界面,当然也可以在左侧的窗口进入编辑 第一章 体验 ARM,裸机输出“Hello World”_第2张图片
I/O Configuration
Low Speed 配置
BANK0~BANK2 电压为 LVCMOS18,BANK3 电压为LVCMOS33 第一章 体验 ARM,裸机输出“Hello World”_第3张图片
勾选QSPI,并设置为”Single”模式,Data Mode为”x4“,勾选 Feedback Clk 第一章 体验 ARM,裸机输出“Hello World”_第4张图片
勾选 SD 0,配置 eMMC。选择 MIO13…22,Slot Type 选择 eMMC,Data Transfer Mode 为8Bit,勾选 Reset,并选择 MIO23 第一章 体验 ARM,裸机输出“Hello World”_第5张图片
勾选 SD 1,配置 SD 卡。选择 MIO 46…51,Slot Type 选择 SD 2.0,Data Transfer Mode 选择4Bit,勾选 CD,用于检测 SD 卡插入,选择 MIO45 这些和硬件相关的,要看接了什么设备
勾选 CAN 0,选择 MIO 38…39,勾选 CAN 1,选择 MIO 32…33
勾选 I2C 1,用于 EEPROM 等的 I2C,选择 MIO 24…25
勾选串口 UART 0,选择 MIO 42…43,勾选 GPIO1 MIO
勾选 TTC 0~TTC 3
High Speed 配置
PS 端以太网,勾选 GEM 3,选择 MIO 64…75,勾选 MDIO 3,选择MIO76…77
USB 0,选择 MIO 52…63,勾选 USB 3.0,选择 GT Lane1
PCIe,点开 Switch To Advanced Mode,选择 PCIe Configuration,修改几个参数,配置为 ROOT
模式,回到 I/O Configuration,复位选择 MIO 37 第一章 体验 ARM,裸机输出“Hello World”_第6张图片
Display Port,选择 MIO 27…30,Lane Selection 选择 Dual Higher
时钟配置
在 Clock Configuration 界面,Input Clocks 窗口配置参考时钟,其中 PSS_REF_CLOCK 为 ARM的参考时钟默认为 33.333MHz;PCIe 选择 Ref Clk0,100MHz;Display Port 选择 Ref Clk2,27MHz;USB0 选择 Ref Clk1,26MHz。
在 Output Clocks 窗口,如果不是 IOPLL,改成 IOPLL,保持一致,用同样的 PLL 第一章 体验 ARM,裸机输出“Hello World”_第7张图片
PL 的时钟保持默认,这是给 PL 端逻辑提供的时钟。
Full Power 部分,其他保持默认,将 DP_VIDEO 改为 VPLL,DP_AUDIO 和 DP_STC 改为RPLL
DDR 配置
根据设计设置ddr,连接时钟 第一章 体验 ARM,裸机输出“Hello World”_第8张图片
选择 Block 设计,右键“Create HDL Wrapper…”,创建一个 Verilog 或 VHDL 文件,为 block design 生成 HDL 顶层文件 第一章 体验 ARM,裸机输出“Hello World”_第9张图片
选择 block 设计,右键“Generate Output Products”,此步骤会生成 block 的输出文件,包括 IP,例化模板,RTL 源文件,XDC 约束,第三方综合源文件等等。供后续操作使用。 第一章 体验 ARM,裸机输出“Hello World”_第10张图片
在菜单栏“File -> Export -> Export Hardware…”导出硬件信息,这里就包含了 PS 端的配置信息。
在弹出的对话框中点击“OK”,因为实验仅仅是使用了 PS 的串口,不需要 PL 参与,这里就没有使能不选择“Include bitstream”,点击 Next,可修改导出名字以及导出路径,默认是在 vivado 工程目录下的,这个文件可以根据自己的需要在合适的位置,不一定要放在 vivado 工程下面,vivado 和 vitis 软件是独立的。 vivado 和 vitis 软件是独立的。
xsa 文件,这个文件就是这个文件就包含了 Vivado 硬件设计的信息,可交由软件开发人员使用。 软件使用xsa文件就足够了

软件流程

创建 Application 工程

步骤 说明
新建一个文件夹,将 vivado 导出的 xx.xsa 文件拷贝进来。
打开软件,Vitis 是独立的软件,可以双击 Vitis 软件打开,也可以通过在 Vivado 软件中选择 Tools->Launch Vitis IDE打开 Vitis 软件
点击“Create Application Project”,这个选项会生成 APP 工程以及Platfrom 工程,Platform 工程类似于以前版本的 hardware platform,包含了硬件支持的相关文件以及 BSP
Create a new platform from hardware(XSA) 最下面的 Generate boot components 选项,如果勾选上,软件会自动生成 fsbl 工程,我们一般选择默认勾选上。第一章 体验 ARM,裸机输出“Hello World”_第11张图片
操作系统选择 standalone,也就是裸机
选择”Hellow World”模板,点击“Finish”完成 完成之后可以看到生成了两个工程,一个是硬件平台工程,即之前所说的 Platfrom 工程,一个是 APP 工程

工程使用

步骤 说明
Platform 工程后可以看到里面包含有 BSP 工程,以及 zynq_fsbl 工程,双击 platform.spr 即可看到 Platform 对应生成的BSP 工程,可以在这里对 BSP 进行配置 第一章 体验 ARM,裸机输出“Hello World”_第12张图片
Platform 下有多个 BSP,这是跟以往的 SDK 软件不一样的,其中zynqmp_fsbl 即是 fsbl 的 BSP,domain_psu_cortexa53_0 即是 APP 工程的 BSP。
点开 BSP,即可看到工程带有的外设驱动,其中 Documentation 是 xilinx 提供的驱动的说明文档,Import Examples 是 xilinx 提供的 example 工程,加快学习。
选中 APP 工程,右键 Build Project,或者点击菜单栏的“锤子”按键,进行工程编译 编译结束,生成 elf 文件

软件下载

步骤 说明
连接串口,打开串口调试助手
启动模式设置到 JTAG 模式
选择“hello”,右键,可以看到很多选项,本实验要用到这里的“Run as”,就是把程序运行起来,“Run as”里又有很多选项,选择第一个“Launch on Hardware(Single Application Debug)”,使用系统调试,直接运行程序。
为了保证系统的可靠调试,最好是右键“Run As -> Run Configuration…” Reset entire system 是默认选中的。如果系统中还有 PL 设计,还必须选择“Program FPGA”。
除了“Run As”,还可以“Debug As”,这样可以设置断点,单步运行
右上角可以切换 IDE 模式 设计或者调试,可以理解为写代码或者跑程序

第一章 体验 ARM,裸机输出“Hello World”_第13张图片

固化程序

ZYNQ 的启动是由 ARM 主导的,包括 FPGA 程序的加载。
ZYNQ MPSoC 启动一般为三个步骤:
Pre-configuration satge
Configuration stage
Post-configuration stage

FSBL

FSBL 是一个二级引导程序,完成 MIO 的分配、时钟、PLL、DDR 控制器初始化、SD、QSPI控制器初始化,通过启动模式查找 bitstream 配置 FPGA,然后搜索用户程序加载到 DDR,最后交接给应用程序执行。
修改调试宏定义 FSBL_DEBUG_INFO_VAL,可以在启动输出 FSBL 的一些状态信息,有利于调试,但是会导致启动时间变长。
fsbl 模板也是可以修改的。

点击 APP 工程的 system(如hello_system),右键选择 Build project,就会多出一个 Debug 文件夹,生成了对应的 BOOT.BIN。
还有一种方法就是,点击 APP 工程的 system 右键选择 Creat Boot Image,弹出的窗口中可以看到生成的 BIF 文件路径,BIF 文件是生成 BOOT 文件的配置文件,还有生成的 BOOT.bin文件路径。在 Boot image partitions 列表中有要合成的文件,第一个文件一定是 bootloader 文件,就是上面生成的 fsbl.elf 文件,第二个文件是 FPGA 配置文件 bitstream,在本实验中由于没有FPGA 的 bitstream,不需要添加,第三个是应用程序,在本实验中为 hello.elf,由于没有bitstream,在本实验中只添加 bootloader 和应用程序。点击 Create Image 生成。
第一章 体验 ARM,裸机输出“Hello World”_第14张图片

BOOT.bin 文件是我们需要的启动文件,可以放到 SD 卡启动,也可以烧写到QSPI Flash。

启动测试

SD卡启动

只能格式化为 FAT32 格式,将BOOT.bin 文件放在根目录,启动模式调整为 SD 卡启动

QSPI 启动

启动模式为 QSPI

  1. Vitis 烧写
    Vitis 菜单 Xilinx -> Program Flash
  2. Vivado烧写
    扫描到设备后Add Configuration Memory Device,选择flash,设置烧写文件。
    如果烧写时不是 JTAG 启动模式,软件会给出一个警告,所以建议烧写 QSPI 的时候设置到 JTAG 启动模式
  3. 批处理文件烧写
    见开始的描述,其实就是命令行进行烧写。

常见问题

  1. 仅有 PL 端逻辑的固化
    PS创建一个最简单的hello工程即可。

你可能感兴趣的:(ZYNQ学习,arm开发)