一、前言
Agilex 5 SoC FPGA 集成了高性能 FPGA 结构与双集群 ARM 处理器系统(HPS,包含双核 Cortex‑A76 与双核 Cortex‑A55),为嵌入式开发者提供了兼具硬件可重构性与强大软件处理能力的异构计算平台。针对系统复位后由 FPGA 还是 HPS 主导启动流程,Altera定义了两种不同的引导模式:FPGA Configuration First和HPS Boot First。
本文将首先介绍这两种启动模式的工作方式,然后在 DE25‑Nano 开发板上完整演示其开发与验证流程。
二、Agilex 5 SoC 启动模式概述
FPGA Configuration First Mode
当选择FPGA Configuration First模式时,系统安全器件管理器(SDM)会首先完成FPGA的完整配置,随后配置HPS的SDRAM引脚,加载HPS的第一级引导程序(FSBL),最后将HPS从复位状态释放。在此模式下,FPGA逻辑阵列在HPS退出复位之前便已开始工作,即FPGA在HPS启动前已完全就绪。需要注意的是,FPGA Configuration First模式不支持HPS在运行时对FPGA进行重配置。

HPS Boot First Mode
当您选择HPSBoot First时,SDM会先配置HPS的SDRAM引脚,加载HPS的FSBL并将HPS从复位状态释放,之后由HPS在稍后的时间点再完成FPGA I/O和FPGA逻辑阵列的配置。HPS优先选项具有以下优势:最小化SDM所需的闪存容量;最小化HPS软件启动所需的时间;支持HPS在运行过程中对FPGA进行重配置。

选择 HPS Boot First 还是 FPGA Configuration First,核心在于权衡 HPS 的启动速度 、FPGA 的早期可用性,以及后期FPGA是否可以重配置等。这取决于你的应用场景更侧重哪个方面。
三、准备工作
硬件准备:
-
DE25-Nano开发板
-
5V电源适配器(随板附带)
-
USB Type-C数据线(用于UART串口通信和JTAG编程,随板附带)
-
MicroSD卡(建议8GB以上,随板附带)
-
读卡器
-
一台Ubuntu电脑
软件准备:
-
Altera Quartus Prime Pro Edition 25.1.1(支持Agilex 5器件)
-
DE25-Nano GHRD工程(从友晶官网下载https://dl2.terasic.com/resources/de25-nano/DE25-Nano_revB_v.1.0.0_ResourcePackage.zip)
-
DE25-Nano Linux镜像(从友晶官网下载https://dl2.terasic.com/resources/de25-nano/de25_nano_sdcard_console_v1.1.zip)
-
串口终端软件(如PuTTY、minicom等)
-
Win32DiskImager工具(也可以用命令直接在Ubuntu电脑烧写SD卡)
四、模式设置
可以在 Quartus 的图形界面中进行设置,路径为:Assignments > Device > Device and Pin Options > Configuration > HPS/FPGA Configuration order:

Quartus 默认设置是FPGA Configuration First模式(即HPS/FPGA configuration order 默认设置是After INIT_DONE),如果想改成HPS Boot First模式,可在GUI界面选择HPS First或者在.qsf文件里面添加约束:
set_global_assignment -name HPS_INITIALIZATION "HPS FIRST"
五、DE25-Nano 开发板 FPGA Configuration First 模式演示
首先固化QSPI Flash,这个固化工作可以在Windows和Ubuntu系统下操作。
Windows下固化QSPI Flash
双击DE25-Nano_revB_v.1.0.0_ResourcePackage\Demonstration\SoC_FPGA\GHRD\sof_with_hps.bat将GHRD编译生成的golden_top.sof文件转化为golden_top_hps.sof文件。

然后双击
DE25-Nano_revB_v.1.0.0_ResourcePackage\Demonstration\SoC_FPGA\GHRD\sof_to_jic.bat将golden_top_hps.sof文件转化为golden_top_hps.jic文件。

最后双击Nano_revB_v.1.0.0_ResourcePackage\Demonstration\SoC_FPGA\GHRD\output_files\program_qspi_flash\flash_program.bat文件将golden_top_hps.jic文件固化到QSPI Flash当中:

Ubuntu下固化Flash
设置Quartus的环境变量:
export QUARTUS_ROOTDIR=/home/doreen/altera_pro/25.1.1/quartusexport PATH=$QUARTUS_ROOTDIR/bin:$PATH
在GHRD工程的目录下执行如下命令生成golden_top_hps.sof文件
quartus_pfg -c output_files/golden_top.sof output_files/golden_top_hps.sof -o hps_path=software/u-boot/spl/u-boot-spl-dtb.hex
然后执行如下命令生成golden_top_hps.jic文件:
quartus_pfg -c output_files/golden_top_hps.sof output_files/golden_top_hps.jic -o device=MT25QU128 -o flash_loader=A5EB013BB23B -o mode=ASX4
最后执行如下命令将golden_top_hps.jic文件下载到DE25-Nano的QSPI flash当中:
quartus_pgm -m jtag -c 1 -o "pvi;output_files/golden_top_hps.jic"
启动开发板观察测试结果
参考【教程】Linux上用命令烧写SD卡和Windows上用Win32DiskImager工具一键烧写SD卡烧写SD卡并启动开发板。可以看到在Uart串口打印开发板Linux系统启动的过程中fpga led已经亮起,且有一个led闪烁:

本文部分图参考Altera文档: