首先我们需要建立一个独立的operating_conditions,基于slow_14V的库,电压是1.2V:create_operating_conditions –name slow_12V –library slow_14V –process 1 –voltage 1.2 –temperature 125
然后对于需要使用1.2V的子电路,需要设置operating_condition为slow_12V。分析和优化工具,会首先根据slow_14V提供的model计算出在1.4V驱动下,延时、功耗、电容等信息,然后利用slow_14V提供的k_factor进行scaling,计算出1.2V条件下的数值。
利用这个方法可以在IP提供商没有提供所需分析环境的情况下,利用已有模型估计出在其他环境中出现的情况。但需要注意的是,当条件相差很大时,Scaling的结果偏差会很大,建议不要使用这种方式进行sign-off工作。
15 / 26
至于频率Scaling,则是在应用过程中可以减少频率,以减少翻转率,达到低功耗应用的需求。
Scaling的使用最好不要超过标准单元库的10%,否则结果完全不可行,同时如果采用CCS 格式的电流源模型Liberty,则Scaling结果会比普通的NLDM格式Liberty更精确一些。3.3 其他未提及工艺
实际上,上述提到的2种工艺范围,甚至是现在已有的所有工艺技术,从本质上想进行低功耗设计,其思路都是一致的,方法无外乎关断电源、低压驱动(多电压混合设计)、Multi-VT等方法,只是当工艺尺寸下降到一定程度后,IP提供商能提供足够的数据,使EDA工具直接使用,减少工程师重复劳动的工作量。
所以低功耗设计,首先应该从系统设计下手,在一个设计中,应该使用怎样的低功耗策略,采用那种工艺尺寸,有没有合适的单元库,如果没有库,是否自己可以设计,这些都必须首先考虑清楚。而工具,只是为了帮助我们实现自己的想法。
4.0 一个低功耗设计实现的例子
这里提供一个DEMO(pl8051_extend_chip),可以使读者更快的理解低功耗设计的基础。下图所示,是该设计的功能结构图:
图 4-1 pl8051_extend_chip功能结构图
由图 4-1可以看出,整个设计主要是由一个8051控制器,通过SFR总线对其他模块进行控制,U_Des是一个算法模块,U_Pcu是功耗控制单元(Power Control Unit)。整个设计都在Clk的控制下进行工作,只有U_Des工作在ClkF下。
这里假设Clk(28ns)是ClkF(7ns)的4分频时钟,且与ClkF同源同向,这样才可以保证U_Des控制的正确性。
由于U_Des需要在较快的频率下工作,因此需要对U_Des进行一些特殊的设计,也就是对整个设计进行低功耗设计,如下所示:
16 / 26
图 4-2 低功耗设计方案示例
上图主要描述以下信息:
1. 2个电压域,TOP以及DES_DOMAIN。
2. 电源设计外部提供,分1.2V的VDD12和1.0V的VDD10
3. 设计中除DES电路几乎所有电路工作在1.0V的VDD电压域。
4. U_Des由于工作速度要求较高,工作在1.2V的VDD12电压域DES_DOMAIN,但由于不使用的时候需要关断,以降低静态功耗,因此,通过一组PowerSwitch进行控制,控制信号来源为U_Pcu的PcuSfrDatOut[0]输出。该电压域与TOP电压域共用VSS地信号。
5. 由于U_Des电路处于VDD12电压域,而U_Pcu处于VDD电压域,因此需要添加Level Shifter进行电平转换。
6. U_Des电路输出信号,需要通过一个Isolation Cell,在关断电源时提供稳定电平,而该电平为1.2V,因此还需要利用Level Shifter转换成1.0V电压域信号,Isolation Cell的Enable信号来自于U_Pcu模块的PcuSfrDatOut[1]信号。
7. U_Des电路中的寄存器需要使用Retention Register,save和restore控制信号分别来自于U_Pcu输出PcuSfrDatOut[2]和PcuSfrDatOut[3]经过Level Shifter产生的信号。Synopsys公司为低功耗设计提供了一整套的解决方案,即UPF设计流程。UPF(Unify Power Format)是一种描述功耗设计思想的文件,Synopsys Galaxy Implementation Platform 只需要读取UPF文件,就可以将低功耗设计思路实现,而Synopsys Discovery Verification Platform读取UPF后,可以对低功耗思路以及最终实现的电路进行验证。
接下来,我们利用UPF描述该DEMO的功耗设计思路。
4.1 申明电压域以及虚拟电压接口
首先申明电压域,并申明VDD、VDD12以及VSS等电压端口:
create_power_domain TOP
create_power_domain DES_DOMAIN_domain –elements U_Des
create_supply_port VDD
create_supply_port VDD12
create_supply_port VSS
根据上述指令,工具会识别出如下图所示中画圈的信息,电压域及虚拟电压端口开始出现:
17 / 26
图 4-3 电压域及虚拟电压端口信息
需要注意的是电压端口只不过是虚拟存在的,并不是一定在顶层连接。
4.2 申明电源网络
接着申明每个电压域中的电源网络,建议从顶层往底层进行申明,如首先申明TOP的VSS,VDD。:
create_supply_net VDD
create_supply_net VSS
以上语句添加下图中画圈部分:
图 4-4 产生顶层电源网络
接着申明DES_DOMAIN的电源网络,但需要注意的是,如果需要插入Level Shifter,最好是在与其有连接关系的电源域(TOP)同时申请电源线,并连接起来:
create_supply_net VDD12
create_supply_net VDD12 –domain DES_DOMAIN –reuse
#DES_DOMAIN的VDD12与TOP的VSS共用一个网络,因此
需要-reuse
create_supply_net VDD12G
create_supply_net VDD12G –domain DES_DOMAIN -reuse
create_supply_net VSS –domain DES_DOMAIN –reuse
create_supply_net VDD –domain DES_DOMAIN –reuse
以上语句添加下图中画圈部分:
18 / 26
图 4-5 子电路的电源网路申明
然后将电源网络和电源端口连接起来:
connect_supply_net VDD12 –port {VDD12}
connect_supply_net VDD –port {VDD}
connect_supply_net VSS–port {VSS}
以上语句添加下图中画圈部分:
图 4-6 连接电源网络和电源端口
最后为每个电源域申明主电源网络来源,主电源就是该电压域普通逻辑工作使用的电源:set_domain_supply_net TOP –primary_power_net VDD –
primary_ground_net VSS
set_domain_supply_net DES_DOMAIN –primary_power_net