专栏首页摸鱼范式SoC设计之功耗 – RTL/netlist功耗计算

SoC设计之功耗 – RTL/netlist功耗计算

在屈辱和战争之间,你选择了屈辱,

那么你在屈辱以后,还要面对战争。

-- 丘吉尔

不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我

欢迎大家加入2022届数字IC交流群,QQ群号 1060380138

书接上回,今天我们来聊一聊RTL级功耗计算的问题。上篇讲到有很多种低功耗设计方法,那么在项目中选择哪些来做呢?在抉择前如果有数据支撑那是最好,可以根据数据来判断要实现何种复杂度的低功耗设计。如果是迭代产品,可以参考上一代芯片的实测数据。可要是新项目呢?这时候就需要基于RTL做功耗分析了。

以前经常会被问一个问题,“RTL级计算出的功耗与silicon比有多大差别呢”。这个问题还真不是一句两句就能说的清楚的。今天就试着从原理上讲一下。

我们知道,RTL就是一堆代码,是完全没有功耗信息的。而芯片内部是一大堆由晶体管组成的各种各样的标准单元(standard cell)。怎么把两者扯上关系呢?在SoC设计流程上有一步“逻辑综合”的过程,那么在RTL功耗计算的时候是不是也需要这一步骤呢?答对了,确实需要。各家的RTL计算工具(为了避免广告嫌疑就不说具体的工具名称了)在内部都要完成这个操作。但是跟综合工具做的不会完全一样(不展开,有兴趣的私聊),我给这步起了一个名字“预综合”,以示区分。

通过预综合,我们的RTL变成了一堆register和与非门这样的器件。在开始计算前,还需要一些基本的输入数据,第一是每个器件的基本功耗信息,第二是每个器件在给定时间窗内的翻转次数。

先说第一个,我们可以从foundry厂提供的lib文件中直接找到每个器件的功耗信息。一般会在lib文件的开头定义基本信息,例如电压/电流/电阻的单位,如下图:

同时也会定义每个cell的leakage,大概长这样:

还记得上篇提到的吗,输入值不同,leakage也略有不同,在上图就体现出来了,管脚A是0还是1,leakage power不一样。

Internal power表大概长这样:

还有switch power,因为与负载电容有关,在lib里面不能直接查表获得,要通过wire_load估算:

以上只是用了一个最简单的buffer举例,对于多输入的cell,情况要复杂一点。至此,关于leakage,internal和switch的基本信息全都有了。

再说第二个,一般会有两种方法提供翻转次数信息。第一种是通过仿真波形,这个好理解,在vcd或者fsdb波形中会记录每次的信号变化,把波形中的信号和预综合出来的器件标对上就可以了。可能有细心的同学会问,“不对呀,波形里面都是RTL的信号,能和每个器件对起来吗”。这个其实不用担心,模块的所有primary input和register全能对应上,剩下的组合逻辑即使对不上也能推导出来,对不?更细心的同学可能会发现,这里好像忽略了glitch。在RTL功耗计算里面的确默认会忽略glitch,这是因为RTL的波形里面就没有timing信息呀。现在的仿真工具一般会提供参数来设置glitch比例,除非必需,不建议初次使用就打开这个选项。

有时候在项目初期可能还给不出vcd或者fsdb波形,这时候要想计算RTL功耗就需要用第二种办法了,设置toggle rate。这里toggle rate的定义是,在一个时钟周期内平均翻转的次数。比如clock信号,如果完全不做gating的话,那么其toggle rate就是2(一个周期内上下翻转了两次),如果做了gating,那么一定是一个小于2的值(可以根据项目中gating力度估计一下);对于register而言,最大toggle rate是1(每个周期都翻转),一般会在0.1-0.2之间。

有了上述的信息,接下来就可以计算了。在计算的时候,有两种方式。第一种是计算average power,顾名思义就是用户给定一个时间窗口,工具计算该窗口内的平均功耗值,简单说就是把时间窗内所有器件的所有翻转造成的能量消耗叠加起来除以时间(怎么感觉我在说绕口令似的)。第二种计算方式就是time-based power,做法是根据用户设定,把时间窗均匀切分成若干小的时间窗,每个时间窗内计算一次。与第一种计算方式不同的是,这种方式会得出很多个功耗数据(每个间隔一个),把这些数据连起来就是功耗随时间变化的图。贴个图帮大家直观感受一下,横坐标是时间,纵坐标是功耗值。

总结一下RTL功耗计算的步骤,和把大象关进冰箱的问题一样,拢共分三步:第一步,预综合,第二步,提取与功耗相关的信息;第三步,计算。

至于netlist功耗计算,就不需要第一步了,更简单了。

再回到一开始的问题,用RTL计算出的功耗和silicon比到底差多少?这个问题实在太难回答了,我就说说可能会引起偏差的地方吧,大家可以自己思考。首先是预综合阶段,这一步毕竟不同于真正的逻辑综合,功耗仿真工具只能做到尽量与逻辑综合一致(对于EDA工具来说也需要tradeoff,速度/精度/容量)。如果两边信息不一致,可能偏差更大。举个例子,如果在综合工具里面设置了dont_use,而没有告诉功耗工具这个信息,那么两边选用的cell可能差别很大。另外一个偏差比较大的地方是时钟树。随着工艺的升级,时钟树消耗的功耗比重越来越大。SoC设计流程里面是在做物理设计的时候插入时钟树的,而功耗仿真在RTL阶段就需要这个信息。怎么给能保证偏差小?还有一个影响较大的因素,

C_{load}

。在物理设计完成后,所有的器件摆放和走线都固定了;可是在RTL阶段是没有这些信息的呀,所以工具只能根据fanout等信息去估计一个值出来。后端工程师在做物理设计时的一些策略也可能会造成影响,记得以前在知乎上看过一篇文章,文章作者发现估算的功耗值(RTL和网表都做了仿真)与silicon偏差很大,费尽力气后意外发现是由于后端工程师插了大量的decap所致。最后还有一个因素是,如果芯片内部有模拟模块,这是RTL功耗仿真所不能做的,完全取决于IP厂商或模拟团队给的功耗值有多准确。造成偏差的因素还有很多,这里权当抛砖引玉吧。

说到这里,估计一些同学会追问,“既然RTL功耗计算很容易偏差,那么等逻辑综合完拿到网表再算功耗不是更香吗”。诚然,用网表文件和波形文件一起计算功耗的确会更准确一些,毕竟没有了预综合步骤,减少了很多不确定因素。但是,我们计算功耗仅仅是为了得到一个准确值吗?我们拿着准确但是不可接受的功耗值和网表又能做些什么呢?主席教导我们,“不忘初心,牢记使命”。在项目初期,我们不是为了算功耗而算,我们是为了优化功耗而算。做RTL级功耗计算最大意义就是帮助架构师和设计师更好的优化芯片和内部模块。

END

本文分享自微信公众号 - 摸鱼范式(icparadigm)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SoC设计之功耗--开篇

    提到功耗这个词,估计大部分做SoC的工程师都是既熟悉又陌生。熟悉的是这个词会经常被提到。陌生的是又很难说清我们工程师在功耗方面能做什么。

    空白的贝塔
  • 低功耗 | Glitch Power 分析

    老驴发现『问题』地出现是有聚集效应的——某段时间突然间许多人都在关心Congestion 就像每个客户的每个Design 都被Congestion 阻挡住了前进...

    老秃胖驴
  • 数字IC前端设计流程及工具【RTL设计+功能仿真】【综合】【DFT】【形式验证】【STA静态时序分析】

    请说明 IC 前端整合(RTL To Netlist)所包含的流程,并简要说明一下 Synthesis 的主要任务,以及 Synthesis 的输入和输出。

    FPGA探索者
  • FPGA 的功耗概念与低功耗设计研究

    随着半导体工艺的飞速发展和芯片工作频率的提高 ,芯片的功耗迅速增加 ,而功耗增加又导致芯片发热量的增大和可靠性的下降 。因此 ,功耗已经成为深亚微米集成电路设计...

    碎碎思
  • GPGPU: C记 RTL 到Signoff 流程全解密

    题记:7月15 号,浦东嘉里城,跟大神面对面,如果你还未注册可以dian点击链接注册:【上海线下】报名中!2021 CadenceCONNECT:异构计算设计—...

    老秃胖驴
  • 芯片设计中的ECO是什么?

    如标题所写,我们今天聊一聊IC设计种的ECO。在展开关于ECO的概念之前,我们先大致捋下数字IC设计的流程,有助于我们后面的讨论。

    数字芯片社区
  • VCS入门教程(四)

    本文主要介绍VCS门级网表的仿真。当我们把所写的RTL进行的功能仿真通过之后,便输入到 Design Compiler工具中进行逻辑综合,逻辑综合的结果便是RT...

    数字芯片社区
  • 时钟门控终极指南

    时钟门控(Clock Gating)是一种在数字IC设计中某些部分不需要时关闭时钟的技术。这里的“部分”可以是单个寄存器、模块、子系统甚至整个SoC。

    AsicWonder
  • IC 圆桌派,第四日『低功耗』复盘

    第三日话题是『EDA上云』,某大厂专家现身说法,有太多干硬活,这是一个新事物,大部分人还没真正使用过,除了专家之外大多数人更多地关注于:

    老秃胖驴
  • 极说・IC圆桌派复盘笔记之闲话DV

    说实话,我们都希望疫情可以很快过去,但真不知道何时能过去,焦虑和恐慌仍然笼罩在每个家庭的心头,2/10号复工,几家欢喜几家愁,自上班以来就没放过这么长的假,但苦...

    老秃胖驴
  • 论功耗 | 如何计算toggle rate

    先吐个槽,数字前端AE 生存环境实属恶劣,按理说AE 只要解决工具端的问题即可,可现实中经常被揪住讨论SDC 如何设置,power 估算该用哪个corner, ...

    老秃胖驴
  • AI for Chip Design,NVIDIA做了这些精彩的工作

    NVIDIA于2020年在IEEE Micro上刊出了一篇题为 “Accelerating Chip Design with Machine Learning”...

    网络交换FPGA
  • 【日更计划122】数字IC基础题-功耗

    静态功耗是电路中没有开关活动时消耗的功耗。它是漏电功耗。例如:打开电路时,由于电流流动,电池开始漏电。

    空白的贝塔
  • [十七]Cracking Digital VLSI Verification Interview

    UVM RAL(UVM Register Abstraction Layer)是UVM所支持的功能,有助于使用抽象寄存器模型来验证设计中的寄存器以及DUT的配置...

    空白的贝塔
  • 详解ASIC设计流程

    参考资料[1]博客首页[2]还记得去年应届生秋招,出身于FPGA的同学大多数都去找了IC前端设计的工作,由于都是逻辑设计,都是相通的,倒是没有什么问题,但对于I...

    Reborn Lee
  • 数字IC设计知识结构

    IC就是半导体元件产品的统称,IC按功能可分为:数字IC、模拟IC、微波IC及其他IC。数字IC就是传递、加工、处理数字信号的IC,是近年来应用最广、发展最快的...

    FPGA探索者
  • 联发科技2021校招IC笔试题全部解析【数字IC设计验证】【MTK笔试】

    (4)说明DFF2和DFF4为什么采用负沿采样?若采用正沿,会存在何种风险?(3分)

    FPGA探索者
  • ARM IP 工具套件了不得,将系统级芯片开发流程从数月缩短至数天

    由于工作中,经常会用到ARM,所以会经常关注这方面的消息,ARM现在的势头真是很猛,猛到你无法想象。独有的盈利模式是他赚赚赚厂商的钱。 以下内容转载自嵌入式资...

    用户1605515
  • 只言片语 —— eFPGA

    从读书开始时的EPLD到大学毕业时的FPGA,一晃多年,仿若回到原点,只是很多的技能都似随风而逝,现在从IoT领域试图找回一些原来的影子,也许是为了忘却的纪念,...

    半吊子全栈工匠

扫码关注云+社区

领取腾讯云代金券