FPGA 配置方式与配置文件结构说明

✅ Xilinx(AMD)7 系列 FPGA 的配置机制


🧩 核心概念

  • FPGA 是“空白”硬件,必须通过加载bitstream(比特流)文件来定义其功能。
  • Bitstream 是一个二进制文件,包含所有逻辑、互连和 I/O 的配置信息。
  • 配置数据存储在 CMOS 配置锁存器(CCL)中,属于 SRAM 型存储单元,掉电后丢失

⚙️ 配置方式

FPGA 可以通过多种接口从不同来源加载 bitstream:

配置模式 说明
Master Serial FPGA 主动从串行 Flash 加载
Slave Serial 由外部控制器(如 CPU)发送配置数据
Master SelectMAP (x8/x16) 使用并行接口从 Flash 加载
Slave SelectMAP (x8/x16/x32) 外部主机(如 DSP/ARM)写入配置数据
JTAG 用于调试或烧录,常用于开发阶段
Master SPI (x1/x2/x4) 支持标准 SPI NOR Flash 启动
Master BPI (x8/x16) 支持并行 NOR Flash 启动,高速

🔘 模式选择引脚 M[2:0]

  • 使用 M2、M1、M0 三个引脚的高低电平组合选择配置模式。
  • 引脚应通过 ≤ 1kΩ 的上拉/下拉电阻固定电平,或直接连接 VCC/GND。
  • 配置过程中不能更改模式引脚状态

🔄 可重复编程特性

  • FPGA 是非永久性配置器件,支持无限次重新配置。
  • 可实现现场升级、动态重配置、多配置切换等功能。

📁 相关文档


🧠 总结一句话:

Xilinx 7 系列 FPGA 是基于 SRAM 的可编程器件,每次上电都需要加载 bitstream。它支持多种配置模式,包括 JTAG、SPI、BPI 和 SelectMAP,并可通过 M[2:0] 引脚选择具体模式,适用于嵌入式系统、工业控制、通信设备等多种应用场景。

✅ 总结:AMD(Xilinx)FPGA 配置文件的生成与格式


🧩 核心内容概述

AMD(原 Xilinx)的 FPGA 设计工具(如 ISE 和 Vivado)可以将设计转换为多种格式的配置文件,用于加载或烧录到 FPGA 或非易失性存储器中。


🛠️ 主要工具和命令

工具 功能 命令/工具
ISE 生成比特流 BitGen(从 NCD 文件生成 .bit 文件)
ISE 生成 PROM 文件 PROMGen(将 .bit 转换为 Flash 可用格式)
Vivado 生成比特流 write_bitstream
Vivado 生成 Flash 文件 write_cfgmem

📁 常见配置文件格式

格式 描述
.bit 标准比特流文件,用于直接加载到 FPGA
.mcs 多配置支持的 Flash 存储文件(常用于 SPI/BPI Flash)
.bin 二进制格式,适用于通用 Flash 编程
.hex 十六进制格式,部分调试工具使用
.elf / .exo 在嵌入式系统中用于软核处理器配置

💡 关键特点

  • 不局限于 PROM:虽然叫“PROM 文件”,但这些文件也可用于 SD 卡、U盘、网络传输等。
  • 多配置支持:一个文件可包含多个 bitstream,实现 FPGA 的多启动模式。
  • 灵活部署:可存储在任意位置,通过任何方式加载到 FPGA。

📚 推荐文档


🧠 一句话总结:

AMD(Xilinx)FPGA 开发工具支持将设计编译为多种配置文件格式(如 .bit, .mcs),既可用于直接加载 FPGA,也可用于烧录到 Flash 或其他介质,具有高度灵活性和可扩展性。

Xilinx 的 .bit 文件格式是一种基于“键-值对”(Key-Value Pair)结构的二进制文件,用于将 FPGA 的配置数据加载到器件中。你提供的 hex dump 展示了 .bit 文件开头的部分内容,并对其字段进行了初步解析。下面我将详细解释其结构、含义和比特流的组成方式


bit文件头结构

🔍 一、整体结构概览

.bit 文件由多个字段(Field)组成,每个字段都以一个长度 + 键 + 数据的方式组织:

[Length (2 bytes)] [Key (1 byte)] [Data (variable length)]
  • Length:2 字节,大端序(Big Endian),表示该字段的数据部分长度。
  • Key:1 字节,ASCII 字符,标识该字段的内容类型。
  • Data:可变长度数据,根据 Key 不同而不同。

📄 二、逐字段分析

以下是 .bit 文件头部十六进制数据及解析:

00000000: 00 09 0f f0 0f f0 0f f0 0f f0 00 00 01 61 00 0a
00000010: 78 66 6f 72 6d 2e 6e 63 64 00 62 00 0c 76 31 30
00000020: 30 30 65 66 67 38 36 30 00 63 00 0b 32 30 30 31
00000030: 2f 30 38 2f 31 30 00 64 00 09 30 36 3a 35 35 3a
00000040: 30 34 00 65 00 0c 28 18 ff ff ff ff aa 99 55 66

✅ Field 1:Header Padding(可忽略)

00000000: 00 09 0f f0 0f f0 0f f0 0f f0
  • Length: 0x0009 = 9 字节
  • Data: 0F F0 ...
  • 说明:可能是某种填充或保留字段,通常可以忽略。

✅ Field 2:Start of Keyed Sections(标识开始)

0000000a: 00 00 01 61
  • Length: 0x0001 = 1 字节
  • Key: 0x61 = ASCII 'a'
  • 说明:表示第一个元数据字段开始。

✅ Field 3:Design Name(设计名称)

0000000f: 00 0a 78 66 6f 72 6d 2e 6e 63 64 00
  • Length: 0x000a = 10 字节
  • Key: 0x61 = ASCII 'a'
  • Value: "xform.ncd" + null (0x00)
  • 说明:这是设计的名字,通常来自 ISE 工具中的 NCD 文件名。

✅ Field 4:Part Name(器件型号)

0000001a: 62 00 0c 76 31 30 30 30 65 66 67 38 36 30 00
  • Key: 0x62 = ASCII 'b'
  • Length: 0x000c = 12 字节
  • Value: "v1000efg860" + null (0x00)
  • 说明:目标 FPGA 器件型号,例如 Virtex-4 或其他系列。

✅ Field 5:Date(日期)

0000002a: 63 00 0b 32 30 30 31 2f 30 38 2f 31 30 00
  • Key: 0x63 = ASCII 'c'
  • Length: 0x000b = 11 字节
  • Value: "2001/08/10" + null (0x00)
  • 说明:生成 bitstream 的日期。

✅ Field 6:Time(时间)

0000003a: 64 00 09 30 36 3a 35 35 3a 30 34 00
  • Key: 0x64 = ASCII 'd'
  • Length: 0x0009 = 9 字节
  • Value: "06:55:04" + null (0x00)
  • 说明:生成 bitstream 的时间。

✅ Field 7:Bitstream Data(真正的比特流数据)

0000004a: 65 00 0c 28 18 ff ff ff ff aa 99 55 66 ...
  • Key: 0x65 = ASCII 'e'
  • Length: 0x000c9090 = 8,233,440 字节(取决于器件大小)
  • 数据起始标志FF FF FF FF AA 99 55 66
    • AA995566 是同步字(Sync Word),标志着 bitstream 数据的正式开始。
  • 说明:这部分才是 FPGA 实际需要加载的配置数据。

示例:

Bitstream 配置数据结构

  1. Padding(填充数据)

    • 作用:用于分隔存储在非易失性内存中的多个 bitstream。
    • 特性:通常为全0或全1序列,FPGA配置控制器会忽略这部分数据。使用全1填充较为常见,因为Flash擦除后的状态也是全1。
  2. Sync Word(同步字)

    • 0xAA995566
    • 作用:通知FPGA配置控制器开始处理后续的bitstream数据。
  3. Desync Word(去同步字)

    • 作用:指示bitstream的结束位置。遇到去同步字后,配置控制器会忽略所有后续的bitstream数据直到下一个同步字出现。
  4. Commands(命令)

    • 用途:用于读写FPGA配置控制器寄存器。
    • 示例
      • ID-CODE:识别bitstream对应的FPGA设备。
      • FAR (Frame Address Register):指定要配置的帧地址。
      • FDRI (Frame Data Register Input):写入帧数据。
      • NOOP:无操作命令,被配置控制器忽略。
  5. Memory Frames(内存帧)

    • 定义:是Xilinx FPGA配置的基本单位。
    • 大小:取决于具体的FPGA系列;例如,Virtex-6系列中每个帧大小为2592位。
    • 用途:用于配置多个逻辑切片、IO、BRAM等FPGA组件。每个帧都有一个与FPGA配置空间相对应的地址。Bitstream通过一系列FAR和FDRI命令来配置这些帧。

    我们具体来看一下



配置内存以帧(Frame)为单位组织:
每个帧是配置内存中最小可寻址单元。
每个帧包含 101 个 32 位字(words),即:

101×32=3232 bits

📌 所有配置操作必须作用于完整的帧:
不能对帧的一部分进行写入或读取。
帧地址通过 FAR(Frame Address Register) 设置。

更详细的指令定义解释可以参考UG470

posted @ 2025-06-05 09:28  Hello-FPGA  阅读(560)  评论(0)    收藏  举报