1. Quartus SoC开发环境搭建
Quartus SoC 软硬件协同开发的第一步,是把“FPGA 逻辑开发”和“ARM 处理器软件开发”两条工具链装到同一台主机上,并让它们能够通过同一块开发板协同工作。本章围绕 Intel/Altera 的 Cyclone V SoC(DE 系列开发板常见主芯片,如 5CSXFC6D6F31C6)展开,完成从工具安装、驱动配置到第一个 Hello World 程序下载运行的全过程。
一、需要安装的软件与各自职责
Quartus SoC 开发涉及三类工具,它们分工明确,缺一不可:
- Quartus Prime:负责 FPGA 侧的硬件设计,包括引脚分配、时序约束、生成
.sof配置文件,以及通过 Platform Designer(原 Qsys)搭建包含 HPS(Hard Processor System)的硬件系统。 - SoC EDS(SoC Embedded Design Suite):提供 ARM 交叉编译工具链、Preloader 生成器、Device Tree Generator、以及
embedded_command_shell.sh等脚本环境,是连接硬件与软件的桥梁。 - ARM DS-5 或 GNU 工具链:用于编写、编译、调试运行在 HPS 上的裸机程序或 Linux 应用。DS-5 提供图形化调试,GNU 工具链(
arm-none-eabi-或arm-linux-gnueabihf-)则更适合命令行与脚本化流程。
版本匹配非常关键。以 Quartus Prime Standard Edition 18.1 为例,应搭配 SoC EDS 18.1,两者版本号必须一致,否则 Platform Designer 生成的硬件信息与 EDS 中的工具可能不兼容。安装顺序建议先装 Quartus Prime,再装 SoC EDS,最后配置 DS-5 或 GNU 工具链,这样 EDS 安装程序能自动识别 Quartus 的安装路径。
二、USB-Blaster 驱动配置
USB-Blaster 是主机与 FPGA 之间下载配置文件的物理通道。在 Windows 下,安装 Quartus Prime 时会一并安装 USB-Blaster 驱动,但首次插入下载线后,需要在设备管理器中确认其被识别为 Altera USB-Blaster。若显示为未知设备,可手动指定驱动路径:安装目录\quartus\drivers\usb-blaster。
在 Linux 下,需要添加 udev 规则,使普通用户无需 root 权限即可访问下载线。典型做法是创建 /etc/udev/rules.d/51-usbblaster.rules,写入 USB-Blaster 的 VID/PID(Altera 为 09fb:6001 等),然后重新加载 udev 规则。配置完成后,可用 jtagconfig 命令验证:若输出中能看到 USB-Blaster 及所连接的器件(如 5CSXFC6D6F31),说明驱动与硬件链路正常。
jtagconfig 能否识别下载线,再看能否识别 FPGA 器件,最后才看能否成功下载 .sof。任何一步失败,都应先解决该步,而不是直接怀疑工程。三、创建第一个 Hello World 工程
Hello World 工程的目标是:在 HPS 上运行一段裸机程序,通过串口打印字符串。它验证的是“硬件系统 + 软件程序 + 下载运行”这条完整链路。
第一步,在 Quartus Prime 中新建工程,器件选择开发板对应的 Cyclone V SoC 型号。第二步,打开 Platform Designer,添加 HPS 组件,配置其时钟、SDRAM、UART、SD/MMC 等接口。对于 Hello World,至少需要使能 UART,并将其引脚映射到开发板上的 USB-UART 接口。第三步,生成 HDL,回到 Quartus 完成引脚分配与编译,得到 .sof 文件。第四步,在 SoC EDS 的 embedded_command_shell.sh 环境中,使用 bsp-create-settings 和 bsp-generate-files 生成 Preloader 与设备树,再生成 uboot 或直接生成裸机 BSP。
第五步,编写 Hello World 源码。裸机程序通常包含 printf 重定向到 UART 的代码,编译命令示例:
arm-none-eabi-gcc -g -O0 hello.c -o hello.elf \
-T linker.ld -nostartfiles
arm-none-eabi-objcopy -O binary hello.elf hello.bin
第六步,将 .sof 通过 USB-Blaster 下载到 FPGA,再将 hello.bin 通过 DS-5 或 quartus_hps 工具加载到 HPS 的片上 RAM 或 SDRAM 中运行。若串口终端(如 115200-8-N-1)打印出 “Hello World from HPS!”,则说明整条链路打通。
四、环境搭建的关键关系图
下图把主机工具链、下载通道、开发板内部结构以及软件运行位置之间的关系集中呈现,便于在排障时快速定位问题出在哪一段。
五、常见问题与判断依据
环境搭建阶段最容易卡住的不是代码,而是“链路不通”。如果 jtagconfig 报 “No JTAG hardware available”,优先检查 USB-Blaster 驱动与 USB 线;如果能看到下载线但看不到器件,检查开发板是否上电、JTAG 排线是否插反;如果 .sof 能下载但串口无输出,则要回到 Platform Designer 确认 UART 是否使能、引脚是否与开发板原理图一致、波特率是否匹配。
另一个高频问题是工具链路径未生效。在 Linux 下执行 embedded_command_shell.sh 后,arm-none-eabi-gcc 应能直接调用;若提示找不到命令,说明 EDS 环境变量未正确加载,或安装时未与 Quartus 关联。此时应检查 PATH 中是否包含 EDS 的 bin 目录,并确认 QUARTUS_ROOTDIR 指向正确。
完成本章后,你应当拥有一套可重复使用的环境:Quartus Prime 能编译含 HPS 的硬件工程,SoC EDS 能生成 Preloader 与设备树,DS-5 或 GNU 工具链能编译 ARM 程序,USB-Blaster 能稳定下载,串口能观察到程序输出。这套环境是后续所有 SoC 协同开发实验的基础。