PT教程 - 应用系列 - ECO修复Timing(理论+实践+脚本分享)
本文转自:自己的微信公众号《集成电路设计及EDA教程》

《PT教程 - 应用系列 - ECO修复Timing(理论+实践+脚本分享)》
这篇推文讲一下数字IC设计中的post mask ECO和premask ECO,并讲解一下在ICC中Apply ECO的流程。
理论:
前面介绍了在ICC中Apply ECO的方法与流程,但是ICC并非Timing Signoff的一个工具,在ICC中做完布局布线之后,需要到PT中做STA,在Formaliry中做形式验证等等,如果存在违反需要进行ECO。
流程及脚本分享:
这里以修复hold为例,介绍一下PT ECO的方法并分享一下脚本。
首先在PT中进行STA,在任意一个scenario下面,如果存在timing的违反,最好将违反的path报告导出为一个文件,且不分行,这样便于用进程进行处理(如果同一个路径的报告换行的话格式会有点混乱,不便于处理)。可以用上面的redirect命令导出。
修复hold的方法一般就是在endpoint插入buffer或者delay cell。
下面是PT调用的修复hold的进程:

修复完成后需要再报告一下看是否还存在违反,如果还有违反就再次执行该进程:
sta_fix_hold_file ../../backend/pt/sta_rpts/hold_vio.timing “icc”

下面给出该tcl代码,并对该程序进行讲解:
#sta_fix_hold_file是进程的名字,要想调用该进程可以用如下格式:
#sta_fix_hold_file file_name(即PT产生的timing violations报告) icc/astro(设置PT产生ECO tcl脚本是用于astro的还是icc的)
# buf_lst后边是buffer或者delay cells的list,这些cells可被用于修复hold。
proc sta_fix_hold_file {file_name {tool icc} {buf_lst {DEL1V1_8TH40DEL1V2_8TH40 DEL2V1_8TH40 DEL2V2_8TH40 DEL3V1_8TH40 DEL3V2_8TH40 DEL4V1_8TH40 \
DEL4V2_8TH40 BUFV0_8TH40 BUFV12RQ_8TH40BUFV12_8TH40 BUFV16RQ_8TH40 \
BUFV16_8TH40 BUFV1_8TH40 BUFV20RQ_8TH40BUFV20_8TH40 BUFV24RQ_8TH40 \
BUFV24_8TH40 BUFV2_8TH40 BUFV32RQ_8TH40 BUFV32_8TH40BUFV3RQ_8TH40 \
BUFV3_8TH40 BUFV40RQ_8TH40 BUFV40_8TH40BUFV4RQ_8TH40 BUFV4_8TH40 \
BUFV6RQ_8TH40 BUFV6_8TH40 BUFV8RQ_8TH40BUFV8_8TH40}}} {
set f [open $file_name r]
gets $f line
set end_path [lindex $line 0]
#regexp 命令(regexp expstring)用于判断正规表达式exp 是否全部或部分匹配字符串string,匹配返回1,否则0。
while {![regexp {^Endpoint}$end_path]} {
gets $f line
set end_path [lindex $line 0]
}
#TCL 提供了seek,tell和eof 等命令使用户可以非连续访问文件。
#eof fileId
#如果到达fileId 标识的文件的末尾返回1,否则返回0。
#string 命令具有强大的操作字符串的功能,其中的option 选项多达20 个。下面介绍其中常用的部分。
#string compare ?-nocase? ?-length int? string1 string2
把字符串string1 和string2 进行比较,返回值为-1、0 或1,分别对应string1 小于、等于或大于string2。如果有 -length 参数,那么只比较前 int个字符,如果 int 为负数,那么这个参数被忽略。如果有 -nocase 参数,那么比较时不区分大小写。
while {![eof $f]} {
gets $f line
set end_path [lindex $line 0]
if { [string compare $end_path""] && ![regexp {^---} $end_path] && ![regexp {^1}$end_path] } {
puts "###fix holdviolation###current hold violated end point =============> $end_path"
fix_eco_timing -type hold-method insert_buffer -to $end_path -buffer_list $buf_lst
}
}
#注意有个!{regexp {^1} $end_path},这是因为在生成报告的末尾会有个1,不能将其视为hold的违反。
close $f
if {$tool == "astro"}{
write_astro_changes -formatscheme eco_fix_hold.cmd
} elseif {$tool =="icc"} {
write_changes -format icctcl-output eco_fix_hold.tcl
} else {}
}
#使用范例,先报告PT中的hold违反:
report_timing -delay_type min \
-start_end_pair \
-slack_lesser_than -0 \
-path_type end \
-nosplit >../../backend/pt/sta_rpts/hold_vio.timing
软件产生的报告是这样的(下面给的图片中slack没有小于-0的,所以用slack小于0.12的为例,主要关注报告的格式。由于系统精度与显示的问题,注意一定要在0前面加上负号,因为某些slack非常小的正数由于精度的问题,会四舍五入成0.00):

#调用进程修复hold违反
sta_fix_hold_file ../../backend/pt/sta_rpts/hold_vio.timing"icc"
# ../../backend/pt/eco_fix_hold.tcl
#修复完成后在PT中检查是否还存在hold的违反
check_timing
update_timing
report_timing
#report_timing -delay_type min
report_constraint -all_violators -min_delay
在PT产生ECO脚本之后,便可以在ICC中take ECO了。
更多资料欢迎移步微信公众号《数字集成电路设计及EDA教程》
网易云课堂视频课程

链接:https://study.163.com/course/introduction/1005909004.htm
Calibredrv教程-提高流程自动化


## 为了方便大家交流讨论 ##
## 建了一个QQ群 ##
## 集成电路设计及EDA教程 ##
## 加群请备注:EDA ##
## 群二维码如下 ##

# 本公众号有个红包和资料福利微信群 #
# 集成电路设计及EDA教程福利群 #
# 为了避免乱七八糟的人加进来 #
# 可以先加我微信,我拉你进群 #
# 加我微信 请备注下面问题的答案 #
# ASIC的全称 #

PT教程 - 应用系列 - ECO修复Timing(理论+实践+脚本分享)的更多相关文章
- ICC教程 - Flow系列 - 概念系列 - ECO (理论+实践+脚本分享)
本文转自:自己的微信公众号<集成电路设计及EDA教程> <ICC教程 - Flow系列 - 概念系列 - ECO (理论+实践+脚本分享)> 这篇推文讲一下数字IC设计中的po ...
- Innovus教程 - Flow系列 - MMMC分析环境的配置概述(理论+实践+命令)
本文转自:自己的微信公众号<集成电路设计及EDA教程> <Innovus教程 - Flow系列 - MMMC分析环境的配置概述(理论+实践+命令)> 轻轻走过,悄悄看过,无 ...
- Innovus Lab和Lab Guide下载地址 | Innovus教程 - Flow系列 - 数据准备
本文转自:自己的微信公众号<集成电路设计及EDA教程> <Innovus Lab和Lab Guide下载地址 | Innovus教程 - Flow系列 - 数据准备> ...
- android 教程实例系列
用户界面部分学起来还真是无处下手哇,总不能一个控件发一篇文吧,略有点费时间啊...这个难道不是边用边学才给力吗..所以我打算从最实用的Button开始下手. 先贴几个链接,好东西: android用户 ...
- 40款非常棒的 jQuery 插件和制作教程(系列一)
jQuery 在现在的 Web 开发项目中扮演着重要角色,jQuery 让网站有更好的可用性和用户体验,让访问者对网站留下非常好的印象.jQuery以其插件众多.独特.轻量以及支持大规模的网站开发闻名 ...
- opencv-python教程学习系列13-图像平滑
前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像平滑,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 系统: ...
- opencv-python教程学习系列12-图像阈值
前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像阈值/二值化,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 ...
- opencv-python教程学习系列11-几何变换
前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍几何变换,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 系统: ...
- opencv-python教程学习系列10-颜色空间转换
前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍颜色空间转换,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 系 ...
随机推荐
- BuilderPattern(建造者模式)-----Java/.Net
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式
- ES6异步操作之Promise
一直以来觉得异步操作在我心头像一团迷雾,可是它重要到我们非学不可,那就把它的面纱解开吧. ES6 诞生以前,异步编程的方法,大概有下面四种. 回调函数 事件监听 发布/订阅 Promise 对象 异步 ...
- Linux学习之路--常用命令讲解
Linux常用命令讲解 1.命令格式:命令 [-选项] [参数] 超级用户的提示符是# 一般用户的提示符是$ 如:ls -la /usr说明: 大部分命令遵从该格式多个选项时,可以一起写 eg:ls ...
- MacBook Pro 入手一年了,到底香不香?
最近又有小伙伴问到底值不值得入手一台 MacBook Pro,松哥自己在 2018 年 10 月份的时候入手了一台,到现在为止,也用了一年多了,今天就来和小伙伴们聊一聊使用感受,至于到底值不值,需要大 ...
- 利用log4net创建日志文件时过滤日志,这是坑还是?
前言 网上貌似没有太多关于log4net过滤日志的资料,在研究过程中发现一点小问题,这里做下记录,希望对后续有用到的童鞋起到一丢丢帮助作用. log4net日志过滤 由于是在.NET Core中使用, ...
- 2019牛客暑期多校第六场题解ABDJ
A.Garbage Classification 传送门 题意:给你两个串,第一个串s由小写字母组成,第二个串t由dwh组成,长度为26,分别表示字母a到z代表的字符.现在要你判断: 如果字符串中‘h ...
- 【转】8 个效果惊人的 WebGL/JavaScript 演示
英文原文:9 IMPRESSIVE WEBGL JAVASCRIPT EFFECT SHOWCASE,翻译:iteye WebGL 是一种 3D 绘图标准,这种绘图技术标准允许把 JavaScript ...
- Java控制台五子棋(纯算法)
Java五子棋小游戏 本方案是基于控制台写的一个代码 没有花里胡哨的界面,只为研究算法 仅仅用了200行代码 下面是的是运行结果 游戏运行结果 这里我就很简单的复制了一个结果 第9回合,下子方:玩家2 ...
- Java架构师中的内存溢出和内存泄露是什么?实际操作案例!
JAVA中的内存溢出和内存泄露分别是什么,有什么联系和区别,让我们来看一看. 01 内存泄漏 & 内存溢出 1.内存泄漏(memory leak ) 申请了内存用完了不释放,比如一共有 102 ...
- Java入门 - 语言基础 - 12.Number和Math类
原文地址:http://www.work100.net/training/java-number-math.html 更多教程:光束云 - 免费课程 Number和Math类 序号 文内章节 视频 1 ...