长期以来,设计者面临的最大寻衅是时序收敛,而功耗处于一个次要的地位。近年来,下面的成分使功耗日益得到设计者的关注:
1)移动运用的兴起,使功耗的主要性逐渐显现。大的功耗意味着更短的电池寿命。
2)芯片集成度的提高,使供电系统设计成为寻衅。

随着工艺的进步,芯片内的电路密度成倍提高,并且运行在以前数倍的频率之上,而片上连线则越来越细,片上供电网络必须将更多的电力以更少的连线资源送至每个单元,如果不能做到这一点,芯片的稳定性和预定事情频率都将成为问题。IR压降和供电网络花费的大量布线资源成为困扰后端设计者的主要问题,现在这种压力正在一步步传导到前端设计者的身上,哀求在设计阶段减少须要的电力。
3)功耗对本钱的影响日益显著功耗决定了芯片的发热量,封装构造须要及时把芯片产生的热量通报走,否则温度上升,造成电路不能稳定事情。因此,发热量大的芯片须要选择散热良好的封装形式,或者额外的冷却系统,如风扇等,这意味着本钱的增加。
基于以上缘故原由,功耗成为产品的主要指标与约束。下面的成分在设计之初,就应该列入设计者的考虑范围:
1)功耗目标的确定
a) 产品的运用领域中功耗指标的商业代价;
b) 封装,制程的本钱影响;
c) 实现的可行度,繁芜度,由此带来的设计风险和时程影响的评估;
d) 参考值的选取:根据同类产品,履历值,工具剖析确定,并随着设计的深入不断改动。
2)优化方案(策略)的设定
在进一步剖析之前,我们先看一下功耗的组成。
2. 功耗的组成
2.1 core power
功耗的组成包含RAM、ROM、时钟树(clock tree)和核心逻辑电路(Core logic)等四部分,下面依次来剖析。
1)RAM
RAM功耗的打算是项繁芜的任务,幸运的是,memory compiler可以为我们进行此项事情。关键点在存取每个端口的速率,这可以通过考虑存取pattern类型得到,或者通过仿真得到。建议在设计初期即天生不同参数(宽度,深度,速率,port数)的RAM/ROM的功耗数据,以利于设计探索。
2)时钟树
时钟树的功耗占到全体芯片功耗的40%~60%,由于它的高活动率(100%)和正负边沿均花费电力。
个中,电容包含寄存器的电容,驱动单元的电容和连线电容三部分。
3)核心逻辑电路
定义核心逻辑电路功耗为除时钟树外的组合与时序单元花费的电力。由两部分组成:
leakage current
capacitive loads
4)宏单元(macro cell)
多数芯片包含PLL等仿照macro,可以从库供应商的数据手册找到其功耗参数。设计者可以通过切分系统模式关闭不需事情的模块,以减小功耗。
2.2 IO power
IO功耗包含IO单元、外部负载、外部终端等。由于须要驱动板级的连线,IO的电容会是内部单元的数百倍量级,因此花费较多的电力。有时候,IO的功耗可以占到整体功耗的很大比例,系统架构可能因之改变,如:重新定义系统的划分,以减少芯片-芯片的连接;选择不同的IO接口协议,以减少能量花费。IO功耗常日由系统架构,接口带宽与协议哀求决定。一旦库选定,设计者可以优化的空间很小,但是核心的功耗是设计者可以减小的,在后面的篇幅中,我们将以核心功耗的估算与优化作为主题。
3. 功耗估算
功耗估算的代价是尽可能早地以定量办法看到优化结果,以助于设计者的初期架构探索。在每个阶段, 如产品方案、架构订定、代码书写、综合、P&R等,设计者都面临多少选择,能立时看到选择的结果,而不是到设计流程的末端,可以有效减少开拓韶光。
3.1估算的方法
功耗的估算可以在设计流程的各个阶段进行,对应设计表征的不同形式。
software level ->behavior level -> RT -> gate -> circuit
越早的阶段,抽象层次越高,其精确度越差,但可以更早给设计者反馈,同时得到估算结果花费的韶光越少。
(1)软件级
首先,定义系统将实行的范例程序。范例的程序常日会有上百万的机器周期,进行一次完全的RTL级的仿真可能须要数月韶光,这是不可接管的。办理的方法是在更高层次建立基本组成单元的功耗模型。
比较实用的方法是根据特定的硬件平台,统计出每条指令对应的功耗数据,进行指令级的仿真。
(2)行为级
在进行剖析前,我们首先应理解电路的功率花费事理,实际电路的电力花费如图1所示。
图1
Prms = 1/2 f Vdd^2 sigma(Ci Ai)
--- f :clock frequency
--- Vdd :voltage
--- Ci is capacitance load of node,
--- Ai is the average switching activity of their node
在行为级设计表征中,物理电路单元尚未建立,难点是得到电容与活动率的值。存在两种思路:
1)理论估计:
根据电路繁芜度得到C,繁芜度由算术,逻辑操作的数量,状态的数目与转换率衡量。 complex = f (arith ope, boolean ope, state, transition)
可以根据信息理论估算活动率。
2)实验估计:
由快速综合得到寄存器传输级的原型,进而估计电容与活动率。
(3)寄存器传输级
第一步是在库中为高层的设计组件建立功耗信息算式,得到办法是在不同环境变量组合下通过仿真,统计功耗数据,绘制成曲线形式。然后,通过静态剖析电路构造或动态仿真,网络电路动作几率数据,代入上述算式,得到各个组件的功耗值。末了,把所有组件的功耗值求和,得到总功耗。
(4)门级
与寄存器传输级的差异在于,基本单元是工艺库中的标准单元,功耗方程通过电路仿真得到,以是更精确。
(5)晶体管与版图层
所有的连线的电容、单元的负载,驱动都已得到,根据晶体管和连线模型的电压、电流方程,可以算出精确的功耗数据。
3.2估算的流程
由于指令与行为级估算的精确度太差,电路级估算的耗时过多,以是在业界的实践中采取较少。RTL与gate级估算是常用的选择。实际功耗剖析的实行必须借助工具的赞助,目前业界常日的选择是在RTL级采取power compiler,在门级采取primepower。
图2
下面以power compiler为例,解释门级估算的步骤。
在dc compile前,设置下面的变量:
power_preserve_rtl_hier_names = false/true
编译
写出ddc文件
仿真天生vcd 文件
vcd2saif转化为.saif文件 (把稳vcd2saif由csh调用,而不是在dc_shell界面调用)
读入ddc网表
read_saif
report_power
4. 功耗的优化
4.1优化的原则
图3是几个范例设计中功耗分布数据:
(图3 数据来自“International Solid-State Circuits Conference”)
我们的目标是减少时钟树、标准单元和存储器的功耗。功耗与性能常日是充满抵牾的:
1)使时钟变慢(更少的转换),但我们想要更快的处理速率。
2)减小Vdd,但Vdd变小会限定时钟速率。
3)更少的电路,但更多的晶体管可以做更多的事情。
简言之,我们想用最少的能量完成最大量的任务。实现办法是对电路动作的掌握风雅化,仅让恰好须要的电路,在须要的韶光内动作,而不摧残浪费蹂躏分毫。完成这一任务,须要设计者有效率地管理电路的动作。
当代系统是如此繁芜,甚至设计者必须切分为多少层次,分步前行才能把握:
软件 -> 架构 -> 逻辑 -> 电路
每一层次中,设计者对电路动作的掌握范围和手段都是不同的。软件是硬件动作的总调度师,设计者可以根据特定运用,关掉全体模块或减少无效的动作。进入架构层,视角转为若何将设界说务合理分配到各个模块,折衷动作最有效率,如pipeline、分布式打算、并行打算等。在逻辑层,则考虑若何实现一步动作仅使须要的电路动作。电路层的视角更为风雅,通过调节平衡旗子暗记到达韶光,驱动单元大小等手段,使电路的动作耗能最小。这里存在一个主要规律,称作效率递减率:
在高的抽象层次减少功耗的效率会比低的层次更高。
以是,降落功耗是一个别系工程,须要软件、硬件、电路、工艺等职员的共同努力。这里,我们将采取架构与逻辑的视角进行下面的谈论。
4.2 架构考虑
1)切分事情模式,硬件要可以供应一个接口,以使软件可以掌握电路模块的动作与否。不事情的模块挂起。
2)分布式打算:将全体任务切分到不同模块,在内部处理高活动性旗子暗记。
虽然总打算量没有改变,但对单个模块,韶光哀求降落,可以降频或降压。
3)并行打算:相同韶光内打算量相同,但可降频/压。
(打算量=开关的次数,开关次数没变,但每次开关的功耗本钱降了)
4)pipeline
每步的打算量减少,可以在性能相同的情形下,降落事情频率。
5)可编程性与hard-wire的权衡
可编程性越强,完成相同的任务耗电越多。
(图4)
4.3 RAM的功耗优化
很明显,大的RAM比小的RAM耗电要多,将整块的RAM分成小块可以降落存取功耗。
图5
值得把稳的一点是,多数设计者认为片选旗子暗记无效,RAM即进入最小功耗。实际上,若此时其数据/地址端口旗子暗记有翻转,会耗费相称的电力(约占激活功耗的20%)。在不存取时,最佳的办法是,保持片选无效,地址、数据是恒定值。
4.4时钟树单元/连线
4.4.1 时钟门控的事理
在范例的数字芯片中,时钟网络的功耗可以占到总量的50%,这是一个弘大的数字。一个行之有效的方案是利用时钟门控,将当前未事情逻辑的时钟树关闭。比如下面的逻辑,在EN是0时,可以将右侧的register bank的时钟关闭。
图6
时钟门控逻辑加入的办法有两种:手动和自动。
a) 手动办法
在每个IP模块的时钟根节点加入,EN旗子暗记可以由程序设定产生。
b) 自动办法
dc_shell > set_clock_gating_style (options) 选择时钟门控的办法和条件
dc_shell > analyze -f design.v 读入设计
dc_shell > elaborate MY_DESIGN 布局设计
dc_shell > insert_clock_gating 将符合条件的逻辑门控
dc_shell > create_clock -period 10 -name CLK 创建时钟
dc_shell > propagate_constraints -gate_clock 加入时钟门控单元的时序约束
手动和自动结合的办法可以达到最好的效率。
4.4.2 gating 单元的选择
a)latch-based(图7)
图7
b)latch-free(图8)
图8
通过set_clock_gating_style的下列选择,设计者可以掌握门控单元的选取,如图9所示。
图9
选择考虑:
1)latch:用还是不用,是个问题。
latch-free的方案中,EN旗子暗记必须在时钟负沿前稳定,否则时钟会涌现毛刺, 造成只留给EN产生逻辑半个时钟周期的韶光。latch-based方案则不存在这个限定,但引入latch使时序剖析,测试繁芜性增加。故选择哪种方案须要设计者权衡决定。
2)正沿/负沿寄存器须要指定不同的门控单元
比如latch-based方案:正沿FF用and门,负沿FF用or门
3)integrated clock-gating cell/普通单元
在天生库的过程中,可以创建专门的集成时钟门控单元,以得到较好的时序。
4.4.3 时序剖析
通过set_clock_gating_style -setup -hold 或 set_clock_gating_check指定。
AND门(图10)
图10
OR 门(图11)
图11
数值须要考虑到时钟歪斜的影响。
4.4.4 与dft流程的合营
1) 加入掌握点(图12)
图12
掌握点的位置和掌握旗子暗记可通过下面指令掌握:
dc_shell> set_clock_gating_style -control_point before -control_signal scan_enable
2) 加入不雅观察点(图13)
在测试中,EN旗子暗记和control logic中的旗子暗记是测不到的,办理办法是加入不雅观测逻辑。
图13
dc_shell> set_clock_gating_style -control_signal test_mode \
-observation_point true \
-observation_logic_depth depth_value
在测试模式,不雅观察逻辑许可不雅观测ENL旗子暗记,在正常操作模式,XOR树不消耗能量。
3) 测试旗子暗记与顶层测试端口连接
时钟门控单元的测试旗子暗记须要和顶层的测试端口相连,通过下指令进行,如图14所示。
图14
如果顶层有指定端口,将直接相连,否则,会创建此端口,并连接。
4.4.5 结果
在插入时钟树后,可以用report_clock_tree_power来得到时钟网络的功耗信息。
时钟门控经设计实践证明是一个行之有效的降落功耗手段,下图是基于一项真实设计的评估:
图15
5. 结语在当代芯片设计中,功耗越来越引起设计者的关注。在本文中,我们首先剖析了功耗的组成部分,然后阐述了功耗估算的方法,通过功耗估算可以使设计者在设计初期及时评估设计方案的效率,以便做出最优的选择。末了,重点剖析了功耗优化的手段,包括架构优化,RAM功耗降落,时钟门控三种技能,并对引进时钟门控技能时多少难点逐一提出理解决方案,如门控单元选择,时序剖析,测试支持等。功耗剖析与优化二者相辅相成,设计者善加利用,方可事半功倍。
来源:网络,侵删!