5.5.1 从PROM中引导数据简介
目前,许多 FPGA 设计都集成了使用 MicroBlaze 和 PowerPC处理器的软件嵌入式系统,这些设计同时使用外部易失性存储器来执行软件代码。使用易失性存储器的系统还必须包含一个非易失性器件,用来在断电期间存储软件代码。大多数 FPGA 系统都在电路板上使用 Xilinx PROM,用于在上电时加载 FPGA 配置数据。另外,许多应用还可能使用其他非易失性器件(如 SPI Flash、Parallel Flash 或 PIC)来保存 MAC 地址、系数、处理器代码以及ASCII数据等用户数据,因此导致系统电路板上存在大量非易失性器件。但如果只用一个 PROM来存储 FPGA 配置数据、软件代码和用户数据,则可以节省电路板面积。
PROM 在存储多数据段时的内容如图5-49所示。软件应用段可处在 PROM 中的任意位置,用地址同步字标识。跟在地址同步字后面的是一个 32 位软件起始地址、32 位软件段(指定后面软件数据的字节数),然后是实际的软件数据。软件起始地址、字节数和其他软件数据可以在同一软件应用中多次重复。软件应用段的末尾用两个等于零的32位字标识。用户数据段由用户同步字定义,同步字之后紧随用户数据。由于任意FPGA配置数据、软件应用或用户数据之间的数据不确定,因此需要使用同步字。

图5-49 在PROM中存储多数据段的方法
5.5.2 硬件电路设计方法
在给出硬件电路之前,先介绍PROM的工作机制。PROM芯片主要受控于片选( )、复位( )以及输出使能信号(OE),在控制信号的组合下,完成对片内有效空间的遍历。PROM芯片控制信号的真值表如表5-20所列。
表5-20 PROM控制信号的真值表

注(1):表中的TC为Terminal Count of address counter,地址上限CAC= Current address count,当前地址寄存器的值。
如前所述,在传统的配置电路中, 引脚通常与FPGA的DONE引脚连接,在完成FPGA配置后,FPGA会将PROM的片选信号无效。因此,为了能在配置 FPGA 之后继续读取PROM内容,设计系统电路板时必须要对配置电路进行一定的修改。例如,可引导软件和用户数据的主串配置电路如图5-50所示。

图5-50 可引导软件和用户数据的主串配置电路
对于图5-50所示的配置电路,有下面几个细节需要说明。
1. PROM的 管脚
PROM的 引脚通常与FPGA的DONE引脚连接,用于在配置FPGA之后将PROM保持在待机模式。用户可以用此引脚启用或禁用PROM,并且在不准备访问PROM时降低功耗。不过,如果连接了DONE引脚和PROM的 引脚,就不能在配置FPGA之后读PROM。因此有两种方法来连接PROM的 引脚:①将 管脚直接接地,一直片选PROM芯片;②将 管脚连接到FPGA的通用IO管脚,当FPGA配置时,其默认为低电平,片选PROM;FPGA配置完成后,当需要读取PROM数据时,可通过通用IO片选PROM,否则就拉高该管脚,关闭PROM芯片。虽然后者需要为解决方案附加一个I/O引脚,但允许将PROM置为待机模式以降低功耗。由于Xilinx PROM的最大待机电流是1mA,而其最大工作电流是10 mA,所以在某些对功耗敏感的应用中,通过软件驱动此引脚来启用或禁用 PROM,可节省一定的功耗。此时,由于不能将FPGA的DONE引脚连接PROM的 引脚,可直接连接至外部LED,以显示FPGA配置完成的状态。
2. PROM的CLK管脚
因为在任何主配置模式下,FPGA生成的配置时钟CLK都会在成功配置FPGA之后停止翻转,以防止PROM的地址计数器的操作超出PROM中存储的FPGA设计,因此PROM的CLK引脚也需要连接到FPGA的一个附加用户I/O引脚,用来驱动PROM的CLK输入。当在配置FPGA之后读PROM时,附加的用户I/O为PROM的CLK引脚提供时钟。此连线上有一个390Ω的电阻,以避免CLK信号的两个可能的驱动器之间发生冲突。
3. PROM的OE/RESET管脚
将PROM的OE/RESET引脚连接至FPGA的INIT引脚,以便在配置过程发生CRC错误时让FPGA重新开始配置。INIT引脚在配置后成为一个用户I/O,因此可以配置成输出逻辑“高”信号,以使PROM的输出保持有效。
4. PROM的DIN/D0引脚
将FPGA的DIN/D0引脚连接PROM的DIN/D0引脚,以便将PROM中的数据读入 FPGA。这不是此应用的专用连接,DIN引脚在配置后不可用作普通用户 I/O。
对于其他的配置模式,在硬件电路设计时都需要注意以上4点。
5.5.3 软件操作流程
在FPGA配置完成后,嵌入式处理器可通过通用IO(GPIO)外设来读取PROM中的用户数据。本节以MicroBlaze为例说明如何完成软件端的操作。
在MicroBlaze软核的片上外设总线(OPB)上添加具有4个通用输入/ 输出 (GPIO) 核,如图5-51中的Read PROM模块。该 GPIO 核用来控制INIT、CE、OE 和 DIN 引脚,需要使用26 个四输入查找表(LUT)和61个触发器。另外,此参考设计还使用一个定制OPB Block RAM接口控制器核,其中只用一个Block RAM来说明最小系统。EDK 9.1i中的最小系统始终使用8个块RAM。在不需要这么多块存储器的优化系统(如引导加载器)中,可使用一个定制Block RAM接口控制器核来创建具有一个块RAM的系统。

图5-51 MicroBlaze 硬件系统框图
PROM的控制通过C软件程序进行处理。完成了上述软件架构后,还需要注意软件驱动软件的基本原理、细节以及读取PROM的方法。由于本节主要介绍硬件电路,关于软件部分的设计细节可参考文档[8]。
5.6 本章小结
本章详细介绍了FPGA配置电路的基础知识、硬件电路以及软件操作。首先介绍了配置系统的组成以及Xilinx的下载线。其次,介绍了常用的配置电路,为了扩大FPGA的应用场合,Xilinx提供了多类配置模式,包括主串、主并、从串、从并、基于各类Flash的配置模式。在主模式以及用于测试的JTAG下,FPGA自身产生配置时钟;在从模式下,配置时钟由外部处理器提供。再次,介绍Xilinx配置软件iMPACT的使用方法以及各属性说明。最后,给出了如何读取配置PROM芯片中用户数据的软、硬件实现方法。配置电路是FPGA设计的重中之重,读者需要经过一定实践才能更好地掌握。


