innovus之property

2023-10-09 21:20
文章标签 property innovus

本文主要是介绍innovus之property,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

做IC后端工程师,和tool打交道是数不胜数的,记得最初想实现某个功能,试了很多办法,大多过于繁琐不够简洁,后来接触到一些command觉得真是瞬间晴空万里。把一些遇到很有帮助的经验记录下来,希望能帮助到和我一样的小白。

    今天要介绍的是object的property

property 是object的一些特性,或者属性值。常见的有clock的period, datapath的slack, cell的pin等 。有些property自己也是object,比如cell的pin,所以只要你愿意,就能一级一级trace下去 。

两个核心command:


list_property ; # 列出所有指定类型的object的property
get_property ; # 获得指定的某一个object的property

举个具体使用的🌰


list_property -type cell ;#这一步执行之后就会看到cell作为object的各种property,lib_cell就是cell的property
get_property [get_cells ADDED_B*] lib_cell ; #用这一条获得名字为ADDED_B*的cell的lib_cell,是常说的ref cell,是inst对应的库
set leaf [ get_cells -hierarchical -f "is_hierarchical == false" ] ;#这条command获得的是没有hierarchy的inst。

到这里可能还不足以感受到property的强大,那么下面要来大招了。

    在debug timing的时候想知道slack出现的原因,比如想知道某条path slack过小到底是因为clock skew,还是datapath的delay太大等。借助property写出的脚本可以帮我们很大的忙。先看运行结果:

在这里插入图片描述

是不是分析起来一目了然:

slack :0.014 > 0 ;无violation

launch和capture的clock path skew分别是0.501和0.456, datapath的delay是1.55。

clock的周期也可以一眼看出。

有了这个脚本,分析某条具体path的timing会更加清楚明晰。

以下脚本是实现该任务运用property的一些核心命令

set points [get_property $path timing_points];#获得timing path $paths上的所有timing point(所有经过的点)
set size [expr [sizeof_collection $points] -1];#计算整个timing path上point的数量
set delay [expr [get_property [index_collection $points $size] arrival] - [get_property [index_collection $points 0] arrival]];# 计算出从第一个timing point到最后一个timing point的delay差
set slack [get_property $path slack];# 获得timing path的 slack
set cap_clock [get_object_name [get_property $path capturing_clock]];#获得timing path的capture clock(一个collection)

接下来放上全脚本


proc ccs_path_delay { {fromPt "" } {toPt ""} } {if { [string length $fromPt ] !=0 } {if { [string length $toPt ] !=0 } {set path_coll [report_timing -from $fromPt -to $toPt -collection -path_type full_clock]} else {set path_coll [report_timing -from $fromPt -collection -path_type full_clock]}} elseif { [string length $toPt ] != 0 } {set path_coll [report_timing -to $toPt -collection -path_type full_clock]} else {set path_coll [report_timing -collection -path_type full_clock]}set comment "################################"
#       set path_coll [report_timing -collection -path_type full_clock]foreach_in_collection path $path_coll {set points [get_property $path timing_points]set size [expr [sizeof_collection $points] -1]set delay [expr [get_property [index_collection $points $size] arrival] - [get_property [index_collection $points 0] arrival]]set slack [get_property $path slack]set cap_clock [get_object_name [get_property $path capturing_clock]]set launch_clock [get_object_name [get_property $path launching_clock]]set launch_path [get_property $path launch_clock_path]set launch_path_points [get_property $launch_path timing_points]set launch_path_size [expr [sizeof_collection $launch_path_points] -1]if {[sizeof_collection $launch_path_points] > 0} {set launch_delay [expr [get_property [index_collection $launch_path_points $launch_path_size] arrival] \- [get_property [index_collection $launch_path_points 0] arrival]]} else {set launch_delay 0}set capture_path [get_property $path capture_clock_path]set capture_path_points [get_property $capture_path timing_points]set capture_path_size [expr [sizeof_collection $capture_path_points] -1]if {[sizeof_collection $capture_path_points] > 0} {set capture_delay [expr [get_property [index_collection $capture_path_points $capture_path_size] arrival] \- [get_property [index_collection $capture_path_points 0] arrival]]} else {set capture_delay 0}set end_clock_period [get_property [get_property $path capturing_clock] period]set start_clock_period [get_property [get_property $path launching_clock] period]puts "$comment \nData path delay: $delay \nPath Slack: $slack \nLaunch Clock path delay: $launch_delay \nCapture clock path delay: $capture_delay \nLaunch clock: $launch_clock \nCapture clock: $cap_clock \nLaunch clock period: $start_clock_period \nCapture clock period: $end_clock_period \n$comment"}
}

当然你也可以加更多内容进去,可以list property 试试。

总之,学习之路漫漫,有时候突然发现的知识技能,会让你直呼NB,继续努力💪

欢迎关注公众号:IC菜鸟上分记
在这里插入图片描述

这篇关于innovus之property的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/175646

相关文章

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef‘ of undefined“

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef’ of undefined” 最近用vue做的一个界面,引入了一个子组件,在父组件中调用子组件的方法时,报错提示: [Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘methods

Cannot read property ‘length‘ of null while opening vscode terminal

同一问题地址:Cannot read property ‘length’ of null while opening vscode terminal 问题描述 One day, 我在ubuntu 18.04下用vscode打开一个项目,并想和往常一样在vscode使用终端,发现报错Cannot read property 'length' of null。 解决 打开setting.jso

Android 属性动画(Property Animation)

本文是学习以下三位大神之后,整理的学习笔记,彩蛋在编号6          http://blog.csdn.net/lmj623565791/article/details/38067475          http://www.cnblogs.com/angeldevil/archive/2011/12/02/2271096.html          http://www.tu

Android Property Animation属性动画

本文内容摘自《疯狂Android讲义 第三版-李刚著作》

【python】 @property属性详解

【python】 @property属性详解 一文搞懂python中常用的装饰器(@classmethod、@property、@staticmethod、@abstractmethod…)

uniapp微信小程序开发踩坑日记:Pinia持久化报错Cannot read property ‘localStorage‘ of undefined

插件默认使用 localStorage 实现持久化,小程序端不兼容,需要替换持久化 API import { defineStore } from 'pinia'   export const useCommonStore = defineStore('pack-store', {state: (): State => ({wwInfo: {},globalData: {},timerLoc

property 的成员属性

1、assign 范围:对基础数据类型(NSInteger 和 CGFloat) 和 C数据类型(int、float) 使用:简单赋值,不更改索引计数 2、copy(内容拷贝) 范围:对NSString、NSNumber 使用:拷贝对象,释放旧对象,开辟新的内存空间,并将索引计数设为1 深复制:copy的set方法,就是深复制 3、retain(指针拷贝) 范围:对其他NSObje

c tool系列------如何在C文件中获取property

找到一段代码作为以后的参考: char *propertyvalue = "no"; void load_tty_properties(void) { char supportDevice[PROP_VALUE_MAX]; char countryCode[PROP_VALUE_MAX]; property_get("ro.product.device", supportDevic

Cannot read property 'render' of undefined

Cannot read property 'render' of undefined 報錯, 本地和debug環境訪問正常 進行了以下排查 先查看了其他業務 訪問正常 排除全局性錯誤 推斷應該是引入組件的問題 斷點查看各個步驟下scope 發現了某個組件缺少模塊導出   參考 https://stackoverflow.com/questions/51021348/cannot-set-pr

Cannot set property 'innerHTML' of null 问题的解决

错误 第一次写web 前端代码,出现了“Cannot set property ‘innerHTML’ of null”的错误代码,然后不知道原因在哪? 解决方案 在网上查了下资料,原来是js 代码从上往下执行时,没有找到合适的标签而出错。类似于在编程中使用一个未定义的变量,所以一定要在使用变量之前对其进行定义。 查看链接:http://stackoverflow.com/question