Arria 10 SoC引导用户指南

ID 683735
日期 10/30/2015
Public
文档目录

1.2.2.1. 引导ROM流程

冷复位中,CPU0从复位释放(例如, 上电中)时HPS引导过程开始,并执行复位异常地址0x00000000上内部引导ROM中的代码。引导ROM代码把HPS从复位释放并置入一个已知状态。引导ROM代码退出后,将控制传递到引导软件的下个阶段,称为第二阶段引导加载器。可自定义第二阶段引导加载器,通常它存储于HPS外部一个非易失闪存基础的存储器中或FPGA的片上RAM中。随后第二阶段引导加载器可加载OS, BareMetal应用或潜在的第三阶段引导加载器。

本节描述了从复位到引导ROM代码传递软件控制到第二阶段引导加载器的软件流程。

代码开启,初始化系统随之根据引导请求类型,尝试将代码加载到片上RAM。如果加载成功,第二阶段引导加载器代码执行。如果引导ROM查找代码失败或后续三次加载尝试均失败,则自旋等待看门狗复位。

图 4. 主要引导ROM流程

引导ROM通常在CPU0执行。主引导ROM代码执行时,通常CPU1被保持于复位中并仅当系统软件要求时才将其释放。

作为确定引导类型的一部分,引导ROM执行低级别引导流程。引导ROM代码读取安全熔丝以确定第二阶段的引导源是否强制为FPGA。如有请求无认证FPGA引导和无CRC片上RAM引导,或者引导无效,则在低级别引导流程中处理。所有其他引导类型都在高级别引导流程中处理。

图 5. 低级别引导流程

在引导ROM流程的低级别期间,引导ROM读取安全熔丝以确定是否需要FPGA-only引导。如果需要,则引导ROM还必须确定是否熔丝显示要POF认证。如果无须认证,则进行标准FPGA配置。

如果不需FPGA-only引导,则引导ROM查看是否允许片上RAM引导。如果是,则引导ROM查看代码是否有效。若代码无效,引导ROM读取BSEL管脚以确定它是否表示一个FPGA引导。

如果安全熔丝表示引导映像需要认证,则必须执行高级别引导(在C代码中执行)。

图 6. 高级别引导流程

引导过程中,可在引导映像中进行认证和解密。认证独立于解密;然而, 若同时需要认证和解密,则通常先进行认证。若要认证引导,则引导ROM必须有一个根密钥开启认证过程。该密钥可用于用户熔丝中,FPGA逻辑单元中或作为第二阶段引导映像头(header)的部分。器件配置熔丝确定密钥来源。

在闪存冷引导期间,引导ROM代码尝试把第一个第二阶段引导加载器映像从闪存加载到片上RAM,并将控制传递到第二阶段引导加载器。如果该初始映像无效,则引导ROM代码检索romcode_initswlastld寄存器并尝试加载下个已存储映像。 引导ROM将在初始映像加载失败后尝试三个后续加载。 如果后续加载中仍无法找到有效映像,则引导ROM代码在器件的FPGA中查找一个后备映像。
注: 引导过程中,引导ROM使能所有缓存(L1数据和指令缓存以及L2缓存)。如果未从引导闪存器件(SD/MMC,QSPI,NAND)中适当加载第二阶段引导加载器,则当引导ROM在器件FPGA部分查找后备映像时,缓存仍被保留。这种情况将影响加载代码时的一致性。因此,必须清除缓存并在后备映像中禁用。

如果热RAM引导失败或出现冷复位, 则引导ROM读取系统管理器bootinfo寄存器中的BSEL值。如果FPGA选作引导源,则引导ROM代码尝试越过HPS-to-FPGA桥接(从桥接偏移0x00000000)在地址0xC0000000执行代码。如果FPGA没有正确地初始化,且没有使能看门狗超时,则没有错误条件生成。反而,引导ROM继续等待直到FPGA可用。

如果BSEL位显示有来自外部闪存的引导,则引导ROM代码尝试从闪存器件加载一个映像到片上RAM,并验证和执行它。如果BSEL失效或引导ROM代码在闪存中找不到有效映像,则引导ROM代码查找FPGA中是否有后备映像。如果有, 则引导ROM执行后备映像。如果无,则引导ROM在片上RAM中执行信息事后转储并等待复位。

注: 缩写BSEL和BOOTSEL可在定义引导选择管脚时互换使用。

引导ROM代码用多种方式验证第二阶段引导加载器以确保没有执行损坏的映像。首先测试映像头(header),以此确认映像号码,版本,模块长度,以及保护该模块的映像CRC。 只要其中任何一个无效,则认为映像损坏。