Xilinx FPGA开发全攻略:详解.bit、.bin、.mcs等十余种输出文件格式及其区别
在Xilinx FPGA(现在属于AMD)的开发流程中,当我们使用Vivado或ISE软件完成设计、综合、实现后,会生成多种格式的输出文件。这些文件是连接逻辑设计与物理硬件的桥梁,用于不同的编程场景——有的直接烧录FPGA的SRAM进行在线调试,有的固化于外部Flash实现上电启动,还有的用于加密、回读验证等高级功能。本文将为你详细梳理Xilinx FPGA常见的输出文件格式,帮助你在不同的应用场景下选择正确的文件。
一、核心编程文件:从调试到固化的基石
1. .bit 文件(比特流文件)
这是Xilinx FPGA最核心、最常用的编程文件格式,适用于所有基于SRAM工艺的Xilinx FPGA(如Spartan系列、Artix系列、Kintex系列、Virtex系列等)。
定义:.bit文件是一个二进制文件,包含了两部分核心内容:专有的文件头信息和完整的FPGA配置数据。文件头中包含了器件型号、设计名称、生成时间、用户指定的ID码等元信息。
格式:二进制格式,不能直接用文本编辑器查看,但可以通过file命令(Linux/Mac/Git Bash)读取其文件头信息,例如显示:Xilinx BIT data - from top.ncd; UserID=0x12345678 - for xc7k325tffg900 - built 2023/05/15(10:22:26)。
用途:
- 在线调试:通过JTAG直接下载到FPGA的SRAM中,快速验证逻辑功能。由于SRAM是易失性的,掉电后数据会丢失。
- 作为中间文件:是生成其他所有编程文件(如.mcs、.bin)的基础输入。
生成方式:在Vivado中“Generate Bitstream”,或在ISE中通过BitGen工具生成。
2. .rbt 文件(Raw BIT File)
定义:.rbt文件是.bit文件的ASCII(文本)版本,本质上是同一个比特流数据的可读表示。
用途:主要用于调试目的,当需要查看或验证比特流中的具体数据内容时使用。也用于需要手动处理配置数据的场景。
3. .bin 文件(Raw Binary File)
定义:纯粹的二进制配置文件,不包含.bit文件中的文件头信息,只包含纯配置数据。
用途:
- 嵌入式系统启动:非常适合被ARM、MicroBlaze或其他处理器直接从存储器(如SD卡、QSPI Flash)读取,通过被动配置接口发送给FPGA。
- SPI Flash直接烧录:对于需要将FPGA配置文件存储在外部SPI Flash的场景,.bin是常见的选择。
- MultiBoot/远程更新:在多启动或远程升级应用中,.bin格式因其简洁性而广泛使用。
生成方式:在Vivado中勾选“bin_file”选项,或在ISE BitGen设置中开启“Create Binary Configuration File”(-g Binary:Yes)。
4. .jed 文件(JEDEC文件)
定义:遵循JEDEC标准的编程文件格式,主要用于Xilinx的CPLD器件(如XC9500系列、CoolRunner系列)。
用途:编程Xilinx CPLD的内部非易失性存储器(Flash/EEPROM)。与FPGA的.bit不同,.jed文件编程后掉电不丢失。
技术细节:.jed文件描述的是逻辑熔丝的最终状态(通常以ASCII的“0”和“1”表示),编程时需要根据具体器件的物理布局进行“重排”(scramble)。
二、固化与存储文件:让FPGA“上电即运行”
对于SRAM FPGA,必须将配置文件存储在外部非易失性存储器(如SPI Flash、BPI Flash)中。为此,Xilinx提供了多种格式的文件用于烧录这些存储器。
5. .mcs 文件(Intel格式的PROM文件)
定义:Intel HEX格式的ASCII文本文件,是Xilinx推荐用于烧录外部配置存储器的标准格式之一。
格式特点:.mcs文件由多行记录组成,每行包含起始码、字节长度、起始地址、记录类型、数据和校验码。例如:
:020000040000FA
:10000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10001000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:00000001FF
核心优势:由于每行都包含地址信息,PROM编程器可以跳过不需要编程的区域(如空白或保留区域),从而减少编程时间,特别是在大容量Flash中只烧录小文件时优势明显。
用途:通过JTAG间接编程外部SPI/BPI Flash(使用iMPACT或Vivado Programmer),是量产固化中最常见的文件格式。
6. .hex 文件(Hexadecimal File)
Xilinx工具也可以生成.hex文件用于PROM编程。需要注意字节顺序(Byte-swapping)问题:默认生成的HEX文件是“字节交换”(Byte-swapped)的,即D0引脚对应每个字节的LSB;而非交换格式下D0对应MSB。
7. .exo / .tek 文件
除了MCS和HEX,Xilinx PROM文件格式器还支持EXORmacs格式(.exo)和Tektronix格式(.tek),适用于特定的第三方编程器或旧系统。
8. .rpd 文件(Raw Programming Data File)
定义:原始编程数据文件,是直接映射到SPI/BPI Flash地址空间的二进制镜像。
用途:用于使用第三方专用编程器(非Xilinx JTAG链)直接烧录裸片Flash,或在某些嵌入式更新流程中作为最终镜像。
三、工程中间文件:开发流程的“半成品”
在Xilinx的实现流程中,各个阶段会生成一系列中间文件,了解它们有助于深入理解工具链和调试问题。
| 阶段 | 文件后缀 | 名称 | 作用与特点 |
|---|---|---|---|
| 综合 | .edf / .edn | EDIF网表文件 | 第三方综合工具(如Synplify)生成的通用标准网表 |
| .ngc | NGC网表文件 | XST(Xilinx综合工具)生成的二进制网表,包含原语信息和约束,可用于IP保护 | |
| 转换 | .ngd | 原生通用描述文件 | NGDBuild将EDIF/NGC和约束合并后生成的完整逻辑描述 |
| .bld | 转换报告文件 | 转换过程的运行报告 | |
| 映射 | .ncd | 原生电路描述文件 | 映射后生成的物理设计文件,包含逻辑在CLB、IOB等物理单元上的分配 |
| .pcf | 物理约束文件 | 映射后生成的物理约束,包含引脚、区域等信息 | |
| .ngm | 时序关系文件 | 与静态时序分析相关 | |
| .mrp | 映射报告 | 资源占用、优化细节等 | |
| 布局布线 | .ncd(更新) | 布局布线后NCD | 包含完整的物理布局和布线信息,用于生成比特流 |
| .par | 布局布线报告 | 布局布线的详细报告,包括未布线网络、时序摘要等 | |
| .dly | 延时文件 | 网络的时延信息 | |
| .pad | I/O管脚配置 | 管脚最终配置信息 |
四、约束与调试文件
9. .ucf / .xdc 文件(约束文件)
- UCF:User Constraints File,ISE时代使用,用于指定引脚位置、I/O电平、时序约束等。
- XDC:Xilinx Design Constraints,Vivado时代使用,基于行业标准的SDC(Synopsys Design Constraints)格式。
10. 时序报告文件
- .twr:时序报告文件,由TRCE工具生成,用于验证设计是否满足时序要求。
- .timing_summary:Vivado中生成的时序摘要报告。
11. 读回与验证相关文件
当使用BitGen的读回选项时,会生成一组特殊的文件用于配置验证:
- .msk:掩码文件,与.bit文件结构相同,但数据位被掩码替代。用于验证时指示哪些位需要检查(0表示需要验证,1表示忽略)。
- .ll:包含设计中每个节点可捕获读回信息的ASCII文件,包括比特流中的绝对位位置、帧地址等。
- .rba / .rbb:读回数据的ASCII和二进制版本(适用于Virtex/-E/Spartan-II/E)。
- .rbd:只包含预期读回数据(不包括命令)的ASCII文件。
- .msd:只包含掩码验证信息(不包括命令)的ASCII文件。
12. 加密相关文件
- .nky:在启用比特流加密时生成,包含FPGA器件的密钥信息,用于iMPACT编程密钥。
13. BitGen日志文件
- .bgn:BitGen运行的主日志文件,包含命令行选项、错误和警告信息。
- .drc:专门的设计规则检查日志。
五、常用文件对比总结
| 文件格式 | 适用器件 | 易失性 | 典型用途 | 关键特点 |
|---|---|---|---|---|
| .bit | SRAM FPGA | 是 | JTAG在线调试、功能验证 | 包含文件头,最基础格式 |
| .bin | SRAM FPGA | 是/否* | 嵌入式启动、SPI Flash烧录 | 纯数据,无头文件,体积最小 |
| .mcs | 外部PROM/Flash | 否 | 量产固化、通过JTAG烧Flash | Intel HEX格式,含地址信息,可跳转编程 |
| .jed | CPLD | 否 | 编程CPLD内部非易失存储器 | JEDEC标准,ASCII格式 |
| .rbt | SRAM FPGA | 是 | 调试、查看比特流内容 | .bit的ASCII版本 |
| .msk | SRAM FPGA | - | 配置验证、回读检查 | 配合.bit进行位屏蔽验证 |
| .nky | SRAM FPGA | - | 比特流加密 | 存储密钥信息 |
*注:.bin文件本身是数据,是否易失取决于存储它的介质。如果烧入Flash,则为非易失;如果直接送入SRAM,则为易失。
六、如何为你的Xilinx项目选择正确的文件?
- 调试阶段(在线验证):选择 .bit 文件,通过JTAG直接下载到FPGA SRAM中,快速迭代验证。
- 量产固化(外挂SPI Flash):生成 .mcs 文件,通过Vivado/iMPACT烧录到板载SPI Flash中。这是最通用的量产方案。
- 嵌入式系统(处理器主动配置):选择 .bin 文件,存放在SD卡、eMMC或文件系统中,由ARM/MicroBlaze读取并通过SelectMAP/被动串行接口配置FPGA。
- MultiBoot/远程更新:需要生成多个 .bin 或特定格式的镜像,并按照地址偏移存储在Flash中。
- 配置CPLD:生成 .jed 文件,直接通过JTAG编程非易失CPLD。
- 设计重用/IP保护:综合后生成 .ngc 文件(ISE)或 .edif + .xdc(Vivado),交付给其他人使用。
- 高级调试(配置验证):启用BitGen的读回选项,生成 .msk、.ll 等文件,用于验证FPGA实际配置与预期是否一致。
理解这些文件格式,将帮助你在Xilinx FPGA的开发道路上更加得心应手,无论是进行前期的在线调试,还是最终的量产部署和系统集成。
9481



被折叠的 条评论
为什么被折叠?



