Innovus中快速获取timing path逻辑深度的golden脚本

news/2025/2/22 5:58:38

在实际项目中我们经常会遇到一条timing path级数特别多,可能是一两页都翻不完。此时,我们大都需要手工去数这条path上到底有哪些是设计本身的逻辑,哪些是PR工具插入的buffer和inverter。

数字IC后端手把手培训教程 | Clock Gating相关clock tree案例解析

如果这样的timing path上大部分都是纯逻辑单元,比如与门,或门,异步等逻辑单元,而且每部分的delay都比较正常,此时如果timing 存在violation,我们需要反馈给前端进行逻辑的优化。

如果这样的timing path上存在较多的buffer和inverter,说明当前的timing violation主要原因并非设计本身的问题,而是后端PR阶段floorplan,placement做的不合理导致的,这时候需要我们后端工程师来进一步分析解决。

今天小编分享一个自动化脚本来获取具体timing path中的逻辑深度和buffer,inveter数量。这个proc又是一个非常好的脚本练习资源。

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_buffertrue||is_inverter==true"]]} { incr bufinv }} return [list $total_logic_depth [expr $bufinv/2]]}

Usage:
The procedure returns a list of two elements: the total logic depth and number of buffers/inverters in the path. You can use this to compute the logic depth without buffers and inverters.

Example:
set logic_depth [report_logic_depth [report_timing -from startpoint/CK -to endpoint/D -collection]]
puts “Total logic depth of path: [lindex $logic_depth 0]”
puts “Count of buf/inv in path: [lindex $logic_depth 1]”

Output:
Total logic depth of path: 35
Count of buf/inv in path: 8

这里我们拿咱们社区T12nm a55项目place的一条timing report来分析path的合理性。这是一条从reg到memory的timing path,layout路径如下图所示。

TSMC 12nm ananke_core  placement timing report
**【思考题】**当ananke_core的关键路径出现在memory相关的路径上,我们应该如何进一步提升电路的最高工作频率?

innovus 119> set x [report_logic_depth [report_timing -to u_vcpu/u_cpu/u_ananke_dcu/u_ananke_dcu_rams/u_ananke_l1d_tag_dirty_rams/u_dtag_bank/A[3] -collection ]]

14 4

说明这条timing path上buffer和inverter的数量是4级,并没有特别多。当然我们还可以把startpoint对应的reg摆放到更靠近memory的位置。


http://www.niftyadmin.cn/n/5861712.html

相关文章

在CentOS 7上安装和使用Spleeter音频分离工具的详细步骤

在音频处理领域,Spleeter是一款优秀的开源工具,能够帮助用户轻松实现音频文件中人声和背景音的分离。本文将详细介绍在CentOS 7系统上安装和配置Spleeter的步骤,以及如何使用Spleeter进行音频分离。 准备环境: 在开始安装Spleeter之前&…

Hadoop-HA集群部署

集群的服务器规划: 配置免密登陆:(这里示范的是第一台服务器,其余的操作一样),免密登陆是为了执行脚本统一操作,启动,如(hdfs集群:1上启动2.5.6.7&#xff09…

【Gin-Web】Bluebell社区项目梳理3:社区相关接口开发

本文目录 一、接口详情1. 获取分类社区列表接口2. 根据id查询社区 二、值类型与引用类型 一、接口详情 跟社区有关的接口详情如下。 1. 获取分类社区列表接口 首先是Controller层,然后跳转到Logic层业务逻辑的开发。 这是Logic层,再做一次跳转&#…

LeetCode 热题 100 283. 移动零

LeetCode 热题 100 | 283. 移动零 大家好,今天我们来解决一道经典的算法题——移动零。这道题在LeetCode上被标记为简单难度,要求我们将数组中的所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。下面我将详细讲解解题思路,…

RabbitMQ 消息队列 优化发送邮件

express 发送邮件 最简单的异步发送邮件方法为何要使用 RabbitMQ?如何在 Node 项目中集成 RabbitMQ? 一、 不用 await 发送邮件 在实际开发之前,不妨先思考下,我们最终的目的是为了让邮件异步发送。那发送邮件这里有个await&am…

【量化科普】Volatility,波动率

【量化科普】Volatility,波动率 🚀量化软件开通 🚀量化实战教程 在量化投资领域,波动率(Volatility)是衡量资产价格变动幅度的一个重要指标。它反映了资产价格的稳定程度,通常以标准差的形式…

2025最新高维多目标优化:基于城市场景下无人机三维路径规划的导航变量的多目标粒子群优化算法(NMOPSO),MATLAB代码

一、基于导航变量的多目标粒子群优化算法(NMOPSO)介绍 基于导航变量的多目标粒子群优化算法(Navigation variable-based multi-objective particle swarm optimization,NMOPSO)是2025年提出的一种用于无人机路径规划的…

QSplashScreen --软件启动前的交互

目录 QSplashScreen 类介绍 使用方式 项目中使用 THPrinterSplashScreen头文件 THPrinterSplashScreen实现代码 使用代码 使用效果 QSplashScreen 类介绍 QSplashScreen 是 Qt 中的一个类,用于显示启动画面。它通常在应用程序启动时显示,以向用户显…