FPGA器件在嵌入式系统中的配置方式的探讨
扫描二维码
随时随地手机看文章
摘要:通过说明fpga的各种配置方式及各种配置文件的使用,重点探讨了在嵌入式系统中使用fpga的软硬件设计。使用微处理器在线配置fpga时,需要将存储在flash中的配置文件,通过微处理器的i/o口存储到fpga的数据存储器(sram)。文中详述了如何利用fpga的被动串行方式(ps)配置方式,和根据配置时序实现嵌入式系统中fpga的配置电路和相应的应用软件的过程。
关键词:嵌入式系统,fpga,微处理器配置
引言 在当今商业竞争日益加强的环境中,产品是否便于现场升级和是否便于灵活运用,成为商家迅速占领市场的关键因素。在这种背景下,alter公司开发的基于sram lut结构的fpga器件得到了广泛应用。
现场可编程门阵列fpga(field programmable gate array)是一种高密度可编程逻辑器件,其逻辑功能是通过把设计生成的数据文件配置进芯片内部的静态配置数据存储器(sram)来实现的,具有可重复编程性,可以灵活实现各种逻辑功能。由于sram的易失性,每次系统上电时必须重新配置数据,即icr(in-circuit reconfigurability)。只有在数据配置正确的情况下,系统才能正常工作。因此需要外接rom保存其配置数据。fpga的配置是有时序要求的,如果fpga本身不能控制配置时序,就需要外部配置器件来进行时序控制。以altera公司的fpga为例,因其本身不能控制时序,就有专用的epc系列配置器件供其使用。在嵌入式系统中,因为含有微处理器,可以使用微处理器产生配置时序,将保存在系统rom中的配置数据存储到fpga中。所以没有必要使用专用的epc系列配置器件来配置fpga。这样不仅节约了成本,还有效地缩小了系统体积。本文重点讨论在嵌入式系统中fpga的配置方案。2. fpga器件的配置方式 altera公司生产的具有icr功能的fpga器件有flex6000、flex10k、apex和acex等系列,它们可以用以下方式进行配置:1. 使用专用epc配置器件,如epc16、epc8、epc2、epc1;2. 被动串行方式(ps),使用微处理器的串行接口;3. 被动并行同步方式(pps),使用微处理器的并行同步接口;4. 被动并行异步方式(ppa),使用微处理器的并行异步接口;5. 边界扫描方式(jtag),使用jtag下载电缆。下面详细分析上述五种配置方式。 使用epc配置器件时,首先将配置文件从计算机下载到epc配置器件中去,然后由epc配置器件控制配置时序对fpga进行配置。epc配置器件有一次可编程和可擦写编程型两种:一次可编程型芯片只能写入一次,不适于开发阶段反复调试、修改及产品的方便升级;可擦除编程型价格昂贵,且容量有限,对于容量较大的可编程逻辑器件,需要多片配置芯片组成菊花链进行配置,增加了系统设计的难度。 使用ps、pps、ppa方式配置时,配置文件事先是以二进制形式保存在系统rom中,然后通过微处理器将配置数据送进fpga中。ps是通过串行方式送到fpga中,pps是以并行方式送给fpga。fpga在其内部将并行数据转换成串行数据,该数据转换时需要外部配置时钟的驱动。比较ps和pps,所用的配置时间几乎相同,而ps的接口方式比较简单,所以嵌入式系统中通常选择ps方式配置fpga。使用ppa方式配置数据时,微处理器将配置数据以并行方式送给fpag,然后在fpga内部进行数据串行化处理。与pps不一样的地方是串行化处理时不需要配置外部时钟的驱动,但接口更复杂,工程中很少使用。 边界扫描方式需要连接计算机,无法在现场使用,嵌入式系统中很少采用这种方式。 通过上述的分析,在嵌入式系统中要使用fpga时,可以采用专用epc配置器件、ps、pps、ppa,但是ps、pps、ppa比专用epc配置更具成本和体积优势。在ps、pps、ppa中,ps又是最优的通信方式。所以在嵌入式系统中,通常选择ps被动串行方式来配置fpga。3. 嵌入式系统中fpga的配置电路设计3.1. ps方式配置时序 在嵌入式系统中,微处理器可以产生配置时序,能够和fpga直接通信,将rom中的配置文件传输到fpga的sram中去。通常使用ps被动串行方式进行配置fpga,下面就通信中使用到的五根信号线的配置时序进行说明。 五根信号线分别为nconfig、nstatus、conf_done、dclk、data,连接微处理器的五个i/o口和对应的fpga的引脚。 … 图1 ps方式配置信号时序图 微处理器上的五个i/o端口连接上述五个信号线。其中连接nconfig、dclk、data端口设置成输出态,nstatus、conf_done端口设置成输入态。当微处理器开始与fpga通信时,微处理器首先在nconfig上送出一个大于8μm的负脉冲,并且检测nstatus上的信号。当fpga接收到nconfig上的下降沿时,迅速将nstatus和conf_done拉低,并且保持低电平信号一直到nconfig抬