数字后端教程之Innovus report_property和get_property使用方法及应用案例
数字IC后端实现Innovus中使用report_property可以报告出各种各样object的属性,主要有cell,net,PG Net,Pin,时钟clock,时序库lib属性,Design属性,timing path,timin arc等属性。
在数字IC后端实现中我们写自动化脚本经常会使用这个命令来获取相关object的各种属性。因此很有必要向大家分享下report_property,get_property以及它们在实际项目中的应用。
数字IC后端笔试面试必备 | 低功耗设计实现十大灵魂拷问

数字后端零基础入门系列 | Innovus零基础LAB学习Day10
report_property和get_property不同之处是它可以获取object对象的所有属性。

数字IC后端实现之Innovus Place跑完density爆涨案例分析
1)报告具体instance的所有属性property
report_property [get_cells u_cortexa7/u_cortexa7l2/u_cortexa7l2noram/u_ca7scu/U43987]
2)报告具体net的所有attribute
report_property [get_nets u_cortexa7/u_cortexa7l2/u_cortexa7l2noram/u_ca7scu/FE_OFN148398_n86644 ]
通过report_property我们可以快速知道对应object对象的所有属性,这样我们可以通过get_property来获取object相关属性具体的值。

比如我们可以通过下面的命令来快速获取某条net的driver pin。
innovus 183> get_property [get_nets u_cortexa7/u_cortexa7l2/u_cortexa7l2noram/u_ca7scu/FE_OFN148398_n86644 ] driver_pins
u_cortexa7/u_cortexa7l2/u_cortexa7l2noram/u_ca7scu/FE_OFC58904_n86644/ZN
innovus 184> get_object_name [get_property [get_nets u_cortexa7/u_cortexa7l2/u_cortexa7l2noram/u_ca7scu/FE_OFN148398_n86644 ] driver_pins]
u_cortexa7/u_cortexa7l2/u_cortexa7l2noram/u_ca7scu/FE_OFC58904_n86644/ZN
PS: 如果获取到的对象是指针,我们还可以通过get_object_name来获取指针对应的object名字。
3)获取pg net所有属性
report_property [get_pg_nets -of_objects u_cortexa7/u_cortexa7l2/u_cortexa7l2noram/u_ca7scu/U43987]

4)报告lib cell相关属性
report_property [get_lib_cells -of_objects u_cortexa7/u_cortexa7l2/u_cortexa7l2noram/u_ca7scu/U43987]

比如获取具体instance对应lib cell的pin数量和lib中std_cell_main_rail_name属性。
innovus 207> get_property [get_lib_cells -of_objects CTS_ccl_inv_02172 ] pin_count 2
innovus 211> get_lib_cells -of_objects u_cortexa7/u_cortexa7l2/u_cortexa7l2noram/u_ca7scu/U43987
tcbn28hpcplusbwp40p140ssg0p81v125c_ccs/AN2D2BWP40P1400xd9e9
innovus 212> get_property [get_lib_cells -of_objects u_cortexa7/u_cortexa7l2/u_cortexa7l2noram/u_ca7scu/U43987] std_cell_main_rail_name
NA
5)报告具体instance所有timing arc
innovus 216> get_lib_arcs -of_objects [get_lib_cells tcbn28hpcplusbwp40p140ssg0p81v125c_ccs/AN2D2BWP40P140] 0xd9f4
report_property [ get_lib_arcs -of_objects [get_lib_cells tcbn28hpcplusbwp40p140ssg0p81v125c_ccs/AN2D2BWP40P140]]

innovus 223> get_property [get_lib_arcs -of_objects [get_lib_cells
tcbn28hpcplusbwp40p140ssg0p81v125c_ccs/AN2D2BWP40P140]] from_lib_pin
tcbn28hpcplusbwp40p140ssg0p81v125c_ccs/AN2D2BWP40P140/A1
tcbn28hpcplusbwp40p140ssg0p81v125c_ccs/AN2D2BWP40P140/A2
0xda10
innovus 224> get_property [get_lib_arcs -of_objects [get_lib_cells tcbn28hpcplusbwp40p140ssg0p81v125c_ccs/AN2D2BWP40P140]] to_lib_pin
tcbn28hpcplusbwp40p140ssg0p81v125c_ccs/AN2D2BWP40P140/Z tcbn28hpcplusbwp40p140ssg0p81v125c_ccs/AN2D2BWP40P140/Z0xda15
6)报告timing path相关cell,pin属性
innovus 226> **set path [report_timing -to u_cortexa7/u_cortexa7l2/u_cortexa7l2noram/u_ca7scu/g_cpu_0__u_cpuslv_u_dw_dw_data_buff_reg_0__10_/D -collection ]
0xda17**
innovus 227> foreach_in_collection path1 $path {set points [get_property $path1 timing_points]}
innovus 228> puts $points
0xda1a
下面通过get_property来获取timing path上各个pin。当然我们还可以改装成获取timing path上的所有instance和对应的cell name。
咱们社区低功耗四核A7Top对common clock path做clock shielding就是先抓出这条clock path上的所有pin,然后对每一段clock net设置net attribute完成ndr和shielding的处理。

innovus 230> get_property $points pinpd_a7_0_dwn_clamp_n
u_cortexa7/FE_OFC15517_pd_a7_0_dwn_clamp_n/I u_cortexa7/FE_OFC15517_pd_a7_0_dwn_clamp_n/ZN u_cortexa7/FE_OCPC17521_FE_OFN146884_n/I u_cortexa7/FE_OCPC17521_FE_OFN146884_n/ZN u_cortexa7/FE_OCPC17522_FE_OFN146884_n/I u_cortexa7/FE_OCPC17522_FE_OFN146884_n/ZN u_cortexa7/FE_OCPC17523_FE_OFN146884_n/I u_cortexa7/FE_OCPC17523_FE_OFN146884_n/ZN u_cortexa7/FE_OCPC17529_FE_OFN114_FE_DBTN0_pd_a7_0_dwn_clamp_n/I u_cortexa7/FE_OCPC17529_FE_OFN114_FE_DBTN0_pd_a7_0_dwn_clamp_n/ZN u_cortexa7/FE_OCPC17530_FE_OFN114_FE_DBTN0_pd_a7_0_dwn_clamp_n/I u_cortexa7/FE_OCPC17530_FE_OFN114_FE_DBTN0_pd_a7_0_dwn_clamp_n/ZN u_cortexa7/FE_OCPC17531_FE_OFN114_FE_DBTN0_pd_a7_0_dwn_clamp_n/I u_cortexa7/FE_OCPC17531_FE_OFN114_FE_DBTN0_pd_a7_0_dwn_clamp_n/ZN u_cortexa7/FE_OCPC17532_FE_OFN114_FE_DBTN0_pd_a7_0_dwn_clamp_n/I u_cortexa7/FE_OCPC17532_FE_OFN114_FE_DBTN0_pd_a7_0_dwn_clamp_n/ZN u_cortexa7/FE_OFC39_pd_a7_0_dwn_clamp_n/I u_cortexa7/FE_OFC39_pd_a7_0_dwn_clamp_n/ZN u_cortexa7/FE_OFC13540_FE_OCPN156551/I u_cortexa7/FE_OFC13540_FE_OCPN156551/Z u_cortexa7/FE_OCPC17888_FE_OFN158805_n/I u_cortexa7/FE_OCPC17888_FE_OFN158805_n/ZN u_cortexa7/FE_OCPC18349_FE_OFN161153_n/I u_cortexa7/FE_OCPC18349_FE_OFN161153_n/ZN u_cortexa7/FE_OCPC18350_FE_OFN161153_n/I u_cortexa7/FE_OCPC18350_FE_OFN161153_n/Z u_cortexa7/snps_CPU0__CPU02MP_LOW_snps_biu_dw_data_o_10__UPF_ISO/ISO u_cortexa7/snps_CPU0__CPU02MP_LOW_snps_biu_dw_data_o_10__UPF_ISO/Z u_cortexa7/FE_OCPC97807_biu_cpu0_dw_data_10/I u_cortexa7/FE_OCPC97807_biu_cpu0_dw_data_10/Z u_cortexa7/u_cortexa7l2/u_cortexa7l2noram/u_ca7scu/g_cpu_0__u_cpuslv_u_dw_dw_data_buff_reg_0__10_/D
foreach_in_collection path1 $path {set attributes [report_property $path1 ]}
下面我们在innovus中报告前面那条timing path的setup时序,看看setup是否和通过get_property获取到的值一致。结果表明完全一样。


report_timing -to u_cortexa7/u_cortexa7l2/u_cortexa7l2noram/u_ca7scu/g_cpu_0__u_cpuslv_u_dw_dw_data_buff_reg_0__10_/D
典型案例1:
抓取特定timing path的逻辑深度。这个可以用来快速判断逻辑关键路径和物理关键路径是否一致!
proc report_logic_depth {timing_path} { set total_logic_depth [get_property $timing_path num_cell_arcs] set bufinv 0 foreach_in_collection tp [get_property [get_property $timing_path timing_points] pin] { if { [get_property $tp object_type]=="pin" && [sizeof_collection [filter_collection [get_cells -of_object $tp] "is_buffer==true||is_inverter==true"]]} { incr bufinv }} return [list $total_logic_depth [expr $bufinv/2]]}
像咱们社区cortexa7core后端训练营项目中这条timing path,我们使用上述脚本快速获取data path的逻辑深度和buffer,inverter数量。通过输出结果我们就可以知道当前这条timing path是有大问题的!
Output:Total logic depth of path: 21
Count of buf/inv in path: 9


典型案例2:
这个案例使用get_property,get_arcs等命令来获取某个view下某条net的delay情况。而且我们还可以稍作改进修改成抓取design中net delay大于特定数值的net list。
proc get_arc_delay {netName viewName} {set net [ get_nets -hier $netName]foreach_in_collection net_coll $net {set netObj [get_object_name $net_coll]puts ""puts "########################################"puts "Delay parameters for net $netObj "set drv [ get_object_name [ get_property [get_nets $netObj ] driver_pins ] ]set drv1 [ get_property [get_nets $netObj ] driver_pins ]set load [ get_property [get_nets $netObj ] load_pins ]set load_col [ sizeof_collection $load ]set drv_col [ sizeof_collection $drv1 ]
if { $load_col >= 1 && $drv_col >=1 } {foreach_in_collection lPin $load {set name [ get_object_name $lPin ]set netArcCollection [get_arcs -from $drv -to $name]
foreach_in_collection arc $netArcCollection {set del_max_rise [get_property $arc delay_max_rise -view $viewName]set del_max_fall [get_property $arc delay_max_fall -view $viewName]set del_min_rise [get_property $arc delay_min_rise -view $viewName]set del_min_fall [get_property $arc delay_min_fall -view $viewName]
puts "########################################"puts "Arc from $drv to $name:Delay_max_rise: $del_max_rise Delay_max_fall: $del_max_fall Delay_min_rise: $del_min_rise Delay_min_fall: $del_min_fall" } } }}}
相关文章:
数字后端教程之Innovus report_property和get_property使用方法及应用案例
数字IC后端实现Innovus中使用report_property可以报告出各种各样object的属性,主要有cell,net,PG Net,Pin,时钟clock,时序库lib属性,Design属性,timing path,timin arc等…...
JS中console对象内部提供调试方法
console.log() console.log() 是最常用的输出方法,用于将信息输出到浏览器控制台,通常用于普通的调试信息。 用途: 打印普通的消息、变量、对象等。 let user { name: "Alice", age: 25 }; console.log(user); // 输出对象 console.log(&…...
python设计模式
一、单例模式 学习目标:掌握单例模式的作用和写法 可以明显的看出他两是独立的对象,而且是两个完全不同的id 当我们希望是s1和s2是同一个对象,这就是我们所说的单例模式。 最后获得的都是同一个对象,这样就可以避免去重复的创建…...
机器学习 笔记
特征值提取 字典 from sklearn.extaction import DictVectorizer mDictVectorizer(sparseFalse)#sparse是否转换成三元组形式 data[], #传入字典数据 data1model.fit_transform(data) #使用API 英文特征值提取 from sklearn.feature_extraction.text import CountVe…...
江协科技之STM32驱动1.3寸/0.96寸/0.91寸OLED显示屏介绍
目录 编码介绍 ASCII码 汉字编码 取模软件 江协科技OLED库适用器件 SSD1306简介 模块引脚更改 0.91寸OLED适配 模块驱动必备知识 驱动代码 OLED_Font.h OLED.h OLED.c 编码介绍 ASCII码 ASCII码是一套数字到字符的映射标准,它规定了用什么数字表示…...
Spring Security 认证流程,长话简说
一、代码先行 1、设计模式 SpringSecurity 采用的是 责任链 的设计模式,是一堆过滤器链的组合,它有一条很长的过滤器链。 不过我们不需要去仔细了解每一个过滤器的含义和用法,只需要搞定以下几个问题即可:怎么登录、怎么校验账户、认证失败…...
74HC245
74HC245:典型的CMOS型缓冲门电路 在这里用于增加电压...
Java的static关键字和静态代码块
一、当static关键字用来修饰属性时,所修饰的属性就是类属性,而不是对象属性,所以可以做到全类共享。 不能用对象名去调用,只能用类名调用。 二、静态方法只能调用同为静态的方法和属性,非静态方法什么都可以调用。 三…...
Apex 批处理将 account owner 转移,同时实现关联的 opp 和 case 转移
实现和 mass transfer account 一样的功能: global class AccountBatchScript implements Database.Batchable<sObject>,Schedulable{String query;Id oldOwnerId xxxxxxxxxxxx;Id newOwnerId yyyyyyyyyyyy;List<Id> AccountIds new List<Id>(…...
Python | Leetcode Python题解之第557题反转字符串中的单词III
题目: 题解: class Solution:def reverseWords(self, s: str) -> str:stack, res, s [], "", s " "for i in s:stack.append(i)if i " ":while(stack):res stack.pop()return res[1:]...
Spring设计模式
设计模式 是一种软件开发中的解决方案,设计原则。目的是使代码具有扩展性,可维护性,可读性,如: 单例模式(Singleton Pattern) Spring IoC 容器默认会将 Bean 创建为单例,保证一个类…...
信号保存和信号处理
目录 信号保存中重要的概念 内核中信号的保存 对sigset_t操作的函数 对block,pendding,handler三张表的操作 sigpromask 编辑 sigpending 是否有sighandler函数呢? 案例 信号处理 操作系统是如何运行的? 硬件中断 …...
网站小程序app怎么查有没有备案?
网站小程序app怎么查有没有备案?只需要官方一个网址就可以,工信部备案查询官网地址有且只有一个,百度搜索 "ICP备案查询" 找到官方gov.cn网站即可查询! 注:网站小程序app备案查询,可通过输入单位…...
如何利用宏和VBA来提高文档编辑排版速度?
一个真实的文档修改需求 为什么我会去研究VBA呢?主要原因是今年在一个项目里写了太多的文档。文档中很多操作其实都是机械的、重复的,但是偏偏又很耗时。举个例子,当时有这么一个修改需求,修改文档中所有“输入输出需求表格中”添…...
Kafka - 启用安全通信和认证机制_SSL + SASL
文章目录 官方资料概述制作kakfa证书1.1 openssl 生成CA1.2 生成server端秘钥对以及证书仓库1.3 CA 签名证书1.4 服务端秘钥库导入签名证书以及CA根证书1.5 生成服务端信任库并导入CA根数据1.6 生成客户端信任库并导入CA根证书 2 配置zookeeper SASL认证2.1 编写zk_server_jass…...
c++基础32输入和输出
输入和输出 C风格(使用printf和scanf)输出字符输入字符 C风格(使用cin和cout)输出字符输入字符 注意事项 在C和C中,字符的输入和输出可以通过多种方式实现,包括使用标准输入输出库函数如 printf和 scanf&…...
[C++] 函数详解
前言 今天zty带来的是函数的详解,搞了4个小时,大家给个赞呗,zty还要上学,发作品会少一点 先 赞 后 看 养 成 习 惯 先 赞 后 看 养 成 习 惯 先 赞 后 看 养 成 习 惯 演示用编译器及其…...
AMD CPU下pytorch 多GPU运行卡死和死锁解决
参考链接 https://medium.com/amitparekh/solving-ddp-deadlock-with-multiple-gpus-and-amd-cpus-442186632034 简要说明 AMD的IOMMU和NVIDIA的NCCL不兼容问题导致AMD的IOMMU是BIOS 级组件,它基本上充当将虚拟地址映射到 GPU 上的物理地址的接口,它的全部目的是让 CPU 和 G…...
Swift 开发教程系列 - 第12章:协议与协议扩展
协议(Protocol)是 Swift 的一种重要特性,它定义了实现特定功能的方法、属性或其他要求。通过协议,可以将行为定义从具体实现中分离,使代码更具可读性和扩展性。Swift 的协议支持协议扩展,这一特性允许我们为…...
麒麟V10,arm64,离线安装docker和docker-compose
文章目录 一、下载1.1 docker1.2 docker-compose1.3 docker.service 二、安装三、验证安装成功3.1 docker3.2 docker-compose 需要在离线环境的系统了里面安装docker。目前国产化主推的是麒麟os和鲲鹏的cpu,这块的教程还比较少,记录一下。 # cat /etc/ky…...
开源可部署|embeddinggemma-300m + Ollama构建私有化语义搜索服务
开源可部署|embeddinggemma-300m Ollama构建私有化语义搜索服务 1. 引言:为什么需要私有化语义搜索 在日常工作和学习中,我们经常需要从大量文档中快速找到相关信息。传统的关键词搜索往往不够智能,无法理解语义层面的相似性。…...
【万字】抛开 RAG 谈蒸馏.skill,大概率是形式主义
上周我拜访了前老板,他们应该是国内做 AI 应用最深的一批公司,相应着整个团队对 AI 的应用及理解都很到位,于是乎我问了他一个问题: 老板你觉得什么是 AI 原生团队/应用,对应着团队的组织结构会有什么变化吗࿱…...
2026年03月CCF-GESP编程能力等级认证Python编程五级真题解析
本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 关于 Python 实现的单链表、双链表和循环链表,下列说法正确的是 ( )。 A. 在 Python 实现的单链表中,若已知任意结点对…...
2025届毕业生推荐的六大降重复率网站推荐榜单
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于内容创作里,使AIGC(人工智能生成内容)比例降低的核心策…...
2026年4款主流降AI率工具横评:嘎嘎降AI性价比碾压同行
2026年4款主流降AI率工具横评:嘎嘎降AI性价比碾压同行 这两年降AI率工具冒出来一堆,挂着"免费试用""全网最低"的招牌,进去一跑结果五花八门。我这半年前前后后把市面上叫得上名字的降AI率工具都试了一遍,真正…...
不依赖对话日志检测Prompt注入,一套隐私优先的实现方案
来源:DeepHub IMBA 本文约2600字,建议阅读5分钟如果只保留遥测数据(关于会话行为的数值信号)实际上能保留多少检测能力?检测 Prompt 注入和越狱攻击的方法,大多建立在系统可以访问对话日志这个前提上。但是…...
服务容灾恢复方案
服务容灾恢复方案:保障业务连续性的关键 在数字化时代,企业的核心业务系统一旦中断,可能造成巨大的经济损失和声誉损害。服务容灾恢复方案正是为了应对此类风险而设计,通过技术手段确保业务在灾难发生后快速恢复,最大…...
Prompt 缓存有没有用?从治理视角看,关键还是缓存层放得对不对
很多系统一开始做 Prompt 缓存,出发点都很直接:希望少发一些重复内容,把调用成本压下来。 这个方向没有问题,但如果系统已经进入正式业务,缓存的价值通常不会只停留在“省一点 token”。 为什么 Prompt 缓存最后会变成…...
IgH EtherCAT 从入门到精通:第 16 章 用户空间库 libethercat 开发
第 16 章 用户空间库 libethercat 开发 导读摘要:libethercat 是 IgH EtherCAT Master 的用户空间 C 库,它将内核态 API 通过 ioctl 系统调用封装为用户空间可用的函数。本章将讲解库的内部架构、ioctl 通信机制、CMake/pkg-config 集成方式,以及如何基于 libethercat 开发应…...
