2. 开发环境搭建与首个工程创建
要让 CertusPro-NX 真正跑起来,第一步不是写代码,而是把工具链、授权、器件型号和约束文件这四件事对齐。本节以 Lattice Radiant 为工具,以一款典型 CertusPro-NX 器件(示例选用 LFCPNX-100,FcCSP 封装,速度等级 8)为对象,完整走一遍从安装到首次综合实现的过程。所有参数均为教学示例,实际项目请以官方数据手册和板卡原理图为准。
一、安装 Radiant 与 License 配置
Radiant 是 Lattice 面向 Nexus 与 CertusPro-NX 系列的官方集成开发环境,安装包通常为 Windows/Linux 版本,体积在数 GB 级别。安装时建议选择默认路径,避免中文目录和空格,否则后续综合脚本调用容易出现路径解析问题。安装完成后,首次启动会弹出 License 配置向导。
License 有三种常见形态:Node-Locked(绑定网卡 MAC)、Floating(服务器分发)和订阅式(Lattice 账户在线激活)。对于个人学习或单机开发,最常用的是 Node-Locked。配置时需要提供主机 ID(即网卡物理地址),在 Lattice 官网生成 license.dat 后,通过 Help → License 导入。判断 License 是否生效,可以看启动界面是否显示“Licensed”状态,或在命令行执行 radiant -version 查看授权信息。若提示“License not found”,优先检查环境变量 LM_LICENSE_FILE 是否指向正确的 .dat 文件。
C:\Lattice\license),不要放在桌面或临时文件夹,避免系统清理后失效。二、器件选型与新建工程
CertusPro-NX 家族包含多个密度等级,从 LFCPNX-50 到 LFCPNX-100 不等,封装有 QFN、FcCSP、caBGA 等。选型时主要看三点:逻辑单元数量、封装引脚数和可用 SerDes/PCIe 资源。例如 LFCPNX-100 提供约 100K 逻辑单元,适合中等规模接口桥接和图像处理;若只是做简单的 GPIO 扩展,LFCPNX-50 更经济。
新建工程时,Radiant 会要求填写工程名、路径、器件型号、封装、速度等级和综合工具。这里的关键是器件型号必须与板卡实际焊接的芯片一致,否则引脚约束会报错。工程创建后,目录结构会自动生成 src、constraint、impl 等文件夹。建议在 src 下新建一个顶层 Verilog 文件,例如 top.v,先写一个最简单的 LED 闪烁逻辑作为验证。
module top(
input wire clk_50m,
input wire rst_n,
output reg led
);
reg [24:0] cnt;
always @(posedge clk_50m or negedge rst_n) begin
if (!rst_n) begin
cnt <= 25'd0;
led <= 1'b0;
end else if (cnt == 25'd24_999_999) begin
cnt <= 25'd0;
led <= ~led;
end else begin
cnt <= cnt + 1'b1;
end
end
endmodule
这段代码用 50 MHz 时钟分频,每 0.5 秒翻转一次 LED,便于肉眼观察。注意复位信号低有效,与大多数开发板按键一致。
三、引脚约束与首次综合实现
引脚约束是新手最容易出错的地方。Radiant 使用 .lpf 文件(Lattice Preference File)描述引脚位置、电平和时序。例如把 clk_50m 绑定到引脚 A1,led 绑定到 B2,rst_n 绑定到 C3,写法如下:
ldc_set_location -site {A1} [get_ports clk_50m]
ldc_set_location -site {B2} [get_ports led]
ldc_set_location -site {C3} [get_ports rst_n]
ldc_set_port -iobuf {IO_TYPE=LVCMOS33} [get_ports {clk_50m led rst_n}]
其中 LVCMOS33 表示 3.3V 电平标准,必须与板卡供电一致。若引脚分配错误,综合阶段可能通过,但实现阶段会报“IO placement conflict”。
完成约束后,依次执行综合(Synthesis)和实现(Place & Route)。综合把 Verilog 映射为门级网表,实现则完成布局布线并生成比特流。首次运行建议勾选“Generate Bitstream”和“Timing Report”。判断是否成功,看三个指标:综合无 error、实现无 critical warning、时序报告中建立时间(Setup)和保持时间(Hold)均为正裕量。若时序为负,可以尝试降低时钟频率或优化逻辑层级。