Lattice FPGA开发全攻略:详解.bit、.jed等十余种输出文件格式及其区别
在Lattice FPGA的开发流程中,当我们使用Lattice Diamond、Radiant或早期的ispLEVER软件完成设计、综合、布局布线后,会生成多种格式的输出文件。这些文件是连接我们逻辑设计与物理硬件的桥梁,用于不同的编程场景------有的直接烧录FPGA的SRAM进行在线调试,有的固化于内部Flash实现上电启动,还有的用于外部配置芯片。本文将为你详细梳理Lattice FPGA常见的输出文件格式,帮助你在不同的应用场景下选择正确的文件。
一、核心编程文件:SRAM vs. 非易失性存储
根据编程目标是FPGA的易失性SRAM还是其内部/外部的非易失性存储器(如Flash),Lattice的编程文件主要分为以下两大类。
1. .bit 文件(比特流文件)
这是Lattice FPGA最常用的比特流文件之一,适用于所有基于SRAM配置的FPGA(如ECP系列、CrossLink-NX、Certus-NX等)。
- 定义 :.bit文件是用于配置FPGA器件SRAM单元的配置数据文件。它包含了配置FPGA内部所有可编程资源(查找表、触发器、块内存等)的完整数据。
- 格式 :它是一种二进制文件,通常以十六进制格式表示,不可打印。
- 用途 :主要用于通过JTAG等方式直接下载到FPGA的SRAM中,进行在线调试或功能验证。由于SRAM是易失性的,掉电后数据会丢失,因此每次上电都需要重新配置。
- 生成 :在Lattice Radiant或Diamond软件中,完成实现(Implement)流程后,会自动生成.bit文件。
2. .jed 文件(JEDEC文件)
JEDEC文件是遵循JEDEC标准(Joint Electron Device Engineering Council)的编程文件格式,主要用于配置Lattice的非易失性器件,如CPLD(如MachXO家族)或带有内部Flash的FPGA(如MachXO2、MachXO3等)。
- 定义 :.jed文件是符合JEDEC 42.1C标准的编程数据文件。它包含了要写入器件内部非易失性存储器(如配置Flash、用户Flash存储器、特征行等)的所有配置信息。
- 格式 :与二进制.bit文件不同,.jed文件是一种 ASCII文本格式 ,由ASCII字符"1"和"0"组成,因此是可打印的。这使得它容易被第三方编程器解析,用于大规模生产编程。
- 用途 :直接编程到器件的 内部非易失性存储器 (如Flash)中。编程成功后,器件掉电后不会丢失配置,上电即可自动将内部Flash中的数据加载到SRAM中启动。
- 适用器件 :适用于所有带有内部非易失性存储器的Lattice器件,包括MachXO家族、Platform Manager等。
核心区别:
- .bit :用于配置易失性的SRAM,适合在线调试。
- .jed :用于编程非易失性的内部Flash,用于固化程序,实现上电自启动。
二、辅助编程与配置文件:用于不同配置模式
在实际产品应用中,对于纯SRAM FPGA(如ECP5、CrossLink-NX),通常需要外挂一个SPI Flash来存储配置数据,由FPGA在上电时主动加载。为此,我们需要生成适用于外部Flash的文件。
3. .mcs 文件(PROM文件)
虽然Intel和Xilinx常用.pof或.mcs,但在Lattice Diamond软件中,也可以通过工具生成Intel格式的.mcs文件,用于编程外部PROM(可编程只读存储器)。
- 用途 :用于对板载的外部SPI Flash进行编程。
三、Lattice特有的工程与IP文件
除了最终的编程文件,Lattice的开发工具还会生成一系列特有的中间文件,用于管理IP核、约束和工程设置。
4. .lpc 文件(Lattice参数配置文件)
这是Lattice Diamond和Radiant软件中与IP核生成相关的核心文件。
- 定义 :.lpc文件是一个 文本文件 ,包含了用户在IPexpress或IP Catalog中为某个IP模块或IP核输入的所有配置参数值。
- 用途 :
- 配置存储 :当需要修改或重新生成IP时,双击.lpc文件可以直接打开IP配置界面,并载入之前设置的所有参数,方便进行修改或重新生成。
- 工程占位符 :在Project Navigator中,.lpc文件作为组成该IP核的多个文件(如.v、.vhd、.ngo)的占位符,保持了工程结构的简洁。
5. .ipx 文件(IP核清单文件)
在Lattice Radiant软件中,IP核的配置信息也常以.ipx格式存在。
- 用途 :类似于.lpc,.ipx文件是Radiant中IP核的清单文件。点击该文件可以重新打开IP配置器,对IP进行修改或重新生成。
6. .ldf 文件(Diamond工程文件)
这是Lattice Diamond软件的主工程文件。
- 用途 :用于在Diamond中管理和实现所有工程文件。它记录了工程中包含的源文件、约束文件以及各种实现策略。
四、调试与约束文件
7. .lpf 文件(Lattice偏好设置文件 - Lattice Preference File)
这是Lattice FPGA设计中最主要的约束文件。
- 用途 :.lpf文件用于存储 逻辑约束 ,包括引脚分配(Location)、I/O电平标准(I/O Type)、以及时序约束(如时钟频率、输入输出延迟)等。它是布局布线过程的输入。
8. .ldc / .sdc 文件(设计约束文件)
- 用途 :用于为Lattice综合引擎(LSE)或第三方综合工具(如Synplify Pro)指定设计特定的 时序约束 。.ldc是Lattice的版本,而.sdc是行业标准的Synopsys设计约束格式。
9. .rvl 文件(Reveal Inserter调试文件)
Lattice的Reveal逻辑分析仪工具是片上调试的核心。
- 定义 :.rvl文件定义了Reveal调试工程及其模块,标识了要追踪和触发的信号,并存储了追踪和触发的选项。
- 用途 :当你需要在FPGA运行时观察内部节点信号时,通过Reveal Inserter配置好探针和触发条件,这些设置就保存在.rvl文件中。综合实现时,这些设置会以额外的逻辑形式被植入到原有的设计中。
10. .rva 文件(Reveal Analyzer文件)
- 用途 :与.rvl配合使用,.rva文件定义了Reveal Analyzer工程,包含了波形视图中信号显示的相关数据。用于在采集到数据后进行分析。
五、中间文件与报告文件
在设计的各个阶段,Lattice工具也会生成各种中间文件和报告,用于调试、网表传递和设计检查。
| 文件后缀 | 主要用途 | 关键特点 |
|---|---|---|
| .ngd | 原生通用描述文件,包含设计的逻辑描述和层次结构 | ngdbuild的产物,用于映射到物理元件 |
| .ncd | 原生电路描述文件,分为_map.ncd(映射后)和最终带布局布线信息的.ncd | 相当于FPGA的物理版图描述 |
| .ngo | 原生通用对象文件,由EDIF转换而来,是映射过程的输入 | 可作为黑盒模块 |
| .edf/.edn | EDIF网表文件,综合工具(如Synplify)的标准输出 | 用于在不同EDA工具间传递设计 |
| .v/.vhd | Verilog/VHDL源文件或仿真文件 | 设计的逻辑描述 |
| .vo/.vho | 后仿真网表文件(Verilog/VHDL格式) | 用于布局布线后的功能仿真 |
| .sdf | 标准延时格式文件,包含时序信息 | 用于后仿真中的时序标注 |
| .twr | 时序报告文件,TRACE工具的产物 | 分析设计是否满足时序要求 |
| .par | 布局布线报告文件 | 查看布局布线过程中的信息和警告 |
| .ior | I/O时序分析报告 | 查看端口的建立、保持时间和时钟到输出的延时 |
总结:如何为你的Lattice项目选择正确的文件?
- 在线调试 :选择 .bit 文件,通过编程器直接下载到FPGA的SRAM中,快速验证逻辑功能。
- 固化到内部Flash(如MachXO2) :生成 .jed 文件,直接编程器件,实现上电启动。
- 固化到外部SPI Flash(如ECP5) :通过Diamond或Radiant的编程工具,生成 .mcs 或 .hex 文件,用于烧录外部Flash。
- 使用IP核 :记住 .lpc (Diamond) 或 .ipx (Radiant) 文件是你修改和配置IP的关键入口。
- 进行时序约束和引脚分配 :你需要编辑 .lpf 文件。
- 片上调试 :你需要创建 .rvl 文件来配置探针,并用 .rva 来分析波形。
- 查看设计结果 :翻阅 .twr (时序)、 .par (布局布线) 等报告文件,确认设计质量和健康状况。
理解这些文件格式,将帮助你在Lattice FPGA的开发道路上更加得心应手,无论是进行前期的调试,还是最终的量产部署。