Vectorless dynamic动态功耗分析——Voltus

本文介绍了使用power计算工具进行功耗分析的过程,涉及概率和状态传播策略,数据路径上的切换概率设定,以及如何通过设置切换活动、使用timing文件和仿真参数来生成worst-case功率向量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

power 计算工具会根据设计信息和用户提供的activity和switching约束来生成虚拟的worst-case的power vector,难点在于哪些instances视为switching,在没有仿真的前提下如何确定开关的时间,使用timing文件(TWF)

1.Probability-Based

在data path上给所有的cell标上switching probability

2.State-Propagation-Based

在data path上给所有cell标记触发器输出端到下级逻辑的电平转换概率

3.Flow

1) 读入设计

read_design   -physical_data   mydesign.enc.dat    mydesign

2) 读入spef

read_spef  -rc_corner  RCmax  -decoupled  mydesign.spef.gz

3)设置功耗分析运行目录

set_power_output_dir 

4)设置分析模式

set_power_analysis_mode  -reset

set_power_analysis_mode 

  -analysis_view  func_wc

  -disable_static  false

  -write_static_currents true

  -binary_db_name   dynamic_pwr.db

  -create_binary_db  true

  -method  dynamic_vectorless

  -power_grid_library   pg_library/stdcells.cl

4)若是设置了power_grid_library 可跳过该步骤

set_power -reset   

set_power  -pg_net VDD -pwl  -instance   -sticky

5)设置switching activity

set_default_switching_activity -input_activity  0.3  -period 4 -clock_gates_output_ratio 0.5  -seq_activity 0.5

6) 仿真设置

set_dynamic_power_simulation  -reset

set_dynamic_power_simulation -resolution 50ps

7) 功耗分析

report_power  -outfile   dynamic*.rpt

  

### 动态无矢量(Vectorless)概念与实现 #### 定义与背景 动态无矢量(vectorless)通常指的是在某些计算环境中不依赖于固定大小向量或数组的操作方式。这种方式特别适用于嵌入式系统和资源受限环境,在这些场景下,传统的基于静态分配内存的数据结构可能不是最优的选择。 对于面向对象编程而言,其核心理念围绕着类这一单一分类体系展开[^1]。然而,“动态无矢量”的具体含义往往取决于上下文;在此背景下,可以理解为一种灵活处理数据集合的方法论——即无需预先定义好容器尺寸就能高效管理元素增删改查操作的技术栈。 #### 实现策略 为了达成这样的目标,常见的做法包括但不限于: - **链表**:通过指针链接节点形成线性序列,支持任意位置插入删除而不会造成空间浪费; - **哈希映射**:利用散列函数将键值对分布到不同桶内存储,查找速度接近常数时间复杂度 O(1),非常适合频繁访问随机索引的应用场合; - **树形结构**:如红黑树、AVL 自平衡二叉搜索树等自适应调整内部形态来保持整体有序性的特性,使得即使面对大量变动也能维持较好的性能表现。 下面给出一段 Python 代码片段展示如何构建一个简易版的“动态无矢量”整型列表,它采用双向循环链表作为底层支撑机制: ```python class Node: def __init__(self, value=None): self.value = value self.next = None self.prev = None class DynamicList: def __init__(self): self.head = Node() # sentinel node as placeholder self.tail = Node() self.head.next = self.tail self.tail.prev = self.head def append(self, val): new_node = Node(val) last = self.tail.prev last.next = new_node new_node.prev = last new_node.next = self.tail self.tail.prev = new_node def remove(self, target_val): curr = self.head.next while curr != self.tail: if curr.value == target_val: prev_node = curr.prev next_node = curr.next prev_node.next = next_node next_node.prev = prev_node del curr break curr = curr.next def traverse_forward(self): elements = [] current = self.head.next while current != self.tail: elements.append(current.value) current = current.next return elements ``` 此段程序实现了基本的功能需求,比如追加新成员至队尾以及按值移除指定项,并提供了从前向后的遍历接口供外部调用者读取当前状态下的全部条目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值