FPGA/ASIC技术
摘 要:针对高速大容量Flash芯片控制中面临的高速可靠性不高与动态功耗大的问题,研究了一种将复杂状态机操作映射到内嵌RAM上运行的方法。通过对内嵌RAM读地址的切换,实现了等延时的状态跳变与输出控制。同时采用加强时钟管理、分割组合逻辑来避免信号不必要的翻转,极大地提高了时序运行的可靠性并降低了其动态功耗。实践表明,该方法实现的Flash控制时序比传统的状态机在资源消耗和功耗方面均能降低50%以上,为复杂时序逻辑的实现提供了一个新思路。
引言
在FPGA对Flash控制操作中,有限状态机(Finite State Machine,FSM)与多进程描述方式相比有着层次分明、结构清晰、易于修改和移植的明显优势而被广泛应用。传统状态机在描述实现寄存器存储状态信息、组合逻辑产生下一个状态和输出值时,大量使用了FPGA的布线、查找表、寄存器等宝贵资源。
为了实现FPGA的可编程性,在其内部使用了大量的可编程逻辑开关。由于可编程逻辑开关的电阻较金属线大得多,而且引入了大量的寄生电容,从而增加了电路功耗,降低了电路速度(研究表明,总动态功耗中62%来自于可编程布线资源)。而且大量组合逻辑容易受到布局布线延迟,在查找表的输出端产生“毛刺”,当系统时钟频率、操作密度大幅提高时,极易引起时序逻辑错误。为此,研究了一种基于存储器映射的有限状态机逻辑实现方法,对FPGA资源进行选择性使用,从而达到降低FPGA功耗、提高运行可靠性的目的。
NAND Flash芯片是通过异步高性能I/O与主控芯片通信的,8位复用总线传输操作指令、操作地址以及数据,多个控制信号来区分总线接口状态以及获取芯片工作状态,如图1。
NAND Flash芯片控制器主要完成初始化、无效块检测、块擦除、页编程和页读取共5个基本操作模式。其中初始化操作与无效块校验是在系统上电后需要率先完成的操作,随后控制器将进入到空闲状态,并根据输入的相应控制信号完成剩下的块擦除、页编程和页读取操作。各个操作模式都是状态转移实现一定时序的输出与接收,并且用状态机容易实现。以块擦除为例,其中输入信号有Erase_en、Earse_do和R/B 3个信号,输出信号有CLE、ALE、WE、RE 4个信号,状态转移如图2所示。
2.1 基于优化资源配置的低功耗、高可靠设计思路
目前主流的FPGA芯片内部除含有查找表、触发器、布线资源等基本逻辑资源外,还集成了块RAM、分部式RAM、时钟管理等多种丰富的资源。FPGA的可编程特性主要靠布线结构中的可编程开关连接可编程逻辑块实现。
不同类型资源所消耗的动态功耗在FPGA总功耗中所占比例不同。其中总动态功耗的62%来自于布线资源,19%来自于时钟网络,而可编程逻辑块只占动态功耗的19%。
根据FPGA中各种资源性能、功耗不同的现象,提出了一种新的设计思路,即在满足系统性能的前提下,对FPGA资源进行优化选择性使用,尽可能使用相对较低功耗的资源完成设计任务。将有限状态机映射到FPGA内部RAM中执行,不仅可以减少布线资源的使用,从而降低FPGA的动态功耗,而且能够消除高速状态下切换布线延迟产生的错误或者无效状态。
2.2 基于存储器映射的有限状态机设计方法
状态机组合逻辑都可以抽象为一定输入编码与一定输出编码的对应,即当前状态与输入信号共同决定次态的编码。为了能在块RAM中执行有限状态机,需要将状态机的编码及状态转移等信息映射到块RAM中。具体方法为:块RAM中每个存储单元内容分为状态机的状态编码信息与状态机的输出信息两部分。由状态机的当前编码信息和状态机的输入信息一起构成下一个状态编码信息的存储地址。
如果采用[D2:D0]表示Flash块擦除状态机的8个操作状态、[D4:D3]表示分3次发送的操作块地址信息、[D5]表示所用的两个操作命令,则操作状态编码、地址编码、命令编码即可唯一确定该状态机当前所处的状态(具体编码方式如图3所示)。其中次态的高4位是状态机向下一状态转化时的输出值,用于对Flash芯片的控制;当前态的高3位是状态机的输入控制信号。采用这种编码方式容易将图2所示的有限状态机表示为当前态与次态对应的真值表见表1。
将表1中当前态作为RAM的存储地址,次态作为RAM中存储的数据,即可以将图2所示的有限状态机映射到存储器上执行,如图4所示。状态机进行转化时,下一状态的编码信息存储地址由当前状态的编码信息和状态机的输入信息共同决定。同样,Flash操作中其他的操作模式均可以按这种方式编码并映射为用存储器执行的有限状态机。
实现有限状态机到存储映射所需要的存储空间最大为:
M=2i×(O+S)
其中i表示状态机输入的位数,O表示状态机输出的位数,S是状态编码的位数。
当然,当有限状态机越来越复杂时,其所需的存储空间容量越来越大,也可以适当地根据实际情况通过逻辑控制对地址控制进行修正来减小存储空间需求。
FPGA的功耗主要包含静态功耗和动态功耗两部分。静态功耗主要取决于所选FPGA的型号;动态功耗是所有电容性节点充放电产生的组合功耗和电路转换过程中的短路电流形成的功耗。降低FPGA动态功耗的思路为:在保证满足设计要求的情况下,通过降低内部信号的翻转率来降低功耗。其手段包括对时钟进行管理与增加防火墙寄存器。
3.1 基于时钟管理模块的低功耗优化
在FPGA内部时钟信号不断翻转,由时钟信号派生出的信号通常运行在主时钟频率的较小分量(通常为12%~15%)。所以在所有高耗能信号中,时钟是主要矛盾。通常情况下,一个状态机会在某个时间段内保持同一个状态不变,但其时钟始终处于翻转状态。因此,关闭闲置模块程序的时钟可以降低时钟资源产生的功耗。在Flash操作中,当FPGA处于擦除模式时,初始化操作、无效块校验、页编程和页读取模式均处于闲置状态。图4中时钟管理模块负责对FPGA内部各模块的时钟进行管理,只有该模块处于工作状态时时钟信号才会翻转。在设计中增加时钟管理模块非常简单,可以在硬件描述语言中添加,也可以通过综合工具自动添加。
3.2 增加防火墙寄存器的低功耗优化
在FPGA程序设计中大量组合逻辑很容易受到布局布线延迟在查找表的输出端产生“毛刺”。“毛刺”在后续组合逻辑电路的传播中,可能导致多米诺骨牌效应,致使系统变得不稳定,而且增加了调试难度,消耗了大量的能量。研究表明,由“毛刺”在大量组合逻辑中的传递引起的动态功耗占总动态功耗的10%。用FPGA实现大多数电路功能时,FPGA内部大部分的基本逻辑单元中的触发器(Flip-Flop,FF)没有使用,将这些未用的FF添加到信号传输路径上被称作增加防火墙寄存器(如图5)。通过在程序中添加防火墙寄存器来分割组合逻辑,把每个逻辑功能限制在相邻的逻辑单元中,从而缩短布线长度和减小负载电容,将“毛刺”波的传递限制在最小范围,达到降低功耗的目的。
为了比较分析传统状态实现方法与基于RAM映射的有限状态机设计以及低功耗优化方法的性能差别,对设计完成FPGA内部资源消耗情况、功耗评估以及理论最高工作频率3方面进行测试。
整个试验以Xilinx公司的Spartan-6系列FPGA XC6SLX150为目标器件,选用ISE13.1版本的综合工具,并利用ISE中自带的XPower进行功耗分析。XPower从布局和布线(.ncd)文档中获得FPGA设计信息,从Vcd文档中获得设计中所需的时钟、开关活动等信息,该文件可在布局和布线时在Pwr文档中得出功耗报告。仿真结果如表2。
从表中可以看出,基于RAM映射的有限状态机设计仅仅增加一个片内Block RAM资源的使用就使内部其他资源占用率下降到传统方式的1/3,总功耗也能下降到原来的50%以下,并且最大工作频率有明显提高。对基于RAM映射的有限状态机进行低功耗优化后仅仅增加了小部分闲置FFs资源的使用,使FPGA总功耗进一步下降到传统状态机设计的43.1%,而且最大工作频率提高了65.6%。
文章针对Flash控制应用中实现复杂状态机的设计时存在高速可靠性与动态功耗的问题进行研究,提出了一种优化FPGA内部资源使用方法,利用FPGA内部存储资源构成有限状态机的设计并进行了低功耗优化。其将传统方式下的状态机电路结构中不断变化的状态机寄存器信息转化成RAM中的固定模块,减少了使用功耗较高的布线资源。不仅有效降低了FPGA动态功耗,而且能够消除高速状态下切换布线延迟产生的错误或者无效状态,特别适合大规模的复杂状态机结构,使得各个状态机切换具有等间隔的时间延迟。增加时钟管理模块关闭闲置模块的运行以及添加防火墙寄存器限制“毛刺”传播,进一步降低了FPGA的动态功耗,提高了系统可靠性。该方法很容易迁移到其他FPGA应用设计中,有较高的实用价值。
全部0条评论
快来发表一下你的评论吧 !