返回 教育论文 首页
一种提高FPGA加载速度的方法

  摘 要: 随着FPGA技术的快速发展,FPGA集成的逻辑资源越来越多,随之而来的是FPGA的配置文件越来越大。可以预见,随着技术发展,以后高端FPGA配置文件会更大。配置文件的增大,直接导致FPGA加载时间的大量增加,因此缩短单板启动时间,提高FPGA加载速度势在必行。本文在分析其加载的过程基础上,提出了数种可以加快FPGA加载速度的方法,并在工程实践中证明,使用本文描述的方法可以使加载速度缩减到优化前的1/5以下。
  关键词: FPGA 加载速度 版本 提高方法
  
  对于目前广泛使用的Xilinx FPGA芯片,加载模式一般选择的是Slave SelectMAP (parallel,x8) 配置模式,具体是通过CPU的GPIO模拟localbus总线,对EPLD中程序所定义的寄存器进行读写,寄存器的某些Bit映射到EPLD的引脚上,而这些引脚连接FPGA的相关配置引脚,所以我们可以通过CPU读写EPLD的寄存器,来控制FPGA的相关配置引脚,进而达到对FPGA配置的目的。
  在某单板中,由于有多块FPGA芯片,使用此方法加载一块FPGA,需要用时30s左右,而4块FPGA加载时间高达约2min以上。为提高加载速度,我们进行了一系列的理论分析,提出了3个层次的优化。
  一、一般方法加载FPGA时序介绍
  控制FPGA加载的EPLD寄存器主要有两类,一个是配置数据寄存器FPGA_CFGDATA_REG,CPU将每个配置数据写入该寄存器,然后该寄存器的值在每个配置时钟的上升沿写入FPGA。另一个寄存器是配置控制寄存器FPGA_CFG_REG,该寄存器有5个Bits,定义如下表所示。
  在某单板上,加载FPGA配置数据时序为:
  1.首先由CPU向FPGA_CFGDATA_REG写入配置数据;
  2.然后通过3次读和写FPGA_CFG_REG,使得FPGA_ CFGCLK先为低,再为高,最后为低,即使得FPGA_CFGCLK出现一个上升沿,则配置数据将在FPGA_CFGCLK的上升沿写入FPGA。
  具体流程可以参见图2.4,由此可见,向FPGA写入一个配置数据,需要CPU对EPLD寄存器执行4个写操作,3个读操作,共计大约3018ns,型号XC6VLX240T的FPGA配置数据为9232444字节,则加载一块FPGA时间大约为3018ns*9232444=27.8s。(注:本文中所有时间值都是在仿真环境下,利用TSC计数器测量得到,代码编译时,选择了o3优化)
  二、自动产出配置时钟
  从上文可以看出,向FPGA写入一个配置数据,需要CPU对EPLD寄存器执行4个写操作,3个读操作,其中后面的3次读和3次写操作仅仅是为了产生一个配置时钟的上升沿。假如在CPU向EPLD写入一个配置数据时,EPLD能自动产生一个周期的配置时钟,则加载一个配置数据仅需要CPU对EPLD寄存器执行1个写操作即可,这样将大大缩短FPGA加载时间。
  按照上述思路,加载FPGA时序将如图2所示,从图2可见,当CPU向EPLD写入一个数据时,EPLD自动产生一个配置时钟。
  由于CPU向EPLD写入数据时,必有一个WR的低脉冲,而配置时钟则为一个高脉冲,并在WR低脉冲之后,因此可以考虑将WR取反,并延时。
  在某单板上,有4块FPGA,每个FPGA的配置时钟FPGA_CFGCLK和片选FPGA_CFGCS都是独立的,而配置数据是共用8条数据线。为了将4个FPGA_CFGCLK分开,在实际应用中,我们可以将WR取反并延时后的信号和CFGCS取反后的信号相与。
  经过实际测试,写一个配置数据时间由3018 ns缩短到633ns,加载XC6VLX240T型号的FPGA时,加载总时间由27.8s减少到5.85s。
  三、CPU连续写EPLD寄存器
  对于XC6VLX240T型号的FPGA来说,配置数据为9232444个字节,CPU将所有的配置数据都写入EPLD的同一个寄存器,即FPGA_CFGDATA_REG。在写该寄存器时,CPU总是先写入该寄存器地址,然后再写入数据。由于寄存器地址固定,因此我们可以考虑仅在第一次写FPGA_CFGDATA_REG时,提供寄存器地址,EPLD将地址寄存,然后在以后CPU写该寄存器的时,不提供地址。仅在WR为低时,给EPLD提供有效的数据即可。
  按照该方式写FPGA_CFGDATA_REG的时序如图2.6所示。按照该方式,加载一个配置数据需要325ns,加载一块FPGA时间为3.01s。
  四、压缩FPGA配置数据
  我们仔细观察FPGA的配置数据,可以发现,数据中有大量的连续的值,比如连续1000个0x00。以某单板下行FPGA为例,在050d版本里,下行FPGA代码中0x00的连续个数超过512的就有31处之多,最多一处为连续1215388个字节0x00;在某单板上,下行FPGA连通性测试代码中,0x00连续个数超过512的也有271处之多,最多一处为2428942个字节0x00。
  因此,我们可以考虑由CPU统计某个数值连续的个数,然后将该数值和连续的个数告诉EPLD,然后EPLD保持配置数据不变,然后产生N个配置时钟,即完成了N个配置数据的加载。
  经过上述优化后,CPU加载FPGA流程如图2.12所示。其中某些函数,以及变量含义如下:
  1.cfglen[ulFpgaIndex]:第ulFpgaIndex个FPGA配置数据总个数;
  2.PmcmEpldWriteCfgData(*pDataBuf):该函数以优化二加载一个配置数据*pDataBuf;
  3.CfgdataN(cfgidata,datan):该函数以优化三加载datan个配置数据cfgidata;
  4.CfgCount:该变量表示已经加载的字节数目。
  按照上述方法优化进行测试后,下行FPGA加载时间减少到了0.75s。
  经过理论的分析,以及实际测试,3个层次的优化方法,都非常有效。3种优化方式对比如下:
  方式1:可以简化CPU部分的代码,只需要将配置数据顺序写入EPLD的配置数据寄存器;EPLD需要增加自动检测WR,并产生CCLK的逻辑;该方式实现简单,加载速度可提高约5倍。
  方式2:在方式1的基础上,CPU代码略有改动,EPLD代码保持不变,该方式实现简单,加载速度进一步可提高约2倍。
  方式3:CPU和EPLD代码改动都较大,另外在制作FPGA版本时,需要有相关处理,该方式实现复杂,加载速度进一步可提高1―15倍。
  
  参考文献:
  [1]Altera Corporation.Stratix IV Device Handbook.Altera Corporation.SIV5V1-4.1.
  [2]Xilinx Inc.Virtex-6 FPGA Data Sheet.Xilinx Inc.DS152(v2.10)October18,2010.
  注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文


本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文


【相关论文推荐】
  • 一种基于SOPC的FPGA在线测试方法
  • 一种基于DSP/FPGA的高转速载体角速度解算系统设计
  • 一种稳健自适应波束形成的变量对角加载方法
  • 一种新型加载Sierpinski垫片天线的设计
  • 一种基于FPGA跳频解码实现方法
  • 基于FPGA的一种测频方法的研究
  • 一种基于ARM与FPGA的大容量固态存储板实现方法
  • 一种基于FPGA的SDRAM数据读取方法设计
  • 一种FPGA的远程编程方法研究和实现