Intel FPGA Arria 10 SoC(下)- 软件启动设计篇

【时间:2024 年 06 月 14 日, 来源:Cytech Engineer, 作者:Alvin Ma】

上一篇《Arria 10 SoC(上)- 硬件设计篇 》简单介绍了Arria 10 SoC FPGA在启动时,FPGA部分所需要的主要设计工作。本篇为下篇《Arria 10 SoC(下)- 软件启动设计篇》,将为大家讲述如何运用 Quartus 编译产生的文件来产生 ARMboot文件,以及简单的调试介绍。

一、Uboot的产生

当 Qsys 最小系统完成后,在 Quartus工程内例化 Qsys 所产生的最小系统,然后编译整个Quaruts工程。
注:ARM方面分配的 IO 需在顶层定义 Input/Output,但不需要在 Pin Planner做管脚约束。

  • 当编译完成后,在工程主目录下会生成 Handoff 文件夹,我们需使用该文件夹产生 Uboot
  • Arria 10系列与 Cyclone V系列不同之处在于 uboot的编译需放在 Linux系统下( UbuntuCentOS皆可)。 
  • 在 ~intelFPGA/16.1/embedded 下,执行 embedded_command_shell.sh 的脚本,输入 bsp-editor 命令,打开 uboot配置界面,如下:

图 1 Linux下的编译uboot的shell

在File工具栏下,新建 bsp,路径指到 handoff 所在。如下:

图 2 Uboot配置

注:external_fpga_config 在调试阶段是个很方便的手段,当使能该选项后,可以通过 Quartus工具内的 Programmer下载 sof文件以配置 FPGA。使能后,当boot代码执行到此处时,会等待外部 FPGA配置。 好处在于,Arria 10的 rbf文件相对较大,若存在Flash内由boot代码去加载,那每次烧写/擦除 QSPI Flash会浪费很多时间。

  • 配置完成后,点击 Generate,此时,在相应的路径下会生成 software/uboot_spl 文件夹,该文件夹内存在一个 devicetree.dts 的文件。
  • 进入该文件夹内使用 make指令编译 uboot
  • 工具的安装路径下,存在压缩好的 uboot源码,从log可以看到,其第一件事会去解压 uboot源码,然后执行编译,具体的编译过程,有兴趣可以研究 Makefile文件。
  • Makefile 的规则是将 dts 文件编译成 dtb,然后与生成的 uboot.bin 与 devicetree.dtb 合成 u_boot_w_dtb.bin 文件,再通过 mkimage 工具给其加上头信息,产生 uboot_w_dtb-mkpimage.bin,该文件即为 SoC芯片的 uboot镜像文件,将其存入对应的配置器件内即可。

图 3 编译uboot对应log
图 4 编译uboot对应log

Linux下进行的第二件事,通过 mkimage 工具为所产生的 rbf文件加上头信息。如下:

mkimage -A arm -T firmware -C none -a 0 -e 0 -n "RBF" -d ./xxx.rbf ./xxx.rbf.mkimage

产生的 xxx.rbf.mkimage 文件即为 arm 在配置 FPGA 时所需要的 FPGA 配置文件。

二、Uboot的调试

标准的boot log如下:

  • CPU: Altera SOCFPGA Arria 10 Platform
  • BOARD: Altera SOCFPGA Arria 10 Dev Kit
  • I2C:   ready
  • DRAM:  WARNING: Caches not enabled
  • SF: Read data capture delay calibrated to 3 (0 - 6)
  • SF: Detected N25Q1024A with page size 256 Bytes, erase size 4 KiB, total 128 MiB
  • Full Configuration Succeeded.
  • SF: Detected N25Q1024A with page size 256 Bytes, erase size 4 KiB, total 128 MiB
  • DDRCAL: Success
  • INFO: Skip relocation as SDRAM is non secure memory
  • Reserving 2048 Bytes for IRQ stack at: ffe346e8
  • DRAM: 2 GiB
  • WARNING: Caches not enabled
  • SF: Read data capture delay calibrated to 8 (0 - 15)
  • SF: Detected N25Q1024A with page size 256 Bytes, erase size 4 KiB, total 128 MiB

*** Warning:  bad CRC, using default environment

  • In: serial
  • Out: serial
  • Err: serial
  • Model: SOCFPGA Arria10 Dev Kit
  • Net: Phy not found
  • dwmac.ff800000
  • Hit any key to stop autoboot:  0

注意几处:
A. Full Configuration Succeeded 标志着 FPGA的配置完成,使用的是全配置模式,同样,有 early release mode,意味着在uboot阶段仅加载FPGA的SDRAM 对应的IO,使得uboot能正常往下执行。

设置方式:

Quartus -> Device -> Device and Pin option -> General -> Option -> Enable the HPS early release of HPS IO.

B. DDRCAL: Success 标志着 SDRAM 校准通过,若此处打印 DDRCLK: Fail,相对应的log会输出resetting 的 log 信息,并且 log 不断循环。

这两处是经常导致 uboot无法正常引导的因素。

注: 因为Intel所提供的 uboot源码,在硬件上对应其相应的开发板,举个例子,如 EMAC的 PHY,Intel开发板使用 KSZ9031,若您的设计中PHY型号不匹配,需在 uboot源码内修改相应的 PHY驱动,否则在 uboot 下将无法使用网口。

Uboot的调试手段

调试手段千变万化,可根据现象相应调整,这里建议两种方式:
1.    若您对 uboot源码足够了解,可根据 log输出的信息,到对应代码处加打印,定位具体问题点。
2.    若您对 uboot源码接触不多,建议您使用 Eclipse工具调试。

Eclipse的调试方式

DS-5是 ARM所提供的开发工具,在 socEDS 安装完成后(按照路径下有 embedded文件夹),会自动询问您是否安装 DS-5

打开 DS-5, 使用import选项将进的 uboot源码导入到工程内,如下:

图 5 通过DS-5导入工程

使用 Existing Code as Makefile Project, 然后切换至对应的路径处。

图 6 调试界面配置
  • 红色框:双击 DS-5 Debugger,新建调试标签页,新建名为New_configuration,可自由修改。
  • 黄色框: 选择对应的器件,此外,根据自己应用情况,选择模式,uboot是 Bare Metal的一种。
  • 蓝色框:选择调试介质,使用FPGA的下载器usb-blaster
  • 绿色框:点开 Browse,选择对应的usb-blaster设备

切换到debugger下

图 7 调试界面配置

红色框:选择从断点处,开始调试,指明调试的ds文件

调试界面如下,F8为全执行,F5为单步执行,根据自身情况设置断点单步调试,定位问题具体问题所在。

图 8 调试窗口

三、总结

以上内容为整个 Arria 10 SoC 最小系统的设计流程,SoC类芯片因为将 FPGA + ARM 合在了同一个芯片中,从板子的面积,芯片的成本 以及系统的稳定性上都优于 FPGA+ARM 的分离设计方案。如您对此类芯片有更多的兴趣,可点击下方[联系我们],提交您的疑问,我们骏龙科技愿为您做更深入的讲解。

联系我们