logo资料库

ASIC Low Power Design Methodology & Implement Scripts Example.pdf

第1页 / 共52页
第2页 / 共52页
第3页 / 共52页
第4页 / 共52页
第5页 / 共52页
第6页 / 共52页
第7页 / 共52页
第8页 / 共52页
资料共52页,剩余部分请下载后查看
ICSI-Gray all rights reserved 低功耗设计 该文档涉及的内容:  低功耗设计的目的  功耗的构成/类型  功耗分析与流程——EDA 工具使用  低功耗设计与优化 功耗的构成—按结构分 以 SoC 为例,主要分为:时钟树功耗、处理器功耗、存储器功耗、其他逻辑和 IP 核功耗、 输入输出 pad 功耗。在不同的应用、设备中,这些功耗的比例不一样,但是时钟树、处理器、 存储器占了绝大部分功耗,这是需要说明的。 功耗的构成—按照类型 低功耗分类,其构成主要有动态功耗、静态功耗、浪涌功耗这三种。 动态功耗 动态功耗包括:开关功耗或者称为翻转功耗、短路功耗或者称为内部功耗。 在数字 CMOS 电路中,对负载电容进行充放电时消耗的功耗,比如对于下面的 CMOS 非门中:  当 Vin = 0 时,上面的 PMOS 导通,下面的 NMOS 截止;VDD 对负载电容 Cload 进行充 电,充电完成后,Vout 的电平为高电平。  当 Vin = 1 时,上面的 PMOS 截止,下面的 NMOS 导通,负载电容通过 NMOS 进行放 电,放电完成后,Vout 的电平为低电平。 这样一开一闭的变化,电源的充放电,就形成了开关功耗,开关功耗的计算公式如下所 示: 1 / 52
ICSI-Gray all rights reserved Pswitch = [(VDD)2CLoadTr] / 2 = 在上式中,VDD 为供电电压,Cload 为后级电路等效的电容负载大小,Tr 为输入信号的翻 转率。 短路功耗 短路功耗也称为内部功耗,短路功耗是因为在输入信号进行翻转时,信号的翻转不可能 瞬时完成,因此 PMOS 和 NMOS 不可能总是一个截止另外一个导通,总有那么一段时间是 使 PMOS 和 NMOS 同时导通,那么从电源 VDD 到地 VSS 之间就有了通路,就形成了短路电 流,如下面的反相器电路图所示: 短路功耗 Pshort 的计算公式如下所示: 上式中,Vdd 为供电电压,Tr 为翻转率,Qx 为一次翻转过程中从电源流到地的电荷量。 由此我们可以找到,动态功耗主要有开关功耗和短路功耗;其中开关功耗在动态功耗中 占大部分比例;从上面的两个式子中我们可以看到,动态功耗主要跟电源的供电电压、翻转 率、负载电容有关。 静态功耗 在 CMOS 电路中,静态功耗主要是漏电流引起的功耗,如下图所示: 漏电流有下面几个部分组成:  PN 结反向电流 I1(PN-junction Reverse Current) 2 / 52 122DDeffclockVCf
ICSI-Gray all rights reserved  源极和漏极之间的亚阈值漏电流 I2(Sub-threshold Current)  栅极漏电流,包括栅极和漏极之间的感应漏电流 I3(Gate Induced Drain Leakage)  栅极和衬底之间的隧道漏电流 I4(Gate Tunneling) 一般情况下,漏电流主要是指栅极泄漏电流和亚阈值电流(进入超深亚微米工艺之后, 隧道漏电流成为主要电流之一),因此下面就简单介绍一下这两种电流。 栅极泄漏功耗: 在栅极上加信号后(即栅压),从栅到衬底之间存在电容,因此在栅衬之间就会存在有 电流,由此就会存在功耗。 亚阈值电流: 使栅极电压低于导通阈值,仍会产生从 FET 漏极到源极的泄漏电流。此电流称为亚阈 值泄漏电流。在较狭窄的晶体管中,漏极和源极距离较近的情况下会产生亚阈值泄漏电流。 晶体管越窄,泄漏电流越大。要降低亚阈值电流,可以使用高阈值的器件,还可以通过衬底 偏置进行增加阈值电压,这些属于低功耗设计,我们在后面的低功耗设计中会进行讲解。 静态功耗的计算公式如下所示,Ipeak 为泄漏电流: 静态功耗往往与工艺有关,我们在第三小节中将进一步进行讨论。 浪涌功耗 浪涌功耗是浪涌电流引起的功耗。 浪涌电流是指开机或者唤醒的时候,器件流过的最大电流,因此浪涌电流也称为启动电 流。一般情况下,浪涌功耗不是我们关注的地方,因此这里只是说明有这个功耗存在。 功耗分析与流程概述 这里我们就介绍一下 EDA 工具分析功耗的(普遍)流程,然后下一小节我们将介绍低功 耗电路的设计和优化。 1、功耗分析流程的输入输出 功耗分析的流程(从输入输出关系看)如下所示: (注意,不管使用什么方法进行功耗分 析,功耗分析的时候,输入设计文件的都是门级网表文件) 3 / 52
ICSI-Gray all rights reserved 上面的图中,需要四种东西:  tech library: 包含功耗信息的工艺库,比较精确的库还应该包含状态路径(SDPD)信息, 代工厂提供。  netlist: 设计的门级网表电路,可以通过 DC 综合得到。  parasitic: 设计中连线等寄生参数,比如寄生电容、寄生电阻,这个一般是后端 RC 寄  生参数工具提供,简单的功耗分析可以不需要这个文件。 switch activity: 包含设计中每个节点的开关行为情况,比如说节点的翻转率或者可以计 算出节点翻转率的文件。这个开关行为输入文件是很重要的。这个开关行为可以有不同 的形式提供,因此就有后面不同的分析功耗的方法。 2、开关行为的一些概念 说到开关行为,我们前面的翻转率也是一种开关行为。此外我们还有其他关于开关行为 描述的概念,这里我们通过举例说明,如下图所示:  翻转(次)数:逻辑变化的次数,上图中信号的翻转数为 3.  翻转率:翻转率是单位时间内信号(包括时钟、数据等等信号)的翻转次数。上图中 翻转率为 3/6 = 0.5(6 个时间间隔内,翻转了 3 次)  T1,T0:(节点)信号的逻辑值为 1 和 0 的持续时间,上图中 T1 为 4,T0 为 2。  静态概率(static probability,SP) :(节点)信号逻辑值为 1 的概率,上图中的 SP 为 4/6=2/3。 3、开关行为(文件)情况表示 前面我们说到了功耗的分析需要开关行为的情况,一般就是指每个节点的翻转率情况, 4 / 52
ICSI-Gray all rights reserved 我们有下面方式设置翻转率: ① 直接命令进行 例如命令: set_switching_activity -static 0.2 -toggle_rate 20 -period 1000 [all_inputs] 这时,翻转率设置的节点是输入,响应的翻转率为:Tr = 20/1000 = 0.02GHz SAIF 文件:即 switching activity interchange format,开关行为内部交换格式文件,用于仿 真器和功耗分析之间交换信息的 ASCII 文件(美国标准信息交换码文件)。 VCD 文件:即 value change dump 文件,它也是一个 ASCII 文件,文件中包括了一个设 计中所选择变量值的变化信息,这些信息通过在仿真 testbench 中使用“VCD 系统函数” 得到。 在 Synopsys 的低功耗设计流程里面,可以使用 power compiler(包含在 design compiler 中)进行功耗分析。我们可以通过命令来定义节点的翻转率的方法来分析功耗,称为无向量 (vector-free)分析法。 由于 SAIF 文件和 VCD 文件可以通过对电路仿真得到,它们是仿真接口格式文件,因 此也可以通过 VCS 仿真器产生 SAIF 或者 VCD 文件的方法分析功耗。当要分析的结果比较 精确时,一般使用 SAIF 文件或者 VCD 文件(VCD 文件通过相关命令转换成 SAIF 文件, 而后使用 SAIF 进行功耗分析)。 ② 无向量分析法 前面我们说到,无向量分析法就是通过命令来定义节点的翻转率的方法来分析功耗。我 们先来逐条学习需要什么的命令,然后在后面进行举例说明无向量分析法的脚本。 在学习设置翻转率的命令之前,我们先来了解一下什么是设计的传播起点和黑盒子。 我们定义传播的起点为设计的输入端和黑盒子的输出端,黑盒子是指在工艺库里没有 功能描述的单元(比如 ROM 、RAM 或者一些 IP 核)。 例如对于下面的设计中: 上面的设计有三处起点,一处是整个设计的输入端,一处是黑盒子的输出端,还有一处 是某个单元的输入端。最后一处的起点不包含在我们的定义中,但是我们也把它当作起点, 因为这是被标记了翻转率,这个我们后面进行讲解。 5 / 52
ICSI-Gray all rights reserved 利用无向量分析法分析功耗时,不必提供设计内部节点的翻转率,而是通过设置起点的 翻转率就行了。我们有两种方法设置翻转率  一种是通过设置翻转变量;  一种是通过标记的方法。 下面我们就来介绍如何通过这两种方法进行设置翻转率。 ①设置翻转变量 在 power compiler 中,可以设置下面的两个翻转变量进行设置翻转率: power_default_toggle_rate power_default_static_probability 下面就来介绍一下这两个变量(主要介绍 power_default_toggle_rate): power_default_toggle_rate 其用法我们可以在 DC 中进行 man 一下,这个变量设置设计中默认使用的翻转率。 定义方式是: set power_default_toggle_rate (翻转值) 翻转值默认是 0.5。这个翻转值不是翻转率,这个变量定义的翻转率是个相对的值:  如果设计定义了时钟,这个 power_default_toggle_rate 变量定义的翻转率就以 最快的时钟为参考,比如翻转值为 0.5 时,设计中最快的时钟为 10ns,那么翻转率 Tr = 0.5/10ns = 0.05GHz,也就是整个设计中默认的翻转率是 0.05GHz。  如果设计中没有时钟,那么就会以工艺库中的时间单位作为参考,例如工艺库中的时间 单位是 ns,翻转值为 0.5,那么翻转率 Tr = 0.5/1ns = 0.5GHz。 power_default_static_probability 这个设置的是默认的静态概率,也就是起点的逻辑值是 1 的概率。至于静态概率,这里 就不详细描述了。这两个变量的默认翻转值都是 0.5,翻转率是很大的,一般情况下需 要减小一点,比如设置为 0.01 和 0.02 这样的。 一 般 情 况下, 默 认 的翻转 率 是 设置在 起 点 上的, 也 就 是说起 点 的 翻转率 用 的 是 power_default_toggle_rate 这个变量设置的翻转率,内部节点的翻转率可以通过传 播得到,如下图所示: 6 / 52
ICSI-Gray all rights reserved 需要说明的是,传播不可以穿过没有功能描述的黑盒子,也就是不能通过传播的方式得 到黑盒子的输出翻转率,因此我们在最前面就定义了,将黑盒子的输出当作起点,这样其他 节点的翻转率可以通过传播得到(包括黑盒子的输入),黑盒子输出的翻转率,通过默认设 置的翻转率得到,我们就得到了设计中所有节点的翻转率。 ②标记翻转率 上面的方式设置的是默认的翻转率。当我们需要为某个节点标记某个指定的翻转率,而 不是使用默认的翻转率时,我们就用到了标记频率,如下图所示: 单元 A 的输入端口标记了特定翻转率,比如说 0.04GHz。标记的翻转率比传播的翻转率优 先级更高,被标记翻转率的节点将作为一个新的起点,这就不属于起点的定义,但还是叫它 为起点的原因。标记翻转率之后,这个单元后续的节点的翻转率将通过这个新标记的翻转率 传播得到。 设置标记翻转率(简称设置翻转率)的命令主要有两条: 1) set_switching_activity 2) set_case_analysis 下面就来讲解一下这两条命令的意思。 set_switching_activity 设置某个节点的翻转率和静态概率,在使用无向量分析法估算功耗的时候,这个命令被 广泛使用,越多的节点上被标记翻转率,估算功耗的精度就越高。 命令和选项如下所示: set_switching_activity [-static_probability static_probability] [-toggle_rate toggle_rate] [-state_condition state_condition] [-path_sources path_sources] [-rise_ratio rise_ratio] [-period period_value | -base_clock clock] [-type object_type_list] [-hierarchy] [object_list] [-verbose] 7 / 52
ICSI-Gray all rights reserved 下面来简单介绍一下常用的几个选项,详细的介绍可以通过 man set_switching_activity 获取。 -static_probability 设置静态概率 -period period_value | -base_clock clock 设置时钟(周期),-period 和 -base_clock 只能设置其中一个 -toggle_rate 设置翻转值,与-period 或者 -base_clock 相关联。翻转率 Tr 等于:用-base_clock 选项指 定的时钟周期里面的翻转数目或用-period 选项指定的时间段里的翻转数目;当没有这 个设置两个选项时,将使用工艺库里面的时间单位,即翻转率等于在每个库单位时间内 的翻转数目。 ====================================================================== 上面我们讲解了设置翻转率的方法,下面举例说明一下如何综合使用这两种翻转率。 例如对于下面的设计: 翻转率的设置要求如下所示: 1.正确地定义时钟; 2.使用 set_case_analysis 命令设置常数控制信号 reset; 3.在传输起点设置翻转率,在输入端和黑盒子输出端设置任何已知的翻转率,其他的起 点将使用默认的翻转率; 4.让工具在设计中把翻转率传播下去。 上面的没有要求具体的翻转率,因此我们可以设置我们想要的翻转率,根据上面的要求, 我们编写相应的 tcl 脚本如下所示: create_clock -p 4 [get_ports clk} set_case_analysis 0 reset [get_ports reset] set_power_default_toggle_rate 0.003 set_switching_activity -tog 0.02 a set_switching_activity -tog 0.06 b set_switching_activity -tog 0.11 x 8 / 52
分享到:
收藏