摘要:提出了由于FPGA容量的攀升和配置时间的加长,采用常规设计会导致系统功能失效的观点。通过详细描述Xilinx FPGA各种配置方式及其在电路设计中的优缺点,深入分析了FPGA上电时的配置步骤和工作时序以及各阶段I/O 管脚状态,说明了FPGA上电配置对电路功能的严重影响,最后针对不同功能需求的FPGA外围电路提出了有效的设计建议。
1 引言
随着半导体和芯片技术的飞速发展,现在的FPGA集成了越来越多的可配置逻辑资源、各种各样的外部总线接口以及丰富的内部RAM资源,使其在国防、医疗、消费电子等领域得到了越来越广泛的应用。但是FPGA 大多数是基于SRAM工艺的,具有易失性,因此FPGA 通常使用外部存储器件(如PROM)存储必需的配置信息,防止设备掉电后FPGA丢失自我配置能力。但FPGA配置在一定的条件和时间下才能成功完成,随着FPGA容量的不断攀升,配置时间也被大大加长,上电时如不充分考虑FPGA的配置时序以及对其他器件的影响,根据常规经验设计电路,往往会影响系统其他外围器件的正常工作,严重时会导致整个系统的失效。因此,FPGA的配置方式和上电时序已成为系统设计的重要一环。
2 Xilinx FPGA的配置方式和特点
Xilinx FPGA支持多种配置方式,其中包括串行主模式(Master Serial)、串行从模式(Slave Serial)、并行主模式(Master SelectMAP)、并行8 位从模式(Slave Select MAP8)、并行32 位从模式(Slave Select MAP32),以及边界扫描模式(JTAG),Virtex5器件后还增加了对SPI和BPI接口Flash的支持。
现在设计中通常用到的是串行主模式和并行主模式两种配置方式,它们共同的特点是电路硬件设计时不需再接入一个配置时钟,配置时由FPGA 自身提供时钟,这样减小了PCB设计难度以及时钟带来的时序干扰。但是它们也有各自的优缺点。并行配置的电路设计相对复杂,需要使用到一些多功能的配置引脚,如果在复杂或高速的配置电路中还要考虑到数据线的阻抗匹配和等长,从而加大了PCB设计难度。因此,在选择FPGA配置方式时需要根据外围器件的上电初始化时间和受FPGA配置影响程度以及电路复杂特性等正确选择,同时也需要对必要的配置管脚做相应处理,后面会进行详细分析。表1为FPGA 重要的配置管脚和定义,可以看到,有些配置管脚在并行模式下才需要用到。
3 Xilinx FPGA上电配置时
FPGA和CPLD不同,上电不能直接工作,它需要一个配置过程。Xilinx FPGA需要经过8个步骤才能运行正常的运行用户逻辑,整个流程如图1所示
3.1 FPGA上电启动
FPGA工作的第一步就是给器件加电。Xilinx要求VCCINT(核心电压)先动,然后再是VCCO(I/O电压),最坏情况是它们之间不能相差1s以上。在并行配置模式下,VCCO_2 要求参考电压必须和PROM参考电压相同,上电的过程如图2所示。其中,TPOR(Power-on-Reset)为5~30ms,T(PL)(Program Latency)为Max 4ms,T(icck)(CCLK (output delay)为Min500ns。
在系统正常上电或者PROG-B是一个低脉冲时,FPGA开始配置寄存器空间。这段时间除定义好的配置管脚外,其他I/O 管脚均被设置为高阻态(High-Z)。经多次测试,这个阶段需要30ms左右的时间。
FPGA启动阶段最后一步就是配置启动模式。在PROG-B变高时,FPGA 开始采集配置方式引脚(M3、M2、M1),并同时驱动CCLK输出。在这个阶段,有两种方法可以延迟FPGA的配置时序,一种是拉低INIT-B管脚,这是由于FPGA检测到自身还没有初始化完毕,不会进行接下来的操作步骤,直到INIT-B管脚变高。另一种就是拉低PROG-B管脚,使FPGA还处于等待配置状态。
3.2 FPGA数据加载
FPGA 正常数据加载前,需要做一个器件与PROM之间的同步检查。方法是传输一个特殊的32位数值(0xAA995566)到FPGA中,提示FPGA下面开始传输的是配置数据。这个步骤对用户来说是透明的,因为在Xilinx ISE Bitstream Generator 中生成的.bit文件中已经自动加入了这个校验码。
在做完配置前的通信同步后,FPGA 与PROM之间还无法识别相互间是个什么器件,于是Xilinx 就给每一个型号的FPGA 设计了一个唯一的器件ID号,这个ID号可以在Xilinx 配置手册中查到。如上述例子中用到的XC4VS35,其ID 号为0x02088093。FPGA需要从PROM中读出这个器件号和自身比对,如果相同就继续下面的步骤,不同的话,配置失败,并打印出配置故障信息。
所有准备工作正常完成后,FPGA 开始载入配置文件。这一步对大多数用户也是透明的,由器件自行完成。这也是配置过程中最耗时的步骤,时间从100ms到几秒不等。这个过程中,FPGA 的所有可配置I/O根据HSWAPEN管脚的设置变为弱上拉(HSWAPE=1)或者高阻态(HSWAPE=0)。这个阶段的I/O管脚还没有变为用户需要的状态,也最有可能影响到其他外围电路的上电时序和运行。设计硬件电路时要特别注意并采取必要措施,如加入上下拉电阻,改变器件加电顺序等来尽量避免或减少FPGA配置时对电路其他器件的影响。
配置文件载入完成后,为了验证数据的正确性,FPGA还自动设置了CRC校验(这个在ISE配置选项中也可以去掉,但是为了确保载入数据的正确性,这个是必须选择的)。如果CRC 校验不正确,FPGA会自动把INIT-B拉低,放弃这次配置。用户必须把PROG-B引脚拉低,才能进行重新配置。
3.3 启动序列
CRC校验正确后,FPGA不会马上执行用户的逻辑,它还要进行一些自身内部电路的配置,如DCM锁定(DCMs to Lock)、全局写信号使能(Global Write Enable)等,这些信号的启动顺序也是在ISE配置选项中设置的。必须的启动序列为:释放DONE引脚;释放GTS信号,激活IO管脚;设置全局读写使能,使能内部RAM和FIFOAssert;结束上电配置。
从上面论述可知,整个FPGA 的上电配置正常时序如图3所示。
4 FPGA配置外围电路设计冲突与解决方法
FPGA上电配置整个过程大约需要200ms~2s,这段时间其他外围电路器件绝大部分都已经上电并正常工作了,而FPGA 的通用I/O 管脚还处于弱上拉(HSWAPEN=0)或者不定态(HSWAPEN=1),设计时就需要考虑到这些器件上电初始化和FPGA通用I/O管脚有无时序冲突。例如:上电时,外围器件要求I/O管脚都为低电平,而FPGA默认是弱上拉,初始化电平产生了冲突;外围器件要求在上电复位后马上采集配置管脚进行初始化,而FPGA还处在配置状态,没法正确上拉或下拉I/O管脚,器件初始化错误;外围器件要求上电初始化前需要时钟锁相,FPGA配置时产生不了时钟,导致器件初始化失败等。解决这些冲突大致有3 种方法,但前提都是要正确配置HSWAPEN管脚。因为在FPGA执行“器件上电”步骤后(5~30ms时间),它输出的I/O管脚状态是可以通过HSWAPEN设定的。
方法1:在FPGA 的I/O 管脚外加上下拉电阻,阻值在1~10kΩ之间,根据实际需要确定。FPGA在上电后10ms内能通过上下拉电阻把I/O 管脚拉到用户需要的电平上,这样能解决上电较慢但是又要求固定电平的外围电路,如功放发射开关和保护开关等。
方法2:FPGA可以在配置完成后产生一个全局复位信号,使外围电路硬件复位,再进行一次初始化操作。这样能解决PowrerPC、ARM这种上电初始化很快(在100ms内就能完成),而FPGA没有配置完成,导致PowrerPC 初始化错误的问题。而且这种方式不用外接多余的上下拉电阻,减少了电路设计复杂性。
方法3:FPGA可以在配置完成后产生一个Power Good信号,系统根据此标志再给外围其他有时序要求的器件上电,这样能解决DSP或者高速AD 这种需要时钟锁定后再进行初始化的器件。
这三种方法也可根据具体情况混合使用,能达到更好的效果。
5 结论
通过上述分析可知,FPGA上电是一个短暂而复杂的过程,设计时需要充分考虑FPGA上电配置时序和在这过程中I/O管脚的各种状态对外围电路的影响。根据系统设计的具体情况,通过选用最合理的配置方式以及外围电路连接,达到了既不影响其他器件性能和整个系统功能,同时又简化和完善了整个电路设计的效果。