动态部分可重构方法在SDRAM控制器中的应用
2009-07-09
作者:翁颖方, 徐德民, 苗 胜
摘 要:动态部分可重构方法应用于FPGA系统设计中,充分利用了FPGA芯片提供的可重配置功能,减小了FPGA芯片的配置时间。通过对可重构方法的研究,提出了基于模块化动态可重构方法应用到SDRAM控制器设计中,给出了重构流程,并对实验结果进行了分析。该方法提高了FPGA芯片的利用率,有效地提高了可重配置计算系统的整体性能。
关键词:动态部分可重构; FPGA; 模块化; SDRAM控制器
动态部分可重构(Dynamic Partial Reconfigurable)配制结合了传统的ASIC技术和通用处理器技术的特点,既具有通用处理器的灵活性,又具有ASIC的计算速度。随着FPGA[1]应用领域的不断扩大,即使采用百万门级的FPGA,也很难一次容纳所有的电路设计。动态部分可重构是将任务划分成更细粒度的功能模块,根据任务执行的阶段分别下载,动态地重配置相应的部分电路,而不需要重新配置的固定模块部分则不受影响。基于此技术设计的可重构系统在高速数字滤波器、图像压缩、硬件演化计算、定值计算、嵌入式系统等方面,都有着广泛的应用前景。
在系统分析研究现有各种动态部分可重构方法的基础上,结合FPGA设计模块化的特点,本文提出一种基于模块化的动态部分可重构的SDRAM控制器设计方法,依靠强大的FPGA软件工具生成相应的配制模块,并通过了板级验证。
1 基于模块的动态部分可重构方法
在该方法中,任务被划分为相互独立的子模块,这些子模块的总大小一般要超过FPGA芯片的最大容量,运行时只需将当前任务执行所需要的子模块配置到芯片上。因此,这种方法不受硬件资源的限制,可以完成任意规模的任务。任务模块之间的通信使用总线宏来完成,总线宏允许信号穿越模块的边界而保持正确通信。动态指令集计算机[2]就是利用基于模块的动态重配置方法实现的,它是在FPGA中的二维配置逻辑单元按照行的方式构成一维线性硬件模型下实现的可重定位硬件的系统结构,提供了面向应用的指令集,每个指令都作为一个独立的电路模块实现。其中的重配置模块按照水平方向布局,每个模块的宽度等于芯片的宽度,由于模块所占用的FPGA逻辑阵列的高度可以改变,因此,指令模块库中的各模块可以按照其功能的需求被设计成不同的尺寸。静态的全局控制器和通信网络构成了一维线性模型上的全局上下文,在整个任务的执行过程中保持不变。通信网络起到了总线宏的作用,实现了重配置模块之间以及重配置模块与全局资源之间的通信。动态指令空间存放着完成特定任务的动态重配置模块,可重定位硬件使得任意一个指令模块都可以被配置到动态指令空间的任意部分,实现了“虚拟硬件”的概念,从而可以利用有限的资源完成更大规模的计算任务。而且,还实现了计算和指令模块重配置的重叠,隐藏了配置时间,有效地提高了系统的整体性能。
2 基于高速数据采集卡的SDRAM控制器设计
该SDRAM控制器是基于高速数据采集卡所设计的。数据采集卡以FPGA为主控制芯片,外围电路包括SDRAM存储电路、时钟电源电路、模拟电路以及上位机与板通信的UART接口、数据采集卡对数据采集目标进行数据通信的PCI总线接口。
在整个系统中,SDRAM电路能进行部分动态重构替换,以实现硬件电路与FPGA重构功能之间的相互适应。此系统采用Micron公司的32位SDRAM芯片,根据芯片的时序工作特点把SDRAM控制器分为3个模块:控制接口模块、命令模块、数据模块。SDRAM控制器的接口结构如图1所示。
SDRAM 具有多种工作模式,内部操作是一个非常复杂的状态机,本文设计的SDRAM控制器包括以下一些状态:模式寄存器设置状态、激活状态、预充电状态、写状态、读状态、自动刷新状态和空闲状态。在本控制器中还设计了2个FIFO、2个状态机(1个写,另1个必定在读),当写FIFO写满1帧时就切换到读FIFO[3];但由于读写的速度不同,这里需要对读FIFO进行多次读,当写满写FIFO时自动切换状态机,这样可以保证数据采集系统大数据量的读写,也保证了数据采集板数据采集的连续性。
3 模块化动态可重构方法的实现和验证
本设计验证所使用的高速数据采集板卡是基于Xilinx[4]Virtex-II XC2V500的芯片,该系列芯片是Xilinx公司生产的支持动态可重构的FPGA芯片。所采用的软件是Xilinx ISE9.1i集成软件包,其中包括用于确定模块在FPGA芯片上的位置和形状的Floorplanner软件,iMPACT实现把动态部分可重构位流下载到开发板上。在该可重构设计过程中,总线宏起到重要的作用,保证了动态可重构模块和静态固定模块之间的正确通信。
本设计是基于模块化的动态可重构设计,在设计过程中采用如图2的文件目录结构,以便组织每个设计步骤所生成的文件,更好地体现了模块化[5]的特点。
在SDRAM控制器程序中,SDRAM芯片的初始化程序模块(sdram_initial.v)作为静态固定模块,数据模块(sdram_data.v)和命令模块 (sdram_cmd.v)作为动态部分可重构模块。为了能体现可重构模块在重配制过程中不影响静态模块的工作,在重配制时,SDRAM芯片仍然可以被初始化。
(1)顶层模块设计与综合
首先确定整个控制器的顶层模块top.v,其中包括3个独立的模块sdram_initial.v、sdram_data.v、sdram_cmd.v、然后用XST工具对顶层设计进行综合,生成top.ngc文件,并存放在Initial文件目录下。
(2)总线宏[6]的设计
为了促进可重构模块之间的通信,需要保证穿过可重构模块边界的布线资源是完全固定而且必须是静态的,这就需要一种特殊的总线宏,它是模块之间通信的“桥梁”。目前使用的总线宏由8个三态缓冲器组成,每个三态缓冲器传输1位信息。根据模块设计划分的要求,在FPGA Editor中设计总线宏,并保存在Initial文件目录下,文件名为bus_macro.nmc。
(3)初始化预算
首先将top.ngc作为Ngdbuild命令的输入,生成top.ngd文件,然后使用Floorplanner对其进行位置和面积约束,产生约束文件top.ucf,并手动增加对总线宏位置、重配置模块和物理管脚的约束,该约束文件用于每个模块的具体实现。如有需要,使用Constraint Editor对整个设计做全局时序限制。最后,使用Ngdbuild命令重新生成tog.ngd文件,用于每个模块的具体实现。
(4)动态模块的实现
静态固定模块和动态可重构模块要通过顶层文件设计和约束来实现。首先将top.ucf和top.ngd文件拷贝到各模块目录下,并对每个模块运行Ngdbuild、Map、Par和Pimcreate命令,操作完成后将生成已布局布线的模块并放在Pims目录下。对可重构模块还要使用BitGen命令产生动态可重构位流sdram_data.bit和sdram_cmd.bit。
(5)可重构流的生成和验证
首先将top.ngc、top.ucf、bus_macro.nmc复制到Assemble,运行Ngdbuild命令产生top.ngd,再运行Map、Par命令,然后使用FPGA Editor来观察最后顶层模块的布局布线结果。最后使用BitGen命令得到配置位流文件top.bit,再使用iMPACT软件通过并口的电缆线top.bit,在下载过程中用JTAP模式配置Virtex-II FPGA芯片。运行SDRAM控制器的数据模块和命令模块的程序,用动态可重构位流sdram_data.bit和sdram_cmd.bit配置芯片的命令接收和数据读写过程,而在动态可重构配置过程中静态固定模块sdram_initial.v仍然能初始化SDRAM芯片,达到了动态部分可重构的设计目的。图3~图5为在FPGA Editor中设计的3种模块的区域约束对比图。
4 动态部分可重构配置与全局配置比较
传统的全局配置在硬件电路升级时是把电路的所有模块一起更新配置,这种配置方法在操作过程中把静态的固定模块又重新不变地配置了1次,使得在工程应用中显得效率不高。
与全局配置方法相比,基于模块化的动态部分可重构方法是一种高效率的FPGA配置方法。它将各模块的公共部分和全局控制部分设计为静态模块,在重配置时可以将系统运行状态和中间结果等存入该静态电路中,既减少了相应的路由选择和控制等外围电路所需要的硬件资源,又节省了向外传送这些数据所需要的时间。
使用普通的全局配制方法对SDRAM控制器进行设计,观察实验数据结果,得出2种方法的对比情况如表1所示。从表中可看出,使用动态部分可重构方法配置文件其容量减少,约为原来的1/4~1/3,配置时间大约为原来的3/5。
综上所述,把基于模块化的动态部分可重构方法应用到SDRAM控制器的设计里,在任务的执行过程中根据需求动态地进行模块替换,使得可重构配置计算不再受到硬件资源的限制,既能提高硬件电路的能量消耗,又能提高硬件资源的利用率,本方法在实际工程中有很高的应用价值。随着FPGA技术和开发工具的不断完善,必将更好地支持和推动可重构技术的发展。
参考文献
[1] 朱明程. FPGA 原理及应用设计. 北京: 电子工业出版社,1994.
[2] 李丽, 辛勤, 杨乐平.基于FPGA的可重构系统的应用[J].微处理机,2001(3):11-13.
[3] 张宇,时龙兴,王学香,等.面向片上系统的高性能SDRAM控制器设计[J].固体电子学研究与进展,2007(3).
[4] 徐 欣, 于红旗, 易 凡,等. 基于FPGA嵌入式系统设计(Xilinx Edition). 北京: 机械工业出版社, 2005.
[5] 刘杰,周建华,黄子强. 基于SDRAM的视频处理器设计与实现[J]. 电子元器件应用, 2006(7).
[6] Xilinx Inc. Two flows for partial reconfiguration: module based or difference based[EB/OL].http://direct.xilinx.com/bvdocs/appnotes/xapp290.pdf, 2003.