论文部分内容阅读
随着制造工艺水平的提升,FPGA密度和复杂程度不断提高,功耗也在越来越多的设计中成了一个必须要考虑的要素。如何在器件结构和工艺中对功耗进行优化,如何在设计前期尽可能准确的估计功耗,如何在设计中运用合理的设计方法和器件结构降低功耗,综合工具如何针对功耗进行优化,这些都对FPGA生产厂家、EDA工具提供商和设计工程师提出了新的挑战。
FPGA功耗的构成
由图1我们可以看到功耗基本上可以分成3部分:管脚触发器翻转的动态功耗,芯片内部触发器翻转的动态功耗和芯片静态功耗。在这三部分当中静态功耗是由芯片本身的生产工艺决定,不会随着设计和温度的变化而变化;内部和管脚的动态功耗来源于在高低电平翻转过程中对电容的充电,并且这一部分可以由如下公式进行计算:
P=kCV2f
由此公式我们可以看到影响动态功耗的因素包括:介质介电常数k,电容包括负载电容以及各种寄生电容c,电压V和触发器翻转频率f
基于90纳米工艺的功耗优化
如今半导体厂商们使用了很多种技术去降低功耗,比如使用Low-k电介质材料可以降低大约10%的10及内部晶体管的功耗,从图1中,我们可以看到10及内部晶体管的功耗占据了芯片总功耗的大部分,由此可见,采用Low—k电介质降低的10%的功耗是非常可观的;另外还有一些技术既可以降低动态功耗,也可以降低静态功耗,比如调整晶体管的阂值电压,当然这种调整是基于功耗与性能间的平衡,为每个晶体管设置阈值电压。又比如使用三层氧化物技术降低静态功耗,尤其在可配置RAM中比较明显。
下面主要以ALTERA 90nm工艺的StratixlI器件为例介绍半导体制造工程中的技术:
FPGA功耗的预测
在FPGA上板验证之前就对其功耗进行准确预测对系统的供电和散热设计的重要性自不言而喻。针对这点,Altera不仅提供了单独的EPE(EarlyPower Estimator)工具可以针对FPGA在不同的环境温度,散热片大小,风速等各种条件下的功耗进行评估,也在QuartuslI软件中集成了Power Play这一功耗分析工具。并且在Power Play中可以导入后仿真时的VCD文件,从中提取出各个触发器的翻转率,从而使分析结果更加接近于实际情况。
综合工具对功耗的影响
同样的RTL代码,使用不同的工具或者同一工具的不同选项综合出的逻辑结构不尽相同,这些也都会影响的整个器件的最终功耗。一个典型的例子就是RAM结构的编译。FPGA内部的RAM是固定大小的块RAM,如果要实现一个超出单个块RAM大小的RAM时往往需要将多个块RAM拼凑而成。比如在Cyclone器件中实现一个4K'4大小的RAM,需要4个M4K块RAM来实现;但是这个实现又有着两种不同的结构(见图2)。
如图2A,采用了拼深度的办法,将高位地址线Addr[10:11]作为片选信号和数据输出Mux的选择信号,虽然额外多了一个译码器和一个Mux,但是确保了每次读写有且仅有一个M4K在工作。再看图2B,采用了拼数据位宽的办法,虽然省掉了额外的译码器和Mux,但是每次读写时每一个M4K都在工作。显然,采用图2A的方式多用了资源,但是降低了功耗;采用图2B的方式节省了资源,但是缺浪费了功耗。
针对综合工具对功耗的影响,QuartusII从5.1开始在综合设置上除了面积优先和速度优先之外增加了一个功耗优化选项,当选择功耗优先时,QuartusII工具会自动针对当前的RTL设计选择一个功耗最优的结构。
代码风格对动态功耗的影响
如图l所示,动态功耗占用了整个芯片功耗的大部分,而动态功耗与芯片内部的资源密切相关。如图3所示在在StratixlI和CyclonelI器件中的动态功耗源的分布情况,通过对功耗源分布的理解有助于我们在代码设计阶段就考虑到如何降低功耗。图3中所有的设计都是在200MHz频率下使用多种逻辑资源产生的功耗。
可以看到在StratixII和CycloneII器件中大部分的功耗都是消耗在布线资源中,其余的分布在逻辑、时钟和内嵌RAM中。
时钟功耗管理
时钟由于具有高的翻转率和很长的分布路径,在动态功耗中占据了较大的比例,从图3中可以看出在StratixlI中平均有7%的功耗是由全局时钟布线带来的,而在CyclonelI中则高达15%。实际中与时钟有关的功耗可能更高,因为在逻辑、RAM和DSP模块内部的局部时钟也会消耗大量功耗。
时钟布线功率可以通过QuartusII软件自动优化,这里我们主要介绍在设计中利用Clock Control模块降低功耗的方法。Clock control模块是一个时钟驱动器,它可以由设计者动态的使能或关断时钟网络,或者在多个时钟源之间切换。其结构如图4所示:
用户可以利用ena信号动态关闭指定的时钟网络,使得由其驱动的所有逻辑单元停止翻转,从而起到降低整个芯片功耗的作用。
另一种时钟功耗是LAB内部驱动触发器的时钟所产生。如图3所示,在StratixII器件中每个LAB中的Clock和Clock enable都物理上连接在一起的,比如:使用labclk1信号的同时labclkenal信号也是使能的。因此,为了降低LAB-wide的时钟功耗,又不用关闭整个时钟树的话,就可以考虑用Clock enable信号控制内部触发器的翻转。参考的HDL代码如表2所示。
此处的时钟门控逻辑将会被QuartuslI软件自动的转为LAB-level的clock enable信号。从而减少时钟树分支的数量,降低时钟功耗。
PipeLining和Retiming对功耗的影响
带有大量毛刺的设计将会消耗更多的功耗,因为毛刺本身具有高翻转率。毛刺的产生是由于输入信号传输路径的差异所带来的,它使得组合逻辑的输出产生了不确定的同时也是不必要的电平翻转。设计中如果使用了大量的组合逻辑将会使毛刺传播的更广泛,继而带来大量的功耗。使用Pipeling结构可以有效的阻止毛刺的传播,在复杂的组合逻辑中使用触发器隔离的Pipeling结构,可将组合逻辑的复杂度降低,也同时将毛刺可传播的范围也缩小了。Retiming功能同样可以调整组合逻辑的复杂度。
下面我们通过一个实际例子来看,实验用到的三个例子的算法都是依赖于异或门功能,具体的资源使用情况如表3。使用PowerPlay功耗分析工具估算功耗,StratixII器件动态功耗的最大降幅达到了31%。
下一代降低功耗的工艺展望
众所周知,功耗随着器件密度和时钟频率的提升而加倍的增加,降低功耗将对芯片工艺技术和软件优化算法等提出了更高的要求,目前工业界领先的65nm降低功耗的技术如表4所示,在即将推出的6 5nm的下一代StratixIII产品中,将采用这些技术降低功耗。
FPGA功耗的构成
由图1我们可以看到功耗基本上可以分成3部分:管脚触发器翻转的动态功耗,芯片内部触发器翻转的动态功耗和芯片静态功耗。在这三部分当中静态功耗是由芯片本身的生产工艺决定,不会随着设计和温度的变化而变化;内部和管脚的动态功耗来源于在高低电平翻转过程中对电容的充电,并且这一部分可以由如下公式进行计算:
P=kCV2f
由此公式我们可以看到影响动态功耗的因素包括:介质介电常数k,电容包括负载电容以及各种寄生电容c,电压V和触发器翻转频率f
基于90纳米工艺的功耗优化
如今半导体厂商们使用了很多种技术去降低功耗,比如使用Low-k电介质材料可以降低大约10%的10及内部晶体管的功耗,从图1中,我们可以看到10及内部晶体管的功耗占据了芯片总功耗的大部分,由此可见,采用Low—k电介质降低的10%的功耗是非常可观的;另外还有一些技术既可以降低动态功耗,也可以降低静态功耗,比如调整晶体管的阂值电压,当然这种调整是基于功耗与性能间的平衡,为每个晶体管设置阈值电压。又比如使用三层氧化物技术降低静态功耗,尤其在可配置RAM中比较明显。
下面主要以ALTERA 90nm工艺的StratixlI器件为例介绍半导体制造工程中的技术:
FPGA功耗的预测
在FPGA上板验证之前就对其功耗进行准确预测对系统的供电和散热设计的重要性自不言而喻。针对这点,Altera不仅提供了单独的EPE(EarlyPower Estimator)工具可以针对FPGA在不同的环境温度,散热片大小,风速等各种条件下的功耗进行评估,也在QuartuslI软件中集成了Power Play这一功耗分析工具。并且在Power Play中可以导入后仿真时的VCD文件,从中提取出各个触发器的翻转率,从而使分析结果更加接近于实际情况。
综合工具对功耗的影响
同样的RTL代码,使用不同的工具或者同一工具的不同选项综合出的逻辑结构不尽相同,这些也都会影响的整个器件的最终功耗。一个典型的例子就是RAM结构的编译。FPGA内部的RAM是固定大小的块RAM,如果要实现一个超出单个块RAM大小的RAM时往往需要将多个块RAM拼凑而成。比如在Cyclone器件中实现一个4K'4大小的RAM,需要4个M4K块RAM来实现;但是这个实现又有着两种不同的结构(见图2)。
如图2A,采用了拼深度的办法,将高位地址线Addr[10:11]作为片选信号和数据输出Mux的选择信号,虽然额外多了一个译码器和一个Mux,但是确保了每次读写有且仅有一个M4K在工作。再看图2B,采用了拼数据位宽的办法,虽然省掉了额外的译码器和Mux,但是每次读写时每一个M4K都在工作。显然,采用图2A的方式多用了资源,但是降低了功耗;采用图2B的方式节省了资源,但是缺浪费了功耗。
针对综合工具对功耗的影响,QuartusII从5.1开始在综合设置上除了面积优先和速度优先之外增加了一个功耗优化选项,当选择功耗优先时,QuartusII工具会自动针对当前的RTL设计选择一个功耗最优的结构。
代码风格对动态功耗的影响
如图l所示,动态功耗占用了整个芯片功耗的大部分,而动态功耗与芯片内部的资源密切相关。如图3所示在在StratixlI和CyclonelI器件中的动态功耗源的分布情况,通过对功耗源分布的理解有助于我们在代码设计阶段就考虑到如何降低功耗。图3中所有的设计都是在200MHz频率下使用多种逻辑资源产生的功耗。
可以看到在StratixII和CycloneII器件中大部分的功耗都是消耗在布线资源中,其余的分布在逻辑、时钟和内嵌RAM中。
时钟功耗管理
时钟由于具有高的翻转率和很长的分布路径,在动态功耗中占据了较大的比例,从图3中可以看出在StratixlI中平均有7%的功耗是由全局时钟布线带来的,而在CyclonelI中则高达15%。实际中与时钟有关的功耗可能更高,因为在逻辑、RAM和DSP模块内部的局部时钟也会消耗大量功耗。
时钟布线功率可以通过QuartusII软件自动优化,这里我们主要介绍在设计中利用Clock Control模块降低功耗的方法。Clock control模块是一个时钟驱动器,它可以由设计者动态的使能或关断时钟网络,或者在多个时钟源之间切换。其结构如图4所示:
用户可以利用ena信号动态关闭指定的时钟网络,使得由其驱动的所有逻辑单元停止翻转,从而起到降低整个芯片功耗的作用。
另一种时钟功耗是LAB内部驱动触发器的时钟所产生。如图3所示,在StratixII器件中每个LAB中的Clock和Clock enable都物理上连接在一起的,比如:使用labclk1信号的同时labclkenal信号也是使能的。因此,为了降低LAB-wide的时钟功耗,又不用关闭整个时钟树的话,就可以考虑用Clock enable信号控制内部触发器的翻转。参考的HDL代码如表2所示。
此处的时钟门控逻辑将会被QuartuslI软件自动的转为LAB-level的clock enable信号。从而减少时钟树分支的数量,降低时钟功耗。
PipeLining和Retiming对功耗的影响
带有大量毛刺的设计将会消耗更多的功耗,因为毛刺本身具有高翻转率。毛刺的产生是由于输入信号传输路径的差异所带来的,它使得组合逻辑的输出产生了不确定的同时也是不必要的电平翻转。设计中如果使用了大量的组合逻辑将会使毛刺传播的更广泛,继而带来大量的功耗。使用Pipeling结构可以有效的阻止毛刺的传播,在复杂的组合逻辑中使用触发器隔离的Pipeling结构,可将组合逻辑的复杂度降低,也同时将毛刺可传播的范围也缩小了。Retiming功能同样可以调整组合逻辑的复杂度。
下面我们通过一个实际例子来看,实验用到的三个例子的算法都是依赖于异或门功能,具体的资源使用情况如表3。使用PowerPlay功耗分析工具估算功耗,StratixII器件动态功耗的最大降幅达到了31%。
下一代降低功耗的工艺展望
众所周知,功耗随着器件密度和时钟频率的提升而加倍的增加,降低功耗将对芯片工艺技术和软件优化算法等提出了更高的要求,目前工业界领先的65nm降低功耗的技术如表4所示,在即将推出的6 5nm的下一代StratixIII产品中,将采用这些技术降低功耗。