4. Lattice Diamond与Radiant测试工程环境

Lattice 的两代主流 FPGA 开发工具——Diamond 与 Radiant——在测试工程的组织方式上差异明显。Diamond 面向 MachXO2/3、ECP5、iCE40 等较早期器件,采用"工程 + 策略 + 约束"的传统结构;Radiant 面向 MachXO3D/4、CrossLink-NX、Certus-NX/Pro、Avant 等新器件,采用"工程 + 策略 + 约束 + 时序分析 + 编程"一体化流程。理解两者的工程创建、约束管理、时序分析与编程文件生成路径,是搭建可复现测试环境的前提。

一、工程创建:从器件选型到目录结构

Diamond 中新建工程通过 File → New → Project 向导完成,关键输入是器件系列、具体型号、速度等级、封装与温度等级。例如测试 MachXO3LF 时选择 LCMXO3LF-6900C-5BG256C,其中 5 表示速度等级,C 表示商业级。工程目录下会自动生成 .ldf 工程文件、.lpf 约束文件、impl1 实现目录与 *.prj 源文件列表。Radiant 中对应的是 .rdf 工程文件、.ldc 约束文件与 impl_1 目录,器件选型粒度更细,例如 LIFCL-40-9BG256C 中的 9 表示速度等级。 测试工程与量产工程的一个关键区别是:测试工程通常需要保留可切换的调试端口、可配置的时钟源和可观测的测试点,因此建议在工程创建阶段就规划好目录结构,把 RTL、约束、脚本、激励文件、输出文件分开放置,便于后续自动化调用。

二、约束文件管理:LPF 与 LDC 的差异

Diamond 使用 LPF(Lattice Preference File),Radiant 使用 LDC(Lattice Design Constraints),两者语法相近但关键字与支持范围不同。测试工程中最常用的约束包括:引脚位置约束、IO 标准约束、时钟频率约束、时序例外约束。

# Diamond LPF 示例
LOCATE COMP "clk_50m" SITE "P3";
IOBUF PORT "clk_50m" IO_TYPE=LVCMOS33;
FREQUENCY PORT "clk_50m" 50 MHz;
LOCATE COMP "test_out[0]" SITE "R1";
IOBUF PORT "test_out[0]" IO_TYPE=LVCMOS33 DRIVE=8;

# Radiant LDC 示例
ldc_set_location -site {P3} [get_ports clk_50m]
ldc_set_port -iobuf {IO_TYPE=LVCMOS33} [get_ports clk_50m]
create_clock -name clk_50m -period 20 [get_ports clk_50m]
ldc_set_location -site {R1} [get_ports test_out[0]]

约束管理最容易出问题的地方是引脚复用与 IO 标准冲突。测试工程中常把多个功能映射到同一组引脚,若 LPF/LDC 中未显式声明 IO_TYPE,工具会按默认值推断,导致实际电平与预期不符。建议在约束文件顶部集中定义所有 IO 标准,并在每次修改后运行一次约束检查。

三、时序分析与编程文件生成

Diamond 的时序分析通过 Timing Analysis 视图完成,输入是 .lpf 中的时钟约束与实现后的 .ncd 文件,输出是建立/保持时间报告与时钟域交叉报告。Radiant 的 Timing Analyzer 基于 SDC 风格约束,报告更接近通用 EDA 流程。测试工程中应重点关注三类路径:跨时钟域路径、异步复位路径、IO 输入输出路径。

编程文件生成方面,Diamond 输出 .jed(JTAG 下载)与 .bin(配置 Flash),Radiant 输出 .bit 与 .bin。测试工程通常需要同时保留 JTAG 下载文件和 Flash 配置文件,前者用于快速迭代,后者用于模拟真实上电流程。

Diamond 与 Radiant 测试工程环境对照 Lattice Diamond MachXO2/3 · ECP5 · iCE40 工程创建 .ldf 工程 · .prj 源列表 · impl1 目录 约束文件 .lpf LOCATE / IOBUF / FREQUENCY 时序分析 Timing Analysis · .ncd 报告 编程文件 .jed (JTAG) · .bin (Flash) 测试工具链 Reveal Analyzer · Programmer Lattice Radiant MachXO3D/4 · CrossLink-NX · Certus-NX/Pro · Avant 工程创建 .rdf 工程 · impl_1 目录 · IP 集成 约束文件 .ldc ldc_set_location / create_clock 时序分析 Timing Analyzer · SDC 风格 编程文件 .bit (JTAG) · .bin (Flash) 测试工具链 Reveal Analyzer · Programmer · Power Calculator 语法 差异 关键

四、测试相关工具链集成

Diamond 的测试工具链以 Reveal Analyzer 为核心,通过 JTAG 在运行时抓取内部信号,配合 Programmer 完成下载与 Flash 烧写。Radiant 在此基础上增加了 Power Calculator 与更完整的 IP 集成流程,Reveal Analyzer 的触发条件配置也更灵活。测试工程中建议把 Reveal 的触发信号、采样深度、时钟域配置写入独立的 .rvl 文件,与主约束分离,避免调试配置污染量产约束。

测试工程与量产工程应使用同一套 RTL 与约束基线,仅通过宏定义或独立约束文件切换调试端口。这样在测试通过后,只需移除调试相关约束即可生成量产编程文件,避免"测试版能跑、量产版跑不通"的常见问题。

五、可复现测试工程检查清单

检查项Diamond 对应Radiant 对应判断依据
器件型号与速度等级.ldf 中器件配置.rdf 中器件配置与实物丝印一致
IO 标准集中声明.lpf 顶部 IOBUF 段.ldc 顶部 ldc_set_port 段无默认推断告警
时钟约束完整FREQUENCY 覆盖所有时钟create_clock 覆盖所有时钟时序报告无未约束时钟
跨时钟域路径Timing Analysis 报告Timing Analyzer 报告无未处理 CDC 告警
编程文件双版本.jed + .bin.bit + .binJTAG 与 Flash 均可下载
调试配置独立.rvl 独立文件.rvl 独立文件移除后不影响功能

实际搭建时,建议先用一个最小工程(仅时钟输入 + 一个计数器输出到测试引脚)验证工具链是否完整:工程能创建、约束能生效、时序能分析、编程文件能生成、板级能观测。这个最小闭环跑通后,再逐步加入被测逻辑与调试端口,可以显著降低环境问题与设计问题混杂带来的排查难度。