[X]关闭

[米联客-XILINX-H3_CZ08_7100] FPGA基础篇连载-04程序的固化和下载

文档创建者:FPGA课程
浏览次数:523
最后更新:2024-08-20
文档课程分类-AMD-ZYNQ
AMD-ZYNQ: ZYNQ-FPGA部分 » 2_FPGA实验篇(仅旗舰) » 1-FPGA基础入门实验
本帖最后由 FPGA课程 于 2024-9-5 18:24 编辑

​软件版本:VIVADO2021.1
操作系统:WIN10 64bit
硬件平台:适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA
登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!
本教程使用了米联客-MLK-H3-CZ08-7100开发板,购买链接:https://milianke.tmall.com/

1概述
基于ZYNQ的启动方式包括了ZYNQ的加载流程、支持的加载模式、裸机启动、LINUX启动等。其中加载模式有常用的JTAG模式、QSPI模式、SD卡模式、NAND FLASH模式、QSPI+EMMC模式。如果需要详细了解其中的原理需要阅读大量资料和一些XILINX的FSBL代码以及LINUX启动部分的源码。
对于SDK开发的初级读者来说在刚开始入门的时候,掌握复杂的启动原理相对比较困难,所以对于初级读者关键还是掌握主要的启动模式方法、基本的启动流程原理,比如QSPI启动、SD启动、如何制作BOOT.BIN文件的能力,满足一般的项目要求。对于需要更加深入掌握比如精简定制fsbl、multiboot方式、QSPI+EMMC启动方式、JTAG启动方式等,则可以详细阅读ug585、ug821、阅读fsbl代码、分析linux中相关的uboot启动流程和参数设置。
实验目的:
1:熟悉ZYNQ启动模式类型和硬件设置
2:熟悉ZYNQ启动的过程
3:掌握ZYNQ IP SD接口启动和QSPI FLASH启动的设置
4:利用SDK产生或者制作BOOT.BIN文件
5:完成SD卡启动实验
6:完成QSPI启动实验
2ZYNQ的启动2.1启动模式的设置
ZYNQ支持JTAG启动模式、NOR BOOT模式、NAND FLASH启动模式、QSPI启动模式、SD卡启动模式。这里我们的硬件只支持SD卡启动模式、QSPI启动模式、JTAG启动模式。使用对应的启动模式前,请务必将开发板上的模式开关拨到对应模式的启动位置。
ff55aff547db4a86b670b342a15ef085.jpg
0088044ec6d348ee851b231a5aa59117.jpg
2.2上电时序要求
上电需要满足PS_POR_B应该一直保持低电平,并且在PS_SRST_B引脚拉高 2us后拉高。很多上电启动异常的情况应该排查电源的启动顺序顺序是否满足要求。
ac8e1b5320924fddabd6ff1438ee1a63.jpg
2.3ZYNQ的启动流程
下图展示了ZYNQ上电复位或者非上电复位后,进入BOOTROM程序执行的状态框图。
3de96d5ebd6c48c0b8ee85570e0455ec.jpg
阶段0:
BootROM中包含了一段芯片出厂前就带的启动代码,当上电复位 (POR) 或非 POR 系统复位(PS_SRST_B、调试、看门狗、软件)后, BootROM程序在主CPU (CPU 0) 上开始执行。BootROM程序读取外部存储器中的BOOT.BIN文件,并且查找其中的BootROM Heard参数,以确认程序如何切换到下阶段1。如果是QSPI FLASH中没有找到BOOT.BIN文件,BootROM会跳到下一个32KB的位置重新搜索BOOT.BIN
在以下流程图中,展示了第一个阶段的复制FSBL到OCM的流程图。其中XIP模式我们这里不涉及。
93068a90a4fc4f55b14075a82b216d4e.jpg
阶段1:
阶段0把FSBL拷贝到OCM(On-chip memory)中后,CPU0开始从OCM运行FSBL代码。包括:
1:初始化PS的配置参数包括MIO、DDR等
2:使用BIT流对PL进行编程
3:加载第二阶段的引导程序或者裸机程序到DDR存储器中
4:阶段到阶段2
996d1623d4d44a89b55884e1bf239b34.jpg
阶段2:
该阶段一般运行的是应用程序比如裸机的应用程序、或者LINUX 的boot.elf。也可能是第二阶段引导程序,比如QSPI+EMMC模式,从QSPI完成fsbl加载后可以对eMMC分区识别,把剩余的加载项放到EMMC中,这样只需要一个很小的QSPI FLASH就可以了。当然一般我们开发板都采用了足够达的QSPI FLASH,一般不需要这么节约使用。等LINUX部分我们再探讨这方面的问题。
3纯FPGA工程下载3.1直接选择bit文件下载
很多时候我们仅仅是想测试一下代码的功能,或者是我们有多个Bit文件下载的时候,我们不需要打开相应的工程,仅仅打开我们的VIVADO软件便可以下载我们的Bit文件。
1:在打开的VIVADO软件界面,单击Open Hardware Manager。
5db6be0848e94efb8c4718233e7348bd.jpg
2:点击Auto Connect,在此之前,请确保开发板拨码开关为JTAG模式,且开发板已上电。
7caeacf2ef924d6dba7751f0336723b4.jpg



3:右键FPGA芯片信号选择Program device或者点击上方的Program device按钮
845b6128bda449ba9e330deb36d983d8.jpg
4:选择对应的Bit文件,如果你在工程中有使用在线逻辑分析仪的话,会在下方自动添加.ltx文件。如果ltx文件与bit文件不匹配,会报错。
20008387e7c541a88a5e4f3deda2d873.jpg
注意图片中的文件目录,一般我们工程默认的Bit文件就是生成在该路径下
c25084ce3dbd4e8eb6cec0d26a7579d8.jpg
5:点击Program下载完成
3.2工程中下载对应BIT文件
1:在打开的Vivado软件界面,单击Open Project。
a68885ab1ae44800addcf1acc6266901.jpg
2:找到我们工程对应的.xpr文件
f4efcacf760b440ab39ca28cae17fa5f.jpg
3:点击Open Target,选择Auto Connect,在此之前,请确保开发板拨码开关为JTAG模式,且开发板已上电。
36d59c83051541ec8ce5c41a02d07d46.jpg

3:右键FPGA芯片信号选择Program device或者点击上方的Program device按钮
5b71e53a889042e3be2dd9be2aada062.jpg
4:选择对应的Bit文件,如果你在工程中有使用在线逻辑分析仪的话,会在下方自动添加.ltx文件。如果ltx文件与bit文件不匹配,会报错。
88cda2c202d146c0b6f35f1b5ea6d595.jpg
注意图片中的文件目录,一般我们工程默认的Bit文件就是生成在该路径下

fab6689935d14e54b5b12fbb023b83a8.jpg
5:点击Program下载完成
4使用VITIS-SDK打开SDK工程
1:打开Xilinx Vitis软件,指向预先设置好的路径到soc_sdk
2fce962a2f01499b811270b484798458.jpg
米联客资料中的路径规范如下图:
soc_prj里面是基于SOC的硬件工程源码
soc_hw里面是xsa格式文件,soc_prj编译会导出system_wrapper.xsa到这个文件
soc_sdk里面是裸机的sdk工程,sdk工程创建依赖soc_hw中的system_wrapper.xsa
328c412e5e1746ea8dd0e76a61c84589.jpg
2:打开后由于路径发生改变需要重新设置下路径
abe9007b70cf405d8e9eddb3a1b96985.jpg
946349120de246e3aa8301e4e28fc563.jpg
3:删除默认的错误路径(吐槽软件不能识别相对路径)
222f5316c3874bc68071e09aa4ce5623.jpg

4:选择新的soc_baes文件夹的路径

856fc9e1ea5244ac9f8e92fc3869d615.jpg

762a53ad13844ad188c3437335c7b4c2.jpg
7f63b0a0b6c94aa69a73c3707ef4b7a8.jpg
d4c94b58a8dc46c2b4b75242d5b5e10b.jpg
5:进入调试前,需要给开发板通电;连接好开发板上的串口(USB-232),查看串口号(设备管理器中查看);
5固化及启动5.1SDK程序固化
使用SDK完成基本的固化方法甚至不需要掌握ZYNQ的启动原理。只需要正确产生BOOT.BIN文件,正确设置模式开关,掌握烧录流程即可,所以以下关键还是软件的操作流程。
5.2SDK产生BOOT.BIN方法
1:首先我们认识下以下这种图中的关键源码分别是:
a:soc_base路径下的zynqmp_fsbl源码(前面已经编译过这里不用重复编译,如果看到感叹号就是需要编译)
b: helloworld SDK APP应用程序源码
167311aa70f64ca9baddd0b7161baa7d.jpg
右击soc_base可以编译 fsbl,如下图所示
e1930e7eb1ca4e44a4053d8b1fc6de2b.jpg

2:第一种方法直接右击编译
37abb45c623f40de964c4cda9fa4187c.jpg
3:第二种右击后选择Create Boot Image
4d8a24b7e4894282985f2d35ea0c81a6.jpg

默认在boot image partitions中有fsbl.efl、system_wrapper.bit、helloworld.ef,如果没有依次单击Add按钮,添加fsbl.efl文件、system_wrapper.bit文件、helloworld.elf文件,之后单击Create Image。
651cc4fe5e3c411ea65990649cba3371.jpg
BOOT.BIN保存在bootimage文件夹
9efa64436fbb48fe9b154ce5fb5fcd6f.jpg
以上两种方法产生的BOOT.BIN是一样的。
5.3SD卡启动
直接复制路径下的BOOT.BIN文件并且放到SD卡中,之后插入开发板,设置SD卡模式启动(核心板上模式开关全部设置OFF OFF)

e8260caf944b4120b410054bc61e319d.jpg
image.jpg
为了观察实现结果,需要打开PS串口
5dd695babb0a4cdeae27a3c3a7256d2a.jpg
a1e93b7a49ec427d93faff0d3ef7fda3.jpg
如果不清楚串口号的,可以查看下设备管理器,如果发现没装串口驱动的安装上驱动
4458d4acea114bdf895793909dab7841.jpg
a20e0da382e84d478fe77be94cdaab1c.jpg
同时也可以看到流水灯运行了。
5.4QSPI的启动
支持JTAG模式的核心板下载很便捷,首先把模式开关全部设置成JTAG模式,具体可以参考硬件手册
086b5345ff5c4801b65b0d0747f97bd1.jpg
c3343789ce7641f5b7bc3ff669dad45c.jpg
f8cf74c545784f53873ffb6febde1f46.jpg
05ecf9ea8c564307ab2244768e39e4c7.jpg
断电设置模式开关为QSPI启动模式,具体设置拨码方式请查看硬件手册或者原理图  (设置模式开关请务必断电完成)
8d1c80631983428d8661cee311175b6b.jpg
为了观察实现结果,需要打开串口
531749d3d9f64c1780f99da446b56d8a.jpg
536b4de330424ef0be4cffd4694fdcc0.jpg
如果不清楚串口号的,可以查看下设备管理器,如果发现没装串口驱动的安装上驱动
8d65b19c52984352859ec0826431370e.jpg
3222981ed21c4e579a2c1fd0b894517b.jpg
同时我们可以看到PL端4个流水灯闪烁。
6总结
本节课作为我们接触FPGA开发软件的第一课,我们重点是教大家学习Vivado以及Vitis软件的下载bit文件、SD卡启动以及固化Flash的方法。如果有想具体学习如果在一个全新的工程中完成固化的的用户,可以自行阅读《附录2程序的生成、固化和下载》。

5acc44ad27f344e2b2cc76881df07a62.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则