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中文教程: 系统环境 系 ...
随机推荐
- .Net Core Web Api实践(二).net core+Redis+IIS+nginx实现Session共享
前言:虽说公司app后端使用的是.net core+Redis+docker+k8s部署的,但是微信公众号后端使用的是IIS部署的,虽说公众号并发量不大,但领导还是使用了负载均衡,所以在介绍docke ...
- 开箱即用!使用Rancher 2.3 启用Istio初体验
本文来自Rancher Labs Rancher的理念是Run Kubernetes Everywhere,Rancher 2.3中许多重大更新,让这一理念的实现又向前一步. 其中,最重要的两个特性是 ...
- HashMap,HashTable 区别,实现原理。
HashMap是HashTable 的轻量级,非线程安全的,都是实现了map接口 区别:hashmap 允许空键值对的存在,非线程安全,效率高于hashtable,因为hashtable 是synch ...
- Java集合框架(java.util包)
集合的概念: 是一种工具类,可以存储任意数量.任意类型的对象(所以后面需要用到泛型,以约束集合中元素的类型) 集合的作用: 1.在类的内部对属性进行组织 2.方便快速定位属性位置 3.某些集合接口,提 ...
- dfs - 概率
C. Journey time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- 【转】oracle条件子句执行顺序
Oracle WHERE条件执行顺序:ORACLE采用自下而上的顺序解析WHERE子句 1.据此那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾例如:SELECT … FROM EMP E ...
- Linux环境下Mysql开启远程访问权限
如何通过Window的数据库可视化工具远程连接装在Linux上的Mysql呢?可以按照以下步骤逐一确认! 检查监听端口是否存在 netstat -ntlp |grep mysql 检查Mysql配置配 ...
- Java.数据结构.集合体系详解
I. 第一部分:常见数据结构 首先简单说下数据结构. 什么是数据结构?数据结构就是组织数据的方式. 常见的数据结构:栈,堆,树,图,数组,队列,链表. 这里主要介绍与java集合体系相关的栈.数组和链 ...
- 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(4) - 图书列表界面
在前三章中我们完成了登录窗口, 并掌握了使用Conductor来切换窗口, 但这些其实都是在为我们的系统打基础. 而本章中我们就要开始开发系统的核心功能, 即图书管理功能了. 通过本章, 我们会接触到 ...
- Redis(四):del/unlink 命令源码解析
上一篇文章从根本上理解了set/get的处理过程,相当于理解了 增.改.查的过程,现在就差一个删了.本篇我们来看一下删除过程. 对于客户端来说,删除操作无需区分何种数据类型,只管进行 del 操作即可 ...