Board logo

标题: 如何配置您的Zynq SoC裸机解决方案 [打印本页]

作者: pengpengpang    时间: 2014-6-16 20:46     标题: 如何配置您的Zynq SoC裸机解决方案

使用JTAG接口完成Zynq SoC应用的开发和测试后,下一步是让引导载入程序工作。
作者:Adam Taylor
首席工程师
EADS Astrium
aptaylor@theiet.org

编者注:这是Adam Taylor规划的Zynq-7000 All Programmable SoC实际操作教程系列的第二部分。Adam经常为Xcell杂志撰稿,他撰写了第82期介绍Zynq SoC设计的封面报道,以及本期中介绍XPE和XPA的文章(见第46页)。同时他还为All Programmable Planet撰写博客。
Zynq™-7000 All Programmable SoC在单个器件上实现了ARM处理功能与FPGA逻辑独特的组合,因此需要双重的配置过程,同时需要考虑处理器系统和可编程逻辑。工程师会发现,其配置顺序与传统的赛灵思FPGA稍有差别。尽管如此,方法仍是相似的,生成引导镜像和完成配置存储器编程的难度不大。
虽然标准的FPGA配置实践一般只需要FPGA bit文件,但是如果您想最大限度地利用Zynq SoC的优势,还需要添加另一种配置文件,即软件可执行与可链接格式(ELF)文件。FPGAbit文件用于定义设计中可编程逻辑部分的行为,而ELF文件则是处理系统将要执行的软件程序。
下面让我们来看看如何在Zynq SoC上实现裸机(无操作系统)软件应用。
配置概览
在Zynq SoC中,处理系统(PS)处于主控地位,因此负责配置器件的可编程逻辑(PL)侧。(唯一例外的情况是在使用JTAG接口进行配置时。)这就是说,如果需要,您可以在可编程逻辑侧不加电的情况下给处理系统加电并使之运行,从而降低系统的总功耗。当然如果需要使用Zynq SoC的PL侧,您也需要给它加电。

软件应用程序和FPGA bit文件都存储在连接到处理系统的同一配置存储器器件中。处理系统可以通过多种非易失性存储器类型为配置提供支持,包括quad SPI flash、NANDflash、NOR flash和SD卡等。此外,您还可以和其它任何器件一样,通过JTAG配置系统。
因此,Zynq SoC按照典型的处理器启动顺序配置器件两侧。首先从不可修改的内部的boot ROM运行。该boot ROM包含用于支持非易失性存储器的驱动程序。您可通过非易失性存储器中的报头(header)对boot ROM加以配置。报头标记着配置镜像的起始点,是引导ROM首先要查找的。报头定义了boot ROM可以实现的一些启动选项,直接在flash上运行程序(execute in place)(但是并不适用于所有类型的存储器)、第一阶段引导载入程序(FSBL)偏移和加密配置等。这个报头解析和处理的目的,是确保引导ROM的工作模式与配置存储器的格式相兼容。
对于具体设计而言,用户可以选择加密或非加密的配置方法。引导ROM报头能够支持和定义这两种模式。在加密配置下,必须给器件的可编程逻辑部分加电,将其作为硬件宏AES和SHA。您需要这两个宏进行加密,而且必须把它们放置在器件的可编程逻辑侧。
在配置的下一阶段,您需要提供FSBL,用于在加载软件应用和配置可编程逻辑之前,根据Xilinx Platform Studio(XPS)的定义,配置处理器上的DDR存储器和其它外设。总体而言,FSBL负责完成四项主要任务:
        使用XPS提供的信息,初始化处理系统
        如果有提供bit文件,对Zynq SoC的可编程逻辑侧进行编程
        在使用操作系统的情况下,加载第二阶段引导载入程序(SSBL)到DDR,或加载裸机应用到DDR
        开始执行SSBL或裸机应用。

您可通过处理器配置访问端口(PCAP)为Zynq SoC的可编程逻辑(PL)侧进行配置,能够支持部分或者完全的可编程逻辑配置。这就意味着,只要处理系统启动并进入运行状态,就可以在任何时候对FPGA进行编程。此外,如果您在可能产生单事件功能中断(SEFI)的工作环境中使用器件时,PCAP还可以让您回读并检查错误。
为了给Zynq SoC创建可引导镜像,还需要至少下列功能:
1.        用于控制引导BOM设置的引导ROM报头(例如,现场执行、加密、四通道SPI配置、FSBL偏移和镜像长度)
2.        第一阶段引导载入程序(FSBL)
3.        可编程逻辑bit文件
4.        用于处理系统侧的软件应用(ELF文件)

和其它所有的赛灵思FPGA一样,Zynq SoC器件使用多个模式引脚判断存储程序的存储器类型以及其它重要的系统设置。这些模式引脚共享器件处理系统侧的多用途I/O引脚(MIO)。总体而言,映射到MIO的有7个模式引脚[8:2]。头四个用于定义引导模式。第五个用于定义PLL是否在使用,第六个和第七个用于定义加电过程中MIO bank 0和bank 1的分组电压。第一阶段引导载入程序(FSBL)可以把MIO bank 0和bank 1定义的电压标准更改为应用的正确电压标准。但是如果您是从头开始设计系统,应确保加电过程中使用的电压不会损坏连接到这些引脚的器件。
创建第一阶段引导载入程序
制作引导镜像的下一步是创建第一阶段引导载入程序。用户不必手动完成创建工作。赛灵思提供的FSBL可加载您的应用并完成FPGA的配置。您当然也可以定制提供的代码,根据应用的需要修改引导顺序。在当前的软件开发套件(SDK)工作区中,即用户项目所在的工作区,使用new->application project创建新项目,如图1所示。

选择使用C或是C++,选取为系统定义的开发板支持套件并为项目命名。在这种情况下,我使用zynq_fsbl_0为我们的实例设计命名。


图1:创建第一阶段引导载入程序项目



图2:从提供的模板创建FSBL



图3:定义DDR地址空间



图4:找出引导镜像所需的完整文件

在下一个选项卡上,从图2所示的可用模板选择Zynq FSBL选项,完成FSBL项目的创建。到此您已经差不多完成引导镜像的创建。如果您选择自动“编译”,则FSBL将被编译;如果没有,将根据随后的命令完成编译。
但是由于FSBL不知道DDR存储器在处理器地址空间中的位置,我们需要修改FSBL随附的链接器脚本。因此我们需要打开lscrip.ld文件,将DDR存储器的位置添加到文件中。您可以在为应用创建的链接器脚本中找到DDR在地址空间中的位置(如需了解有关如何创建脚本的详请,敬请参阅Xcell杂志第82期的封面报道)。另外您也可以在“硬件平台定义”下的system.xml文件中找到DDR在地址空间中的位置。
图3所示为系统添加的具有DDR地址的FSBL lscript.ld文件。如果您忘记添加,您会发现引导载入程序可以运行,FPGA可以进行配置,但应用无法运行,即使您将其配置为在DDR中执行。
生成可配置镜像
在赛灵思SDK Project Explorer的下面,您应该可以看到下列四个模块。每个模块用稍有不同的符号表示模块的类型。以图4为例,您可以看到下列结构:
1.        Proc_subsystem_hw_platform,在处理子系统创建后命名,是您文件的硬件定义。
2.        Zed_blog_0,这是您创建的开发板支持套件。
3.        Zed_blog_c,这是应用本身。
4.        Zynq_fsbl_0,这是您刚刚创建并为之修改链接器脚本的第一阶段引导载入程序。

由于我们正在创建的是裸机应用(非操作系统),您将需要三个文件创建引导镜像,具体顺序如下:第一阶段引导载入程序(FSBL)、FPGA编程bit文件和C应用程序。
使用赛灵思工具菜单下的“Create Zynq Boot Image”选项,可以非常简单地在SDK中创建引导镜像。当您选定引导镜像,就会打开新的对话框,以便您选择需要的文件,如图4所示。
需要强调的是,FPGA bit文件必须一直紧随FSBL。点击“create image”可以同时创建*.bin和*.mcs文件,您可将它们编程到目标器件。
配置存储器编程
通过SDK的赛灵思工具选项下的“program flash”选项或是使用赛灵思的iMPACT编程工具,都可以对配置存储器进行编程。在本例中,我们准备把配置文件存储到四通道SPI闪存中。QSPI接口可在赛灵思Platform Studio的系统组装视图中进行定义。因此硬件定义将包含QSPI IP内核及其在地址映射中的位置,以便第一阶段引导载入程序连接到该器件并对其进行配置。

器件编程工作的下一步是使用JTAG编程线缆,将Zynq SoC硬件系统与您的PC机相连。然后从SDK内的赛灵思工具菜单中选择“program flash”选项,就可以轻松完成配置存储器的编程工作,如图5所示。


图5:配置存储器的编程

浏览并选择您生成的MCS文件,在出现的对话框中输入0x0偏移。然后在确保目标硬件已经加电之后,点击“program”(图6)。


图6:闪存对话框的编程

器件进行编程和验证可能需要几分钟时间(如果您勾选验证选项)。在这个过程完成后,硬件断电再重新加电(或是复位处理器)。如果您对模式引脚进行了正确设置,Zynq SoC系统将正常启动,完全地进行配置,并开始运行应用软件和FPGA设计。
高级配置:分区搜索和多重引导
上面介绍的例子可引导您逐步完成单个配置镜像的配置工作。但是,如果引导ROM检查失败,无法加载初始镜像,引导ROM则可执行分区搜索。在这种情况下,引导ROM会查找配置存储器中位于更高位置的另一个黄金镜像。您使用的配置存储器类型会对引导ROM搜索的地址空间大小造成影响。如果您使用的是SD卡,就不会进行分区搜索。

在热复位之后,Zynq-SoC还可以从配置存储器中加载不同的镜像。为此,您必须通过FSBL,或是在第二阶段引导载入程序或者应用的后续阶段为引导ROM定义多重引导地址。这样Zynq SoC的引导ROM紧接热复位之后,从多重引导地址指向的位置进行配置,从而加载与初始镜像不同的镜像。与在分区搜索中不同的是,这些镜像在配置存储器中可放置为任意顺序。不过在加电复位的情况下,引导ROM会加载它在配置存储器中找到的第一个有效镜像。
Zynq SoC的配置虽然与传统FPGA的配置方法不同,但并非是高深的艺术。许多工程师都会熟悉这种双管齐下的方法,而且会发现使用赛灵思软件开发套件中提供的工具,可以非常轻松地生成引导镜像并完成配置存储器的编程工作。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0