本文转自:http://www.eetop.cn/blog/html/28/1561828-5940203.html

Synopsys 推荐的 UPF 流程简介

上次介绍了在当前先进制程下低功耗设计实现都需要UPF技术的支持,否则在功耗验证的时候将会很难验证并且对后续的综合和后端实现也带来了很大的困难和挑战。

既然当前低功耗设计实现都离不来UPF标准,那么什么是UPF呢?UPF的全称是统一功耗格式(UnifiedPower Format),其主要是由Synopsys推出的专门用于描述电路电源功耗意图的一种语言标准,它是Tcl语言的扩展,并且现在已经成为IEEE-1801标准且被三大EDA厂商(Synopsys、Cadence、Mentor)支持。

为什么在低功耗设计实现过程中需要UPF标准?传统的数字芯片设计均是采用Verilog或者VHDL语言对电路进行描述,但是这种方式描述出的电路并没有包含任何的芯片的供电网络信息,这会导致后续的流程如功耗验证和后端实现很难处理或者极易出错。UPF标准正好可以很好的解决这个问题,因为UPF标准本身包含了大量的用于描述电源网络的Tcl命令,直接使用这些命令可以很方便的创建电源域和功耗控制的特殊单元等,用UPF编写的统一功耗格式文件不仅可以在RTL级,同时还可以被后端工具使用,这在一定意义上保证了整个芯片设计过程中功耗流程的一致性,在后端工具进行处理之后也会生成相应的UPF文件,此时前端工具可以使用该UPF文件对网表进行Power仿真分析,下图1是Synopsys公司推荐的UPF流程。

目前数字芯片低功耗设计主要是用Verilog/VHDL对电路进行描述,同时使用UPF文件对设计的功耗意图进行描述,最初的UPF文件标记为UPF0,我们可以使用UPF0对RTL进行动态/静态功耗验证:

1.动态功耗验证

使用MVSIM或者VCS-native mode对RTL+UPF0进行功耗验证,MVSIM工具是Synopsys公司推出的基于UPF流程的低功耗动态验证工具。此前,对与芯片回来后才可以对功耗管理机制等进行验证,一旦出现问题,进行修改代价十分发,而MVSIM工具允许在RTL阶段结合UPF文件即可对芯片的功耗管理机制进行功能验证,从而尽量在设计早期阶段发现问题,MVSIM工具是一款协同仿真器(Co-Simulator),它可以与当下流行的功能仿真器如VCS/NC协同仿真,达到对低功耗设计的动态验证目的,应用该工具在RTL阶段可以发现大多数的功耗管理、功耗控制等相应的问题。下图2是MVSIM验证平台的框架图。

2.静态功耗验证

使用MVRC工具可以对RTL+UPF0进行静态功耗检查,可以发现设计和功耗意图文件等方面的问题,在Synopsis推荐的UPF流程中禁止在RTL阶段手动例化隔离单元(Isolationcell)和电平转换单元(Level Shift cell),因为在逻辑综合阶段,综合工具DC回根据功耗意图文件UPF0自动插入这些单元。

在逻辑综合过程中,综合工具DC会读入RTL文件和UPF0文件,然后综合出门级网表并且产生更新后的功耗意图文件UPF1,在UPF1文件中不仅包含了UPF0文件的信息同时还显示的给出了综合后特殊单元的supplynet的连接关系。   逻辑综合后可以使用MVSIM工具或者VCS-native 模式对插入了特殊单元的网表进行仿真。

在物理实现阶段,ICC工具读入DC综合后的网表和UPF1后在进行Place&Routing,ICC工具可以产生带电源引脚和不带电源引脚的网表文件,与逻辑综合相同的是,ICC工具也可以产生P&R之后更新了的功耗意图文件UPF2,此时带有PG引脚连接关系的网表就可以认为是低功耗架构芯片的全部实现,因为此时网表中不单单有PowerSwitch等,同时还有其必要的电源网络布线。

在图1中可以看到,可以使用各个阶段的功耗意图文件对设计进行一致性检查(Formality),当然对于设计的RTL级功耗分析评估可以使用PowerArtist工具进行仿真分析;对于Gate级功耗分析评估可以使用PTPX进行仿真分析。

Power Domain

对于一款芯片来说,其是由许多模块、子系统集成之后才会发挥它的功能,不同模块之间的工作速度和性能要求不同,此时就需要将这些模块根据实际需要工作在不同的时钟频率和工作电压下。对于暂时不需要工作的模块,可以使用通过降低时钟频率或关掉时钟已达到减少时钟翻转带来的动态功耗(DynamicPower),亦或者通过切断电源来降低静态功耗(Leakage),上面讲的方法会用到时钟切换和门控技术。接下来我们可以将工作在同一电压下的模块归为一个组,这就是我们通常在UPF中讲到的PowerDomain即电源域。

每一个电源域可以简单理解为供电逻辑的划分,在该逻辑划分中既包含了设计的物理实体(module)同时也包含了电源线间的连接关系。在基于UPF标准的低功耗设计过程中,必须存在至少一个电源域,并且顶层的电源域必须在进行任何与电源相关的分析或者综合之前预先定义出来,同时还需要将电源域定义在层次化模块之上。需要注意的是设计中的任何逻辑只能属于一个电源域,设计过程中也可以嵌套的定义电源域,如图3所示。

首先我们需要定义一个顶层的电源域,在定义顶层电源域时不需要指定哪些模块被包含在该电源域中,定义顶层电源域的UPF命令为:

create_power_domain  PD_TOP

然后我们在PD_TOP电源域中嵌套定义一个名为PD1的电源域并且同时指定模块实例u_cpu_core位于PD1电源域中,其对应的UPF命令为:

create_power_domain    PD1  -elements { u_cpu_core }

1.定义电源域

在开始介绍电源域之前首先介绍下与之相关的几个概念,什么是scope,单UPF和多UPF的区别。

首先什么是scope?从IEEE1801中可以找到,电源域被定义的那个逻辑层次称之为电源域的scope。比如一个设计的逻辑层次是aaa/bbb/,且将电源域PD定义到了aaa/bbb/上,则称aaa/bbb/为电源域PD的scope。换种方式理解,在Linux系统下,我们可以使用“cddir/”进行工作目录的切换,同样地,scope可以认为是指定的工作工作目录切换,在UPF标准中,可以使用如下命令进行scope的指定。

set_scope   instance_name    ##将instance_name设置为工作的scope

set_scope   /                ##将scope设置到顶层设计

scope作为UPF中的一个重要的关键字,其多用自底向上的IP设计中,在这种设计方法中会多次出现scope。

什么是单UPF和多UPF呢?对于只有一个UPF设计文件的设计来说,UPF文件是定义在顶层的scope中的,此时所有的UPF对象(如Power_switch、Isolation、Level-shifter等)都只存在于顶层中,子电源域不需要定义support port,在不同电源域之间使用-reuse来共享support net。对于多UPF设计来说,UPF文件的的描述则更加模块化,整个设计是由顶层RTL+顶层的UPF文件和子模块RTL+子模块对应的UPF文件共同描述的,子模块UPF文件必须从顶层UPF文件进行装载,比如图1中,我们可以使用如下命令装载UPF文件:

load_upf   -scope    u_cpu_core   core.upf

或者使用:

set_scope    u_cpu_core

load_upf     core.upf

1.1电源域的划分

在设计中划分出电源域之后,会加入Powerswitch cell、Isolation cell、

Level-shifter cell、Retention register cell等功耗管理控制单元,这必然会对面积和时序产生影响,所以需要对电源域的划分进行评估,即若加入一个电源域后对功耗降低没有什么明显的效果,那么该电源域就没必要加入,通常对电源域的划分评估需要对设计进行逻辑综合,基本的评估原则如下:

1.创建最简单的UPF文件(仅仅包含Power switch cell和Isolationcell等),并用基本的约束去分别综合带UPF文件和不带UPF文件的设计,之后进行功耗评估比对。

2.通过分析库去评估功耗的消耗情况。

3.对于大部分时间不会Power down的模块最好不要划分shutdown电源域。

对于一个最顶层的ToP电源域,一般是Always-on的状态,如果设计中要求顶层ToP电源域也可以shutdown,同时ToP电源域中又嵌套定义了两个子电源域PD0和PD1,且PD0和PD1之间的通信将穿过可以shutdown的电源域ToP的话,那么在ToP电源域中就必须加入Always-onbuffer,以确保在ToP电源域进入shutdown后PD0和PD1还可以进行正常通信的。

下面给出一个简单的创建电源域的场景,如图4所示,假如一个设计的层次结构为图4所示,则对应的创建电源域的UPF命令如下:

对应的电源域的创建命令:

create_power_domain   TOP 

create_power_domain  PD1 -elements{ B }

create_power_domain  PD2 -elements { A/C   A/D }

对于右侧PD1,UPF标准中规定,如果模块B中还例化了模块E和其它的leafcell,此时在创建电源域时指定的-elements选项中只给出模块B,则默认情况下将会对模块B进行遍历操作,即模块B中所有例化的子模块都将和模块B处于同一个电源域PD1中。

对于左侧的PD2,即使模块C和D都被例化在模块A中,但是模块A属于TOP电源域,而模块C和D属于PD2电源域,此时可以通过-elements选项显示的为模块C和D指定电源域PD2。

1.2 电源域的实现

前面讲到的电源域是一种抽象的逻辑划分,而在后续的后端实现中,电源域对应的物理实现的是 VoltageArea ,并且电源域 Power Domain 和 Voltage Area 是一对一的关系。如图 2-4 所示:

图 6 给出了图 5 所示电源域逻辑示意图对应的后端 Voltage Area 的一个实现示意图。

前面讲到的UPF命令中的-scope 选项,该选项由于指定设计的逻辑层次,且电源域就定义在该层次上; create_power_domain 命令还可以有一个选项-include_scope,该选项用于指定当前scope 中所有的元素都共享该电源域的primarysupply,但是不必都被添加到该电源域中。可以使用下面图7 的例子来理解-scope 和-include_scope 选项的差别。

对应创建电源域PD1 和 PD2的命令为:

create_power_domain  PD1 -scope Block1 -elements{ U1    U2  U3} 

create_power_domain PD2 -scope  Block1 -elements { U4    U5  U6 }

上面两条命令显示的指定了创建的电源域所在的设计逻辑层次,当然还可以使用下面的命令组合起来替换上面两条命令:

set_scope  Block1

create_power_domain  PD1 -elements { U1    U2  U3}

create_power_domain PD2 -elements { U4    U5  U6 }

对应创建电源域 PD3 的命令为:

create_power_domain  PD3 -include_scope    Block2 -elements{ U7   U8} 

上面的命令表示逻辑层次 Block2 中的所有元素 U7,U8和 U9 都将共享电源域 PD3 的 primary supply,但 U9 却不一定被添加到电源域 PD3 中。

【转载】PowerDomain简介相关推荐

  1. [转载] Python简介、linux上Python及其IDE的安装和详细配置

    参考链接: Python id() 一.什么是Python? Python是一种计算机程序设计语言.是一种动态的.面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语 ...

  2. PowerDomain简介

    本文转自:http://www.eetop.cn/blog/html/28/1561828-5940203.html Synopsys 推荐的 UPF 流程简介 上次介绍了在当前先进制程下低功耗设计实 ...

  3. [转载] PyTorch简介

    参考链接: PyTorch分类简介 代码实例理解PyTorch 介绍 PyTorch是增长最快的深度学习框架.PyTorch也非常具有Python风格,注重简洁和实用. 此外,也有一些使用者说,使用P ...

  4. 转载---Cesium简介

    转载---https://blog.csdn.net/mrib/article/details/78260971 Cesium是什么 Cesium 是一款面向三维地球和地图的,世界级的JavaScri ...

  5. (转载)VoLTE简介

    转载地址:http://www.360doc.cn/article/2909773_637471256.html,本文介绍了移动通信领域相关概念,如CS.PS.VoIP.VoLTE.IMS.CSFB. ...

  6. Pytext简介:facebook的基于PyTorch的NLP框架

    自然语言处理(NLP)在现代深度学习生态中越来越常见.从流行的深度学习框架到云端API的支持,例如Google云.Azure.AWS或Bluemix,NLP是深度学习平台不可或缺的部分.尽管已经取得了 ...

  7. 计算机科学精彩帖子收集

    linux源码 LXR 源自"the Linux Cross Referencer",中间的"X"形象地代表了"Cross".与 Sourc ...

  8. 基于深度学习的医学图像配准综述

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 转载自:https://blog.csdn.net/weixin_ ...

  9. 用单片机测量流体流速的_曹阳等:钻井用节流阀抗冲蚀性能的实验评价

    本文版权归天然气工业杂志社所有 未经允许,不得转载 作者简介:曹阳,1976 年生,高级工程师:主要从事井控设备及工艺方面的研究工作.地址:(621000)四川省绵阳市永兴镇飞牛坝村1 组西南井控中心 ...

  10. SCI论文写作--工科学生如何入门搞科研和写作

    一.如果有研究方向也有一定的工作积累,可以参考B站上的这个视频系列,如何写作论文 某自动化博士毕业生的经验之谈 https://www.bilibili.com/video/BV1bW411y7Sm/ ...

最新文章

  1. QUARK的增强版C-QUARK问世,有效提升蛋白质结构从头预测精度
  2. Android之集成微信登录
  3. 安卓开发之路-浅识Android
  4. 定点c程序之一:定标
  5. 判断数组中某个元素的个数
  6. React 第六章 事件的绑定
  7. php 属性名字访问,php – 如何使用连字符的名称访问此对象属性?
  8. pydobc连接sql server_python – PyOdbc无法连接到SQL Server实例
  9. B/S VS C/S
  10. mac安装完smartsvn后没有将其拖入应用程序的解决方案
  11. 腾讯云多媒体文件处理总结
  12. 浅谈怎样入侵服务器,仅供学习用
  13. 华硕路由架设php,华硕 RT-AC68U 路由模式默认 VLAN
  14. 自动化测试全套资料都在这里了,请查收(吐血整理)
  15. 如何把蓝奏云里的文件进行批量导出分享?蓝奏云批量分享的工具
  16. C/C++描述 第十一届蓝桥杯省赛 C/C++ 大学C组 第一场(2020.7.5) 题目+题解
  17. 照片背景底色更换工具二(python+flask网页版源码及打包)
  18. 图形解锁验证码破解(附Python代码)
  19. 简单使用github上的节操播放器
  20. swiper切换 同时更换 背景色

热门文章

  1. gcc “-I”(大写i),“-L”(大写l),“-l”(小写l)的区别
  2. unity3d-学习笔记19-卡牌游戏制作(战斗胜利界面,点击菜单栏出现其他选项以及对应功能,实现能量卡消耗蓝条)
  3. 网络文章(摘录)_顺序
  4. 什么是肠漏综合征,它如何影响健康?
  5. PS冷知识:PS隐藏功能中的组合键
  6. 恢复icloud 微信无法连接服务器,从iCloud恢复,找回微信消息
  7. Leetcode刷题之旅--剑指 Offer 17. 打印从1到最大的n位数
  8. 第九章、Zigbee模块指令系统
  9. Python爬虫实战之利用多线程爬取千图网的素材图片
  10. Python体重指数计算器源代码