0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【ZYNQ Ultrascale+ MPSOC FPGA教程】第十九章 Hello World(下)

FPGA技术专栏 来源:芯驿电子科技 作者:芯驿电子科技 2021-01-26 09:54 次阅读

原创声明:

本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处。

适用于板卡型号:

AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG

此文基于第十八章内容进行软件开发

【ZYNQ Ultrascale+ MPSOC FPGA教程】第十八章Hello World(上)

ALINX:【ZYNQ Ultrascale+ MPSOC FPGA教程】第十八章Hello World(上)zhuanlan.zhihu.com

软件工程师工作内容

Vitis工程目录为“ps_hello/vitis”

以下为软件工程师负责内容。

1.Vitis调试;

2.创建Application工程;

1)新建一个文件夹,将vivado导出的xx.xsa文件拷贝进来;

2)Vitis是独立的软件,可以双击Vitis软件打开;

也可以通过在Vivado软件中选择ToolsLaunch Vitis打开Vitis软件

o4YBAGAKML2AW8SOAABu2rrtFg0463.jpg

选择之前新建的文件夹,点击”Launch”

pIYBAGAKML6AfGPSAAA6KdBSG2g316.jpg

3)启动Vitis之后界面如下,点击“Create Application Project”,这个选项会生成APP工程以及Platfrom工程,Platform工程类似于以前版本的hardware platform,包含了硬件支持的相关文件以及BSP。

o4YBAGAKML6AG2NxAABcNxXmbmk962.jpg

4)第一页为介绍页,直接跳过,点击Next

pIYBAGAKML-AfC1LAACNEbLTRVQ133.jpg

5)选择“Create a new platform from hardware(XSA)”,选择“Browse”

o4YBAGAKML-AU1oaAABoDU7hcEs082.jpg

选择之前生成的xsa,点击打开

pIYBAGAKMMCAWzPGAACL5xYg66I850.jpg

6)最下面的Generate boot components选项,如果勾选上,软件会自动生成fsbl工程,我们一般选择默认勾选上。

o4YBAGAKMMCAIdCuAABzLYgmc9Q034.jpg

7)填入APP工程名称,在方框处点击可以选择对应的处理器,我们这里保持默认

pIYBAGAKMMGABj4OAACEnRF_Wik917.jpg

8)在这个界面可以修改Domain名称,选择操作系统ARM架构等,这里保持默认,操作系统选择standalone,也就是裸机。

o4YBAGAKMMKACcHPAABoUmRoAUY517.jpg

9)选择”Hellow World”模板,点击“Finish”完成

pIYBAGAKMMKAa4alAABpmmKym8A211.jpg

10)完成之后可以看到生成了两个工程,一个是硬件平台工程,即之前所说的Platfrom工程,一个是APP工程

o4YBAGAKMMKAcFGDAACZVckSmBA294.jpg

11)展开Platform工程后可以看到里面包含有BSP工程,以及zynq_fsbl工程(此工程即选择Generate boot components之后的结果),双击platform.spr即可看到Platform对应生成的BSP工程,可以在这里对BSP进行配置。软件开发人员比较清楚,BSP也就是Board Support Package板级支持包的意思,里面包含了开发所需要的驱动文件,用于应用程序开发。可以看到Platform下有多个BSP,这是跟以往的SDK软件不一样的,其中zynqmp_fsbl即是fsbl的BSP,domain_psu_cortexa53_0即是APP工程的BSP。也可以在Platform里添加BSP,在以后的例程中再讲。

pIYBAGAKMMOAAE5pAACAKyOQmho370.jpg

12)点开BSP,即可看到工程带有的外设驱动,其中Documentation是xilinx提供的驱动的说明文档,Import Examples是xilinx提供的example工程,加快学习。

o4YBAGAKMMOALSlAAACelel-B0E190.jpg

13)选中APP工程,右键Build Project,或者点击菜单栏的“锤子”按键,进行工程编译

pIYBAGAKMMSAHXC3AACcwxTzHDY282.jpg

14)可以在Console看到编译过程

o4YBAGAKMMSAfgEiAAAmVARZH3s753.jpg

编译结束,生成elf文件

pIYBAGAKMMWAemFlAAA8iQCIGqA478.jpg

15)连接JTAG线到开发板、UARTUSB线到PC

16)使用PuTTY软件做为串口终端调试工具,PuTTY是一个免安装的小软件

o4YBAGAKMMWASZFjAACrz30OUvw109.jpg

17)选择Serial,Serial line填写COM3,Speed填写115200,COM3串口号根据设备管理器里显示的填写,点击“Open”

pIYBAGAKMMWAZ5TWAACWkEtU9ow057.jpg

18)在上电之前最好将开发板的启动模式设置到JTAG模式,拔到”ON”的位置

o4YBAGAKMMaALIuRAACpOGfRvIk453.jpg

19)给开发板上电,准备运行程序,开发板出厂时带有程序,这里可以把运行模式选择JTAG模式,然后重新上电。选择“hello”,右键,可以看到很多选项,本实验要用到这里的“Run as”,就是把程序运行起来,“Run as”里又有很对选项,选择第一个“Launch on Hardware(Single Application Debug)”,使用系统调试,直接运行程序。

pIYBAGAKMMeAfIWCAACtPf6fvkU612.jpg

20)这个时候观察串口软件,即可以看到输出”Hello World”

o4YBAGAKMMeAMXo8AAAOqdVwwEs992.jpg

21)为了保证系统的可靠调试,最好是右键“Run As -> Run Configuration...”

pIYBAGAKMMeAFOqDAAC1Z13DeGs652.jpg

22)我们可以看一下里面的配置,其中Reset entire system是默认选中的,这是跟以前的SDK软件不同的。如果系统中还有PL设计,还必须选择“Program FPGA”。

o4YBAGAKMMiAWKP-AADhz9j9468436.jpg

23)除了“Run As”,还可以“Debug As”,这样可以设置断点,单步运行

pIYBAGAKMMmAD7eVAACi-qRo4-4416.jpg

24)进入Debug模式

o4YBAGAKMMmARUefAADNWa5knI4744.jpg

25)和其他C语言开发IDE一样,可以逐步运行、设置断点等

pIYBAGAKMMqAflRFAAC3yKJerX0983.jpg

26)右上角可以切换IDE模式

o4YBAGAKMMqAJW41AADlKqdCfyw728.jpg

3. 固化程序

普通的FPGA一般是可以从flash启动,或者被动加载,ZYNQ的启动是由ARM主导的,包括FPGA程序的加载,ZYNQ MPSoC启动一般为三个步骤,在UG1085中也有介绍:

Pre-configuration satge :预加载阶段由PMU控制,执行PMU ROM中的代码设置系统。PMU处理所有的复位和唤醒过程。

Configuration stage : 接下来进入最重要的一步,当BootRom(CSU ROM代码的一部分)搬运FSBL到OCM后,处理器开始执行FSBL代码,FSBL主要有以下几个作用:

  • 初始化PS端配置,MIO,PLL,DDR,QSPI,SD等

  • 如果有PL端程序,加载PL端bitstream

  • 搬运用户程序到DDR,并跳转执行

Post-configuration stage : FSBL开始执行后,CSU ROM代码进入post-configuration阶段,负责起系统干预响应,CSU为验证文件正确性、通过PCAP加载PL、存储管理安全密钥、解密等提供持续的硬件支持。

3.1 生成FSBL

FSBL是一个二级引导程序,完成MIO的分配、时钟、PLL、DDR控制器初始化、SD、QSPI控制器初始化,通过启动模式查找bitstream配置FPGA,然后搜索用户程序加载到DDR,最后交接给应用程序执行。

1) 由于在新建时选择了Generate boot components选项,所以Platform已经导入了fsbl的工程,并生成了相应的elf文件。

pIYBAGAKMMuAQSjiAABB9oRSVwU193.jpg

2) 修改调试宏定义FSBL_DEBUG_INFO_VAL,可以在启动输出FSBL的一些状态信息,有利于调试,但是会导致启动时间变长。保存文件。可以看一下fsbl里包含了很多外设的文件,包括psu_init.c,qspi,sd等,大家可以再仔细读读代码。当然这个fsbl模板也是可以修改的,至于怎么修改根据自己的需求来做。

o4YBAGAKMMuAWwSKAACIREUrsmY323.jpg

3) 重新Build Project

pIYBAGAKMMyAS5_SAABZci2Nx0o641.jpg

4) 接下来我们可以点击APP工程的system,右键选择Build project

o4YBAGAKMM2AeBxnAABjMcUtBtw334.jpg

5) 这个时候就会多出一个Debug文件夹,生成了对应的BOOT.BIN

pIYBAGAKMM2AXFC-AAA-X5hoe6Y174.jpg

6) 还有一种方法就是,点击APP工程的system右键选择Creat Boot Image,弹出的窗口中可以看到生成的BIF文件路径,BIF文件是生成BOOT文件的配置文件,还有生成的BOOT.bin文件路径,BOOT.bin文件是我们需要的启动文件,可以放到SD卡启动,也可以烧写到QSPI Flash。

o4YBAGAKMM6AHNUqAABvt-9iJRg659.jpgo4YBAGAKMM6AcJsYAACaiIyITSw908.jpg

7) 在Boot image partitions列表中有要合成的文件,第一个文件一定是bootloader文件,就是上面生成的fsbl.elf文件,第二个文件是FPGA配置文件bitstream,在本实验中由于没有FPGA的bitstream,不需要添加,第三个是应用程序,在本实验中为hello.elf,由于没有bitstream,在本实验中只添加bootloader和应用程序。点击Create Image生成。

pIYBAGAKMM-AMlZyAACZn8Ch21M883.jpg

8) 在生成的目录下可以找到BOOT.bin文件

o4YBAGAKMNCAFPRdAAArO43zbSA740.jpg

3.2 SD卡启动测试

1) 格式化SD卡,只能格式化为FAT32格式,其他格式无法启动

pIYBAGAKMNCAcDncAABFYi62cmY826.jpg

2) 放入BOOT.bin文件,放在根目录

o4YBAGAKMNCAC1PWAAAvavcxpbs909.jpg

3) SD卡插入开发板的SD卡插槽

4) 启动模式调整为SD卡启动

pIYBAGAKMNGALxHWAADJg42vpis292.jpg

5) 打开串口软件,上电启动,即可看到打印信息,红色框为FSBL启动信息,黄色箭头部分为执行的应用程序helloworld

o4YBAGAKMNKAFxHQAABN6QBItOM203.jpg

3.3 QSPI启动测试

1) 在Vitis菜单Xilinx -> Program Flash

pIYBAGAKMNKANd5WAABbM01BldU547.jpg

2) Hardware Platform选择最新的,Image FIle文件选择要烧写的BOOT.bin,FSBL file选择fsbl.elf。选择Verify after flash,在烧写完成后校验flash。

o4YBAGAKMNKAUxpiAABwAKfAm4I719.jpg

3) 点击Program等待烧写完成

pIYBAGAKMNOAIphBAABCBnwHYRA787.jpg

4) 设置启动模式为QSPI,再次启动,可以在串口软件里看到与SD同样的启动效果。

o4YBAGAKMNOAPjSDAAC4Pe86Sf8561.jpgpIYBAGAKMNSAZim-AABV4p4I_Pw489.jpg

3.4 Vivado下烧写QSPI

1) 在HARDWARE MANGER下选择器件,右键Add Configuration Memory Device

o4YBAGAKMNSATjq7AABg4J_b0B0397.jpg

2) 选择尝试Micron,类型选择qspi,宽度选择x4-single,Density选择256,这时候出现wt25qu256,选择红框型号。

pIYBAGAKMNWARz8FAABnnlelJoY309.jpg

3) 右键选择编程文件

o4YBAGAKMNWAVCS9AABorem8QSo629.jpg

4) 选择要烧写的文件和fsbl文件,就可以烧写了,如果烧写时不是JTAG启动模式,软件会给出一个警告,所以建议烧写QSPI的时候设置到JTAG启动模式

pIYBAGAKMNaASwQ1AABimcsSyXg034.jpg

3.5 使用批处理文件快速烧写QSPI

1) 新建一个program_qspi.txt文本文件,扩展名改为bat,内容填写如下,

E:\XilinxVitis\Vitis\2020.1\bin\program_flash 为我们工具路径,按照安装路径适当修改,-f 为要烧写的文件,-fsbl为要烧写使用的fsbl文件,-verify为校验选项。

callE:\XilinxVitis\Vitis\2020.1\bin\program_flash -f BOOT.bin -offset 0 -flash_type qspi-x4-single -fsbl fsbl.elf -verifypause

2) 把要烧录的BOOT.bin、fsbl、bat文件放在一起

o4YBAGAKMNeAWjD2AAAPHE1SWgc539.jpg

3) 插上JTAG线后上电,双击bat文件即可烧写flash。

pIYBAGAKMNiAcaifAABBaP7zAws869.jpg

4. 常见问题

4.1 仅有PL端逻辑的固化

有很多人会问,如果只有PL端的逻辑,不需要PS端该怎么固化程序呢?不带ARM的FPGA固化是没问题的,但是对于ZYNQ来说,必须要有PS端的配合才能固化程序。那么对于前面的”PL的“Hello World”LED实验”该怎么固化程序呢?

1) 根据本章的PS端添加ZYNQ核并配置,最简单的方法就是在本章工程的基础上添加LED实验的verilog源文件,并进行例化,组成一个系统,并需要生成bitstream。

o4YBAGAKMNiAHjvQAABM4GcHyXI994.jpgpIYBAGAKMNmAZVoiAAAKhgFJOxY116.jpg

2) 生成bitstream之后,导出硬件,选择include bitstream

o4YBAGAKMNmABcCMAAA2Ax8P7Ck811.jpg

3) 在生成BOOT.BIN时,还是需要一个app工程hello,仅仅是为了生成BOOT.BIN,默认情况下在system右键Build Project,即可生成包含bitstream的BOOT.BIN。

pIYBAGAKMNqAZEelAAB8h2EVx3U497.jpg

打开Create Boot Image界面可以看到,Boot Image Partitions的文件顺序是fsbl、bitstream、app,注意顺序不要颠倒,利用这样生成的BOOT.BIN就可以按照前面的启动方式测试启动了

o4YBAGAKMNuAfbGmAACwXel454U839.jpg

在course_s2文件夹,我们提供了一个名为led_qspi_sd的工程,大家可以参考。

5. 使用技巧分享

在频繁的修改源文件,并进行编译的时候,最好选择APP工程进行Build Project,这种情况下只会生成elf文件。

pIYBAGAKMNyAIYLqAABxWtoKRO8893.jpg

如果想生成BOOT.BIN文件,可以选择system进行编译,这种情况既会生成elf也会生成BOOT.BIN,笔者最开始用的时候就吃过亏,每次编译都是选择system,结果每次都要等待生成BOOT.BIN,浪费时间,大家可以注意一下。

o4YBAGAKMNyAOhkpAABqAmvQ98U889.jpg

6. 本章小结

本章从FPGA工程师和软件工程师两者角度出发,介绍了ZYNQ开发的经典流程,FPGA工程师的主要工作是搭建好硬件平台,提供硬件描述文件hdf给软件工程师,软件工程师在此基础上开发应用程序。本章是一个简单的例子介绍了FPGA和软件工程师协同工作,后续还会牵涉到PS与PL之间的联合调试,较为复杂,也是ZYNQ开发的核心部分。

同时也介绍了FSBL,启动文件的制作,SD卡启动方式,QSPI下载及启动方式,Vivado下载BOOT.BIN方式,本章没有FPGA加载文件,后面的应用中会再介绍添加FPGA加载文件制作BOOT.BIN。

后续的工程都会以本章节的配置为准,后面不再介绍ZYNQ的基本配置。

千里之行,始于足下,相信经过本章的学习,大家对ZYNQ开发有了基本概念,高楼稳不稳,要看地基打的牢不牢,虽然本章较为简单,但也有很多知识点待诸位慢慢消化。加油!!!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21619

    浏览量

    601148
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9027

    浏览量

    366429
  • 工程师
    +关注

    关注

    59

    文章

    1565

    浏览量

    68401
  • Zynq
    +关注

    关注

    9

    文章

    607

    浏览量

    47100
  • MPSoC
    +关注

    关注

    0

    文章

    195

    浏览量

    24230
收藏 人收藏

    评论

    相关推荐

    我的hello world(基于米尔MPSOC开发板)

    ``XILINX 新一代 SOC,Zynq UltraScale+ MPSOC 系列性能强悍无比,相比ZYNQ 7000系列每瓦性能提升5倍,作为一名电子发烧友,都想体验一把这高性能的
    发表于 08-07 15:05

    如何调试Zynq UltraScale+ MPSoC VCU DDR控制器

      如何调试Zynq UltraScale+ MPSoC VCU DDR控制器  Zynq UltraScale+
    发表于 01-07 16:02

    如何调试Zynq UltraScale+ MPSoC VCU DDR控制器

    如何调试 Zynq UltraScale+ MPSoC VCU DDR 控制器?
    发表于 01-22 06:29

    ZYNQ Ultrascale+ MPSOC FPGA教程

    ZYNQ Ultrascale+ MPSOC FPGA教程
    发表于 02-02 07:53

    闲话Zynq UltraScale+ MPSoC(连载1)

    闲话Zynq UltraScale+ MPSoC 作者: Hello,Panda 时隔三年,Xilinx推出了其全新的异构SoC,大名叫Zynq
    发表于 02-08 08:24 721次阅读
    闲话<b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>(连载1)

    Xilinx基于ARM的Zynq-7000和Zynq UltraScale+ MPSoC及RFSoC器件是否存在安全漏洞

    本文试图搞清楚在 Xilinx 基于 ARM 的 Zynq-7000、Zynq UltraScale+ MPSoCZynq
    发表于 06-28 15:53 2658次阅读

    Zynq UltraScale+ MPSoC的发售消息

    Zynq®UltraScale+MPSoC,现已开始发售。视频向您重点介绍了Xilinx UltraScale +产品组合的第一位成员
    的头像 发表于 11-27 06:47 3556次阅读

    MPSOC开发板教程之HELLO WORLD

    。现在用米尔MPSOC开发板来一个hello worldMPSOC学习之HELLO WORLD
    发表于 08-02 11:43 461次阅读
    <b class='flag-5'>MPSOC</b>开发板教程之<b class='flag-5'>HELLO</b> <b class='flag-5'>WORLD</b>

    ZYNQ Ultrascale+ MPSOC FPGA教程】第十九章Hello World()

    此文基于第十八章内容进行软件开发
    发表于 01-26 09:44 14次下载
    【<b class='flag-5'>ZYNQ</b> <b class='flag-5'>Ultrascale+</b> <b class='flag-5'>MPSOC</b> <b class='flag-5'>FPGA</b>教程】<b class='flag-5'>第十九章</b><b class='flag-5'>Hello</b> <b class='flag-5'>World</b>(<b class='flag-5'>下</b>)

    如何调试 Zynq UltraScale+ MPSoC VCU DDR 控制器?

    Zynq UltraScale+ MPSoC VCU DDR 控制器是一款专用 DDR 控制器,只支持在 Zynq UltraScale+
    发表于 02-23 06:00 15次下载
    如何调试 <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b> VCU DDR 控制器?

    米尔电子zynq ultrascale+ mpsoc底板外设资源清单分享

    米尔电子推出的国内首款zynq ultrascale+ mpsoc平台核心板(及开发板):MYC-CZU3EG吸引了人工智能、工业控制、嵌入式视觉、ADAS、算法加速、云计算、有线/无线通信等
    发表于 01-07 15:20 3次下载
    米尔电子<b class='flag-5'>zynq</b> <b class='flag-5'>ultrascale+</b> <b class='flag-5'>mpsoc</b>底板外设资源清单分享

    ZYNQ Ultrascale+ MPSoC系列FPGA芯片设计

    基于 Xilinx 公司ZYNQ Ultrascale+ MPSoC系列 FPGA 芯片设计,应用于工厂自动化、机器视觉、工业质检等工业领域
    发表于 11-02 14:35 1543次阅读

    Zynq UltraScale+ MPSoC中的隔离方法

    电子发烧友网站提供《Zynq UltraScale+ MPSoC中的隔离方法.pdf》资料免费下载
    发表于 09-13 17:11 1次下载
    <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>中的隔离方法

    Zynq UltraScale+ MPSoC的隔离设计示例

    电子发烧友网站提供《Zynq UltraScale+ MPSoC的隔离设计示例.pdf》资料免费下载
    发表于 09-13 11:28 3次下载
    <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>的隔离设计示例

    Zynq UltraScale+ MPSoC验证数据手册

    电子发烧友网站提供《Zynq UltraScale+ MPSoC验证数据手册.pdf》资料免费下载
    发表于 09-15 10:13 0次下载
    <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>验证数据手册