set_set_switching_activity
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进行功耗分析)。
(2)无向量分析法
前面我们说到,无向量分析法就是通过命令来定义节点的翻转率的方法来分析功耗。我们先来逐条学习需要什么的命令,然后在后面进行举例说明无向量分析法的脚本。
在学习设置翻转率的命令之前,我们先来了解一下什么是设计的传播起点和黑盒子。我们定义传播的起点为设计的输入端和黑盒子的输出端,黑盒子是指在工艺库里没有功能描述的单元(比如ROM 、RAM或者一些IP核)。例如对于下面的设计中:
上面的设计有三处起点,一处是整个设计的输入端,一处是黑盒子的输出端,还有一处是某个单元的输入端。最后一处的起点不包含在我们的定义中,但是我们也把它当做起点,因为这是被标记了翻转率,这个我们后面进行讲解。
利用无向量分析法分析功耗时,我们不必提供设计内部节点的翻转率,而是通过设置起点的翻转率就行了。我们有两种方法设置翻转率,一种是通过设置翻转变量,一种是通过标记的方法。下面我们就来介绍如何通过这两种方法进行设置翻转率。
①设置翻转变量
在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这个变量设置的翻转率,内部节点的翻转率可以通过传播得到,如下图所示:
需要说明的是,传播不可以穿过没有功能描述的黑盒子,也就是不能通过传播的方式得到黑盒子的输出翻转率,因此我们在最前面就定义了,将黑盒子的输出当做起点,这样其他节点的翻转率可以通过传播得到(包括黑盒子的输入),黑盒子输出的翻转率通过默认设置的翻转率得到,我们就得到了设计中所有节点的翻转率。
②标记翻转率
上面的方式设置的是默认的翻转率。当我们需要为某个节点标记某个指定的翻转率,而不是使用默认的翻转率时,我们就用到了标记频率,如下图所示:
单元A的输入端口标记了特定翻转率,比如说0.04GHz。标记的翻转率比传播的翻转率优先级更高,被标记翻转率的节点将作为一个新的起点,这就不属于起点的定义,但还是叫它为起点的原因。标记翻转率之后,这个单元后续的节点的翻转率将通过这个新标记的翻转率传播得到。
设置标记翻转率(简称设置翻转率)的命令主要有两条:
set_switching_activity 和 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]
下面来简单介绍一下常用的几个选项,详细的介绍可以通过man set_switching_activity获取。
-static_probability :设置静态概率。
-period period_value | -base_clock clock:设置时钟(周期),-period和 -base_clock只能设置其中一个。
-toggle_rate:设置翻转值,与-period或者 -base_clock相关联。翻转率Tr等于:用-base_clock选项指定的时钟周期里面的翻转数目 或 用-period选项指定的时间段里的翻转数目;当没有这个设置两个选项时,将使用工艺库里面的时间单位,即翻转率等于在每个库单位时间内的翻转数目。
下面来举例说明这个命令的用法:
例一:
create_clock CLK -period 20
set_switching_activity -base_clock CLK -toggle 0.5 -static 0.015 [all_inputs]
上述命令设置了时钟周期为20ns,然后命令使用的是-base_clock的选项,所有输入端的翻转值为0.5,静态概率为0.015,于是得到翻转率Tr=0 .5/20=0.025 GHz
例二:
set_switching_activity -period 1000 -toggle 25 -static 0.015 [all_inputs]
上述没有创建时钟,但是使用了period选项,意思是1000个周期内翻转了25次,于是我们就可以得到所以输入的翻转率Tr=25/1000=0. 025 GHz
例三:
set_switching_activity -toggle 0.025 -static 0.015 [all_inputs]
上述命令中,-period和 -base_clock这两个选项都没有使用,这个时候就跟工艺库里面的时间单位有关了,若库中时间单位为ns,那么我们就得到翻转率Tr=0.025 /1 = 0.025 GHz
上面讲解了set_switching_activity ,下面我们就来讲解一下set_case_analysis。
set_case_analysis 用来指定一个静态逻辑值,也就是设置信号为常数,不进行翻转;设计里面的一些信号需要这样子设计,例如复位信号,设置如下所示:
set_case_analysis 1 [get_ports reset]
则设置了reset的值常为1.
翻转率的设置要求如下所示:
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
上面的脚本中,设置了周期为4(ns)的时钟,然后利用set_case_analysis命令,设置reset端口为常数;翻转值为0.003,那么对应的翻转率为0.003/4ns,这个是默认的翻转率;然后利用set_switching_activity命令指定a、b、x的翻转值,其翻转率为 翻转值/4ns。
set_set_switching_activity的更多相关文章
随机推荐
- linux c++调试日志函数
#ifndef MYLOG_H #define MYLOG_H #include <stdio.h> #define __DEBUG__ #ifdef __DEBUG__ #define ...
- LeetCode Two Sum&Two Sum II - Input array is sorted&3Sum&4Sum 一锅煮题解
文章目录 Two Sum Two Sum II 3Sum 4Sum Two Sum 题意 给定一个数组,和指定一个目标和.从数组中选择两个数满足和为目标和.保证有且只有一个解.每个元素只可以用一次. ...
- VSCode C语言编程(二)新建项目及编译
添加工作区: 把文件夹在工作区删除: 把HelloWorld模板文件夹解压到工作目录 模板下载(代码解释请看模板里的注释) 添加项目文件夹: 编辑器打开的文件必须与main.c同目录 点击右边编译图标 ...
- axios的数据拦截(拦截器)
大家在开发项目中是否遇到过数据延迟,举个例子 你点某个功能 会有 1-2s的延迟,这1-2s可能会在你的页面显示一个一直转着圈圈的动画,不知道有没有小伙伴还不知道这个功能是如何实现的呢?其实在一个项目 ...
- Scrum简介
1. 什么是Scrum Scrum是一种轻量级的框架,适合于小型的.结合紧密的团队开发复杂的产品.Scrum是二十世纪后期一些软件工程师协同努力的脑力劳动的成果,现已成为技术领域最具魅力的方法.但Sc ...
- H3C RIP配置
一.RIP简介 RIP(Routing Information Protocol,路由信息协议)是一种较为简单的内部网关协议(Interior Gateway Protocol,IGP),主要用于规模 ...
- SpringMVC起步
SpringMVC: SpringMVC是Spring的一个组件,作为控制器,可以替代Servlet SpringMVC的开发过程: 请求发送 DispatcherServlet查询一个或多个Hand ...
- MySQL 分组并多行拼接 group_concat 用法
数据源 user name age 小红 18 小明 18 小芳 19 ------------------------------------------------------------ ...
- JS高级---正则表达式练习身份证号码
写正则表达式, 根据字符串来写正则表达式进行匹配 经验: 1.找规律 2.不要追求完美 身份证的正则表达式 15位或者18位 ([1-9][0-9]{14})|([1-9][0-9]{16}[0 ...
- tp3.2框架关闭日志记录
在config.php中阿计入如下配置: 'LOG_RECORD' => false, // 默认不记录日志 'LOG_TYPE' => 'File', // 日志记录类型 默认为文件方式 ...