2. 开发环境搭建与工具链配置

PolarFire SoC 的开发不是单一软件能完成的任务,而是由 Libero SoC、SoftConsole、FlashPro Express 以及 RISC-V GCC 工具链共同组成的一条完整工具链。理解它们各自负责什么、如何衔接,比单纯记住安装步骤更重要。本章围绕“装什么、装在哪、怎么配、如何验证”展开,最终目标是完成一个可编译、可下载的最小工程。

一、四类工具的分工

Libero SoC 是 FPGA 设计的主平台,负责器件选型、IP 配置(包括 RISC-V 子系统 MSS)、引脚约束、综合布局布线,并生成 FPGA 配置数据流(.job/.bit 等)。SoftConsole 是基于 Eclipse 的 RISC-V 嵌入式软件开发环境,负责 C/C++ 应用工程、链接脚本、调试配置,它内部调用 RISC-V GCC 完成编译。FlashPro Express 是独立的编程下载工具,用于把 Libero 生成的配置数据流烧写到目标板或外部 SPI Flash。RISC-V GCC 工具链则是 SoftConsole 背后的编译器、汇编器、链接器与调试器集合。

四者的关系可以概括为:Libero 产出“硬件平台”,SoftConsole + GCC 产出“软件镜像”,FlashPro Express 负责“把两者落到芯片上”。下图给出这条工具链的数据流与衔接点。

PolarFire SoC 工具链数据流 Libero SoC 器件选型 / MSS 配置 引脚约束 / 综合布线 生成 .job / .bit SoftConsole C/C++ 工程管理 链接脚本 / 调试配置 调用 GCC 编译 RISC-V GCC riscv64-unknown-elf-gcc 汇编 / 链接 / objcopy 生成 .elf / .hex FlashPro Express 加载 .job 编程文件 JTAG 烧写 / SPI Flash 校验与回读 PolarFire SoC 目标板 FPGA 配置 + RISC-V 固件 UART / JTAG 调试口 运行验证 硬件描述 编译调用 .elf/.hex .job 编程文件 JTAG 下载

二、安装顺序与版本匹配

推荐按“Libero SoC → SoftConsole → FlashPro Express → 确认 GCC”的顺序安装。Libero 安装包通常已包含 FlashPro Express,若单独安装需注意版本一致。关键原则是:Libero、SoftConsole、FlashPro Express 三者应使用同一发布年份的版本,例如 Libero SoC v2024.1 对应 SoftConsole v2024.1。版本错配最典型的症状是 SoftConsole 无法识别 Libero 导出的 MSS 配置,或 FlashPro 无法加载 .job 文件。

安装时建议全部使用默认路径,避免中文或空格目录。Libero 安装完成后需通过 License 管理器加载许可证;SoftConsole 为免费工具,无需许可证。安装结束后可在命令行验证 GCC:

riscv64-unknown-elf-gcc --version
# 期望输出类似:
# riscv64-unknown-elf-gcc (Microchip GCC 12.2.0) 12.2.0

若提示找不到命令,说明 SoftConsole 自带的工具链未加入 PATH,可在 SoftConsole 安装目录下的 riscv-unknown-elf-gcc/bin 中确认可执行文件是否存在,再手动加入环境变量。

三、创建首个工程

第一个工程建议采用“Libero 建硬件 + SoftConsole 建软件”的最小组合。在 Libero 中新建工程,器件选择 MPFS250T(以官方 PolarFire SoC Icicle Kit 为例),在 SmartDesign 中例化 MSS(Microprocessor Subsystem),保留默认的 UART0 与 JTAG 调试接口,生成 HDL 顶层后执行综合与布局布线,最后导出 .job 编程文件。同时在 Libero 中通过“Export Firmware”导出 MSS 配置,供 SoftConsole 使用。

在 SoftConsole 中新建 RISC-V 工程,选择“PolarFire SoC”模板,导入上一步的 MSS 配置。工程会自动生成链接脚本与启动代码。编写一个最小 main 函数:

#include <stdio.h>
int main(void) {
    printf("PolarFire SoC boot OK\r\n");
    while (1) { }
    return 0;
}

编译后应生成 .elf 文件。若编译报错“cannot find -lc”,通常是链接脚本路径或库搜索路径未正确指向工具链的 riscv64-unknown-elf/lib,检查工程属性中的 Libraries 与 Library Search Path 即可。

四、下载与验证

下载分两步:先用 FlashPro Express 烧写 Libero 生成的 .job,完成 FPGA 配置;再通过 SoftConsole 的调试配置将 .elf 下载到 RISC-V 核。若使用 Icicle Kit,也可将固件打包进 SPI Flash 实现上电自启动。

验证时打开串口终端,波特率设为 115200,复位目标板。若看到 “PolarFire SoC boot OK” 输出,说明工具链、硬件配置与软件编译均已打通。若串口无输出,按以下顺序排查:确认 JTAG 连接与 FlashPro 是否报告编程成功;确认 UART 引脚约束与板上丝印一致;确认 .elf 确实被下载而非仅编译;最后检查时钟与复位配置是否与 MSS 设置匹配。

建议在首次成功后将 Libero 工程、SoftConsole 工程与 FlashPro 工程分别备份,并记录各工具版本号。后续章节的驱动开发与外设调试都基于这套已验证的环境,避免重复踩版本兼容的坑。

五、常见问题速查

现象可能原因处理方向
SoftConsole 无法导入 MSSLibero 与 SoftConsole 版本不一致统一为同一年份版本
GCC 命令找不到工具链未加入 PATH手动添加 bin 目录到环境变量
编译报 -lc 缺失库搜索路径未配置检查工程 Libraries 设置
FlashPro 加载 .job 失败编程文件与器件不匹配确认器件型号与 .job 来源一致
串口无输出UART 约束或下载未生效核对引脚约束与下载日志

完成本章后,你应当拥有一套版本一致、路径清晰、可编译可下载的工具环境,并能独立判断“编译失败”与“下载失败”分别属于软件链还是硬件链的问题。这是后续所有 PolarFire SoC 开发工作的起点。