2. PolarFire开发环境搭建与第一个工程

PolarFire 器件的开发流程围绕 Microchip 的 Libero SoC 集成设计环境展开。与许多 FPGA 工具链类似,它把设计输入、约束、综合、布局布线、时序分析和比特流生成串成一条完整链路,但 PolarFire 的特别之处在于:器件内部集成了 RISC-V 硬核处理器(MSS)、DDR 控制器、SerDes 以及安全加密模块,因此工程创建阶段就必须明确是否启用这些硬核资源,否则后续引脚约束和时序约束会缺少对应接口。本节以“点亮一个 LED 并让计数器在引脚上输出”为最小可运行目标,完整走通从安装到下载的全过程。

安装 Libero SoC 与准备 License

Libero SoC 的安装包可从 Microchip 官网获取,当前主流版本为 Libero SoC v2023.x 或 v2024.x,安装时建议选择“Complete”模式,确保 ModelSim、Synplify Pro、Identify 等配套工具一并安装。安装路径不要包含中文或空格,例如使用 C:\Microchip\Libero_SoC_v2024.1,否则综合脚本调用时容易出现路径解析错误。

License 是 Libero 能否正常综合的关键。Microchip 提供免费的 Silver License,对 PolarFire 器件支持到一定规模,适合教学与原型验证。申请流程是:在 Microchip 官网注册账号,进入“Manage Licenses”页面,选择 Libero Silver 并填写网卡 MAC 地址,提交后会收到一个 .dat 授权文件。将该文件放到固定目录,例如 C:\Microchip\license\Libero_Silver.dat,然后设置环境变量 LM_LICENSE_FILE 指向该文件,或在 Libero 的 Project → Preferences → License 中手动指定。验证方法是打开 Libero,查看 Help → About 中 License 状态是否显示为“Silver”且未过期。

如果 License 未生效,综合阶段会报“License checkout failed”或直接禁用 Synthesis 按钮。此时优先检查 MAC 地址是否与申请时一致,以及环境变量是否在重启 Libero 后生效。

新建工程与器件选型

启动 Libero 后选择 File → New Project,向导会依次要求填写工程名、路径、器件系列和具体型号。教学示例选用 MPF300T-1FCG1152E,这是 PolarFire 300K 逻辑单元、FCG1152 封装、工业级速度等级的常见型号。器件选型一旦确定,后续引脚约束必须与该封装的 Bank 和引脚编号严格对应,不能随意更改。

工程创建完成后,Libero 会自动生成一个顶层 HDL 文件框架。这里不依赖 IP 核,直接手写一个 24 位计数器,把最高位输出到 LED 引脚,用于观察分频效果。示例代码如下:

module led_blink (
    input  wire clk_50m,
    input  wire rst_n,
    output wire led
);
    reg [23:0] cnt;
    always @(posedge clk_50m or negedge rst_n) begin
        if (!rst_n)
            cnt <= 24'd0;
        else
            cnt <= cnt + 1'b1;
    end
    assign led = cnt[23];
endmodule

50 MHz 时钟下,24 位计数器最高位翻转周期约为 2^24 / 50e6 ≈ 0.335 秒,肉眼可见闪烁,适合作为“第一个工程”的观察对象。

引脚约束与综合布局布线

引脚约束在 Libero 中通过 I/O Editor 或 .pdc 约束文件完成。打开 Design → I/O Editor,把 clk_50m 分配到开发板上的 50 MHz 晶振引脚,rst_n 分配到按键引脚,led 分配到某个用户 LED 引脚。示例分配如下:

端口方向引脚编号I/O 标准说明
clk_50m输入E3LVCMOS 1.8V50 MHz 有源晶振
rst_n输入F4LVCMOS 1.8V低有效复位按键
led输出G5LVCMOS 1.8V用户 LED

约束完成后依次执行 Synthesis、Place & Route、Verify Timing。综合阶段 Synplify Pro 会把计数器映射为 24 个触发器;布局布线阶段 Libero 会把这些触发器分配到器件内部的逻辑单元,并连接时钟网络。时序验证通过的标准是 Setup Slack 和 Hold Slack 均为正值,对于 50 MHz 时钟,Setup Slack 通常有较大裕量,若出现负值,应检查时钟约束是否已正确声明为 50 MHz。

PolarFire 第一个工程:从 HDL 到比特流的数据流与工具链 led_blink.v 24 位计数器 Synthesis Synplify Pro Place & Route 布局布线 Timing Verify Setup / Hold Slack Generate Bitstream .stp / .spi FlashPro Express JTAG 下载 PolarFire 器件 LED 闪烁 .pdc 约束 引脚 / 时钟 关键检查点: ① License 状态为 Silver 且未过期 ② 引脚编号与封装一致 ③ Setup/Hold Slack 均为正 ④ JTAG 链识别到器件 ID

生成比特流与下载验证

时序验证通过后,执行 Generate Bitstream,Libero 会输出 .stp 或 .spi 文件。对于 JTAG 调试,使用 FlashPro Express 工具:连接开发板 JTAG 接口,新建工程并选择对应器件,加载比特流文件后点击 Program。下载成功的标志是 FlashPro 日志中出现“Programming completed successfully”,同时开发板上的 LED 开始以约 0.67 秒的周期闪烁(亮 0.335 秒、灭 0.335 秒)。

如果 LED 不亮,按以下顺序排查:先用示波器或逻辑分析仪测量 clk_50m 引脚是否有 50 MHz 波形,确认时钟输入正常;再检查 rst_n 是否被拉低导致计数器一直复位;最后确认 LED 的极性——部分开发板 LED 为低电平点亮,此时需要把输出取反。这个排查顺序与信号链方向一致,能快速定位问题所在环节。

第一个工程的价值不在于功能复杂,而在于把“安装—License—建工程—约束—综合—布局布线—比特流—下载”这条链路完整跑通。后续章节中的工业通信协议栈、边缘控制算法,都会复用这套工程骨架,只是在此基础上增加 IP 核、软核处理器和更复杂的时序约束。