本文讨论 Xilinx 公司 Spartan-3 系列 FPGA 的配置电路。这里给出市面上最常见的 Spartan-3 器件 XC3S400 的配置电路,所有 Spartan-3 系列 FPGA 配置电路的连接方式都是一样的。
XC3S400 是 40 万门 FPGA,它的配置比特流(Configuration Bitstream)虽然只有 1.699136 Mbit,但还是需要 2 Mbit 的配置芯片 XCF02S,不能想当然地认为“我的设计简单、最多用到 1 Mbit,选 XCF01S(1 Mbit)就可以了”。事实并非如此:即使只用一个 XC3S400 做流水灯的设计,下载到 PROM(XCF02S)里的数据也是 1.699136 Mbit 的,所以 FPGA 配置 ROM 的选择宜大不宜小。
配置电路无非有下面五种:主串、从串、主并、从并、JTAG。前四种是相对于下载到 PROM 而言的(串、并是指配置芯片与 FPGA 之间采用串行还是并行协议通信),只有 JTAG 是相对于调试而言的,是将配置直接下载到 FPGA 的 RAM 中(掉电后丢失)。FPGA 和 CPLD 相比:CPLD 是基于 ROM 型的,数据下载到 CPLD 后掉电不丢失;而 FPGA 则是基于 RAM 的,如果没有外部 ROM 存储配置数据,那么掉电后就丢失数据,所以 FPGA 都需要外接配置芯片(现在也有基于 Flash 的 FPGA)。下面来看主串模式下 FPGA 配置电路的连接,官方给出的硬件连接如图 1 所示。

图 1 主串模式配置电路
为了增加配置电路的可靠性,通常还要增加一些抗干扰的设计(如增加滤波电容、匹配电阻),如图 2 所示。

图 2 增加了抗干扰设计的配置电路
先看 PROM 芯片的各个管脚。根据数据手册为其提供相对应的电平:3 脚 CLK 接 FPGA 的 CCLK,数据通信的同步就是通过 FPGA 的 CCLK 产生的时钟进行的;因为使用的是串行的配置芯片,所以只有一个数据信号口 DO,连接到 FPGA 的 DIN 口,和上面的时钟信号协同工作完成串行数据传输,每当 CLK 的上升沿锁存数据,同时 PROM 内部的地址计数器自动增加。另外还有两条控制信号线:INIT(连接 PROM 的 OE/RESET)和 DONE(连接 PROM 的 CE),其中 OE/RESET 是为了确保每次重新配置前 PROM 的地址计数器复位;关于 CE 脚,其含义应为 chip enable:从它和 FPGA 的 DONE 脚连接可以推断,FPGA 未配置完成时 DONE = 0,配置芯片 PROM 处于片选状态,而一旦配置完成 DONE = 1,PROM 就不再被选通。数据手册也说明这个管脚可以直接接地,即一直处于片选状态,但这样会使 DATA 口有持续的数据信号输出,同时导致不必要的电流消耗。CEO 脚这里不接,因为它在多个 PROM 的配置电路中作为下一个 PROM 的 OE 端信号连接使用;CF 信号是连接 FPGA 的 PROG_B 接口的,其作用是产生开始配置信号,它连接了一个上拉电阻——如果 PROG_B 产生低电平脉冲则 PROM 会重新开始一次配置,所以在这条线上接一个按键到地,按键按下就会使能 PROM 重新配置 FPGA;还有几个信号接口 TDI、TCK、TMS、TDO 都是 PROM 和 PC 连接的信号,PC 通过这些电路下载数据到 PROM 中。
上面谈及 PROM 的信号接口时都附带谈到了 FPGA 的配置管脚,这里再作一些归纳性说明。FPGA 有 7 个专用的配置管脚、4 个专用的 JTAG 管脚(TDI、TCK、TMS、TDO),这些管脚由 VCCAUX 专门供电(该系列 FPGA 通常接 VCCAUX = 2.5 V)。FPGA 的 M0、M1、M2 脚用于配置模式选择:该电路主串模式下 M0、M1、M2 = 0、0、0;如果是 JTAG 下载模式,则 M0、M1、M2 = 1、0、1。此外 HSWAP_EN 管脚接地,用于设置 FPGA 处于配置状态下其他闲置管脚为上拉状态;如果该管脚接高电平,则配置状态下其他闲置管脚浮空。所以为了减少 FPGA 配置过程的干扰,一般把此脚接地。