庄雪亚,蔡 翔
(中国电子科技集团公司第五十八研究所,江苏无锡 214072)
目前FPGA规模越来越大,配置时间很长,而且在使用FPGA时,每个项目对FPGA内模块所使用的资源各有不同,绝大部分时候不会用完所有资源,即使要全部使用完资源也会存在布线布不通的问题[1]。故大部分时候只是使用了FPGA内的部分资源。目前的设计中,不管使用FPGA内部多少资源,都会为每一个配置位生成一位配置数据,软件生成的配置数据大小也是固定的,用来存储配置数据的配置芯片也必须有相应大小的容量,下载配置数据的速度也是固定的。如果把空闲资源默认配置为零,不再为空闲资源专门生成配置数据,就可以减少配置数据的大小,用更小的存储器来存储配置数据,相应的下载时间也会缩短。
FPGA 内部有 IOB、BRAM、CLB、DSP等资源,软件根据不同工程使用FPGA内部不同资源生成不同的配置数据,这里称为bitstream,如图1所示存储在Flash(11)内。CTRL(1)是数据下载的控制系统,用来解析bitstream中每个数据的具体含义,并协调控制DSR(2)、ADDR(3)。DSR(2)是一个数据移位寄存器,因为数据通过CTRL(1)出来的数据是32位宽的,需要通过DSR(2)实现将1312位宽的数据提供给配置模块SRAM的BL(Bit_Line)上。ADDR(3)是一个地址译码器,通过CTRL(1)解析出来的地址译出相应的WL(Word_Line),提供给配置模块SRAM的WL上。当BL准备好1312位数据时,打开WL,即1312位数据会被成功配置到配置模块的SRAM内。
图1 传统配置流程
目前的控制系统设计都是从左到右依次打开WL,也即从左到右依序为配置模块SRAM配置bitstream。没用到的那部分资源,软件生成的bitstream对应部分就是0,用到的资源软件会生成有意义的具体值,这样任何时候生成的bitstream大小固定且比较大,每配置一个地址DSR都需要移位1312位,这样配置时间也是固定的,且用时较长[2]。如图2所示,本加速配置设计是先配置空闲资源,也即先把所有全零配置结束后再配置实际用到的资源,见图2中STEP 1,Bitstream中先给出空闲资源的地址,此时CTRL(1)控制DSR(2)使BL上一直保持着1312位0,ADDR(3)根据地址依次打开WL,把整行配置完。这样做的好处是bitstream中不用再去存储每个配置位是0的数据,DSR(2)也不用花时间去移位得到1312位数据,节省了配置时间,见图2中STEP 2,配置完未使用的资源后,就需要开始依次配置用到的资源,bitstream先给出数据通过DSR(2)移位搜集完1312位数据后,bitstream就会给出一个地址,ADDR(3)解析出相应的WL,也即一帧的配置位被配置完成。这样从左到右依次配置完所有的配置位。
图2 加速配置流程
如图3所示,CTRL通过下载模式来选择哪种数据接口给FPGA下载数据,接口包括JTAG、BPI、Selectmap等。数据解析模块根据收到的数据进行解析是寄存器数据还是配置数据,如果是控制寄存器数据会存到控制寄存器里,并通过控制信号产生模块产生对应的控制信号;如果是地址寄存器数据就会存到地址寄存器并传给地址产生模块;如果是配置数据就直接传给DSR。在传送配置数据的同时会有一个地址产生模块,产生地址给ADDR模块。我们在使用加速配置的时候,其实就是通过bitstream来控制寄存器,让DSR和ADDR协调工作。根据加速配置原理,我们在下载bitstream的时候,只要先配置控制寄存器,把空闲资源的地址下到地址寄存器,再通过控制寄存器让DSR先准备好1312位的0,再打开相应的地址,通过不停地更新地址寄存器,就可以完成空闲资源的配置。
DSR有41个图4中的移位结构级联组成一组,一共用32组。DSR的移位结构由多路开关型锁存器和触发器组成。在Shift_EN和ShiftN_EN的选择下,对32 bit数据进行移位处理,每一位数据通过类似结构可移位41次。当移位满41次时,图4中由Program_EN/ProgramN_EN控制的MUX一次性全部输出。
图3 CTRL框图
图4 DSR移位结构
地址译码电路从最左边开始启动,最先启动的是帧地址,随后是列地址、BLOCK地址、上/下部分,最后是块类型。块类型==000,地址译码电路模块给CLB/IO/DSP/CLK/BlockRAM互联提供字线;块类型==001,地址译码电路模块给Block RAMs内容提供字线。
帧地址传至目标帧(最后一帧)后复位,帧地址开始递增。当帧地址传至最右列时,BLOCK地址开始递增。芯片下半部分重复以上过程。
FPGA中的每一个配置帧都有特殊的32位地址,主要分为五部分,如图5所示,具体每位的含义见表1。ADDR是地址解析模块,CTRL有一个地址寄存器,通过bistream可以设置这个地址寄存器,通过表1的规则可以分解出并具体定位到FPGA内的每个配置SRAM。地址解析模块可以根据CTRL解析过来的地址进行对比定位,在每1312个配置SRAM会配一个
地址解析。
图5 32位帧地址分布
表1 地址译码电路描述
采用基于Verilog行为级描述的RTL代码,建立整个仿真验证环境,利用Cadence公司仿真工具NC进行设计仿真验证[3]。如图6所示,D为输入给控制系统CTRL的32位宽数据,DSR_SHIFT_EN为数据计数器使能信号,只有下载需用资源的配置数据才使能,当下载的是空闲资源的配置数据时该信号保持为零,因为此时的DSR会自动产生1312位个0,不需要DSR移位产生。在DSR_SHIFT_EN使能时,每41个cclk控制DSR把1312位数据输出到SRAM的位线上 。 MINOR_ADDR、COLUMN_ADDR、ROW_CNT、BLOCK_TYPE、TOP_B分别为字线地址、列地址、行地址、块类型地址、上下分区地址。当FPGA上电内部初始化结束,拉高INITB_I,开始接受数据,首先下载空闲资源的配置数据,图中所示因为使用的资源比较少,大部分时间都是在下载空闲资源,下载的过程中DSR_SHIFT_EN一直保持0不变,也即在下载空闲资源的配置数据时DSR不需要移位,默认就是输出1312位个0,只需要地址线不断更新就行。图6中DSR_SHIFT_EN为高电平时就是在下载需用资源的配置数据。因为下载过程是以行为单位,每一行都是先下载空闲资源再下载需用资源的配置数据,最后下载结束CRC校验正确,内部成功下载标志EOS变高电平。
如图7所示为加速配置波形与正常配置波形的比较,长方形框里是加速配置波形,长方形框外是正常配置波形。可以看出对于同一个工程生成的配置数据加速配置时间是正常配置时间的六分之一。
图6 加速配置仿真波形
图7 加速配置与正常配置波形对比
本文基于FPGA传统下载配置数据,在控制系统内通过控制地址寄存器和控制DSR初始数据来达到加速配置的目的。使用的时候配合软件先产生空闲资源的地址,再生成需用资源的数据及地址。通过先配置空闲资源的配置数据,再配置需用资源的配置数据实现加速配置功能,并兼容原有功能。利用Cadence公司仿真工具NC进行设计仿真验证,验证结果证明加速配置效果明显,特别对于使用资源不多的工程,加载速度能加快很多倍。
参考文献:
[1]褚振勇,齐亮,田红心,高楷娟.FPGA设计及应用[M].第2版.西安:西安电子科技大学出版社,2006:250-301.
[2]周国娟,金红莉.灵活实用的FPGA配置的设计[J].中国高新技术企业,2008(8):73-74.
[3](美)Rabaey,J M.数字集成电路——电路、系统与设计[M].周润德,等译.第二版.北京:电子工业出版社,2004:319-357.