PRIME TIME官方教程笔记(静态时序分析)(二)

2023-11-05

step2a 读入parasitic寄生参数(SPEF文件和GPD文件)

其中GDP:galaxy parasitic datapath
SPEF: 标准寄生交换文件,standard parastic exchange format;

read_parasitics -format SPEF flat.spef
read_parasitics -format GPD DPD_Dir
#支持读入milkway库
#层次化的SPEF
read_prasitics -path I_BlkB I_BLkB.aprf.gz
read_prasitics -path {U1 U2 U3} BlkC.spef.gz
read_prasitics TOP.spe.gz

step2b 检查寄生参数注解annotation

report_annotated_parasitics
report_annotated_parasitics -list_no_annotated
read_parasitics的命令会自动执行 report_annotated_parasitics 展示报告;
任何没有注释的pin-to-pin的nets需要被审查investigated
没有驱动和负载的nets 一般都是一些没用的引脚产生的,比如触发器的qbar pin,这些没有被注释是正常的;

step 3 约束文件的检查与修正

read_sdc -echo $constraint_file
#一般是.sdc文件 是DC综合后根据约束脚本吐出来的;
source -echo $constraint_file
#一般是tcl文件 ,就是我们自己编译的约束脚本
check_timing -verbose
#检查constraints的完整性
report_clock -skew -attribute
report_port -verbose
#检查时钟和端口的约束

report_design
report_exceptions -ignored
report_case_analysis
#检查设计约束和例外

Step 4a Update timing 更新时序

update_timing [-full]

#检查更新后的时序结果,就是通过生成总结报告summary report
report_global_timing [-pba]
report_qor [-pba]
report_constraint -all_violators [-pba]
report_analysis_coverage
report_global_slack

#加pba option path based analysis 在保存会话之后,避免在恢复会话session时重新计算;
coverage的分析

total met violated untested

step 4b 生成更详细的报告


report_timing \
    -input_pins -nets -capacitance -transition \
    -delay main_max -group CLK -max_path 10 \
    -slack_less infinity <other_options>
    #generate timing report in PBA mode
report_timing -pba_mode path | exhaustive $recalculated_path

save session保存会话

save_session $session_directory

save_session $session_directory
save_session $session_directory -include_libraries

# 检查保存会话的完整性
#检查曾经保存的会话版本
more $session_diractory/Readme
#检查使用的库
more $session_diractory/lib_map
#检查师傅可以restore
restore_session $session_diractory

一个保存了的session包含以下信息:

  1. 已经link的设计和加载的库
  2. 时钟,时序例外和其他的一些约束
  3. operating condition 工作条件 PVT
  4. 后标的SDF延迟和寄生参数
  5. 变量的设置
  6. 网表的修改(insert_buffer size_cell,swap_cell)
  7. 分析的数据
  8. cross-coupled 交叉耦合 延时信息和噪声信息

step6 退出

redirect -tee $exit_file {
   print_message_info 
   quit
}

implicit;盲目的,含蓄的
explicit;名确的,详述的

primetime的setup file 设置文件

setup file 和DC的Setup 文件相似,为隐藏文件,且可存在三个不同优先级的 .Synopsys_pt.setup

pt的用户定义的setup的文件,一般只用来aliases,定义常用的命令的缩写;
aliases page_on {set_app_var sh_enable_page_mode true}

history keep 200

脚本的语法检查

使用ptprocheck my_script.tcl

pt_shell -f run.tcl | tee -i run'log

##或者在shell下
source run.tcl -echo -verbose
redirect run.log {source run.tcl -echo -verbose}
;#重定向命令只下过的结果:
redirect  -tee check_timing.rpt {check_timing report_analysis_coverage}

profile
validating

完整的STA的需求
  1. 完整的设计约束,完整并不意味着正确;
  2. 运行所有需要的时序检查;
    两条命令来检查STA的完整性:
check_timing ;#标记缺失的约束
report_analysis_coverage ;#标记没有被检查的时序

bold indcates default checks

约束警告: No input delay

这类警告是默认关闭的,你需要设置变量:
set_app_var timing_input_port_default_clock true
收到这种警告信息,你需要知道:

  1. 这个输入引脚和什么相连
  2. 哪条路径会受到这条警告的影响;或者此案例缺少输入端口的分析;
    我们需要检查是否有必要约束这个port;
    一些情况下,是不需要为input port添加约束的: such as:
    1.假设这个端口驱动一个固定的信号,使用set_case_analysis 比如:A端口驱动一个mux的选择信号,检查这条命令set_case_analysis是否被应用;
    2.假设以这个port为起点的路径在当前模式的分析中是不存在的;
约束警告: No output delay

收到这类警告,你需要去知道:

  1. 输出端口M连接的是什么,寄存器还是输入端口;
  2. 这条警告所影响的路径是哪一条,他是否是一个输出的时钟端口;

输出端口必须被output delay 所约束;
如果他是一个输出的时钟端口,那么就用指定output_delay,创建一个generate_clock 然后忽略这条警告;

warning: NO clock

there are 2 register clock pin without clock
收到这类警告,你需要去知道:
哪里需要创建一个时钟去驱动受影响的端口;
manually 人为的;

时序检查: 代工厂指定和用户指定

recovery&removal啥意思?
你的工作是决定这个时需检查是否有必要,还有检查神魔原因导致时需检查没有被执行;

没有检查的时序:False_paths

false_path ;一般是用户 使用set_false_paths指定,非同步或者专用的时钟组;
收到此类的警告,你需要去知道:
1.这条时序路径包含哪个时钟;
2.F1 port的上一级触发器是:
3.哪条false_path的命令或者clock_group的命令与此warning相关;
比如: set_false_path -from F2/CLK -to F1/D

untestd timing path: user_disable

用户使用 set_disable_timing
使用L;report_analysis_coverage -status_details untested
-check_setup

其中-status_detials 会指明untested的原因:
user_disable;
出现此类的warning,你需要去知道:这个时序检查只是对指定cell(F1)无效还是定义在cell库中,对所有instance都无效;
这两者在命令的书写上是不同的:
set_disable_timing -from CLK -to D F1
set_disable_timing -from CLK -to D {get_lib_cell core_slow.db/fdesf2a15}

untested timing path:constant_disable 常量

这种警告一般出现在:

  1. 用户指定 set_case_ananlysis
  2. 信号绑定为高电平或低电平;
    出现这种警告,你需要去知道:
    这个timing的disable是不是由于用户指定的case或者恒高或者恒低电平的信号导致的;
    用户哪条约束导致了 timing的disable;
    such as:
    set_case_analysis 0 scan_en
    其中scan_en是输入信号的名字

untested timing check: no_path

他给出untested的原因是no_path的话:
这个需要配合图示进行解答:如:
用户指定:
set_disable_timing -from A -to Z U1
就会导致此问题;disable的是此路径上的一个缓冲器,导致后端的寄存器没有arrive timing; 就没办法check_timing;
所以当遇到此警告时:你需要知道:
disabletiming是否是用户指定的case造成的;

9 commands tools

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xdwabFFn-1602574989013)(evernotecid://B45F1306-E510-4A24-B78B-A9E1CC2C1F3C/appyinxiangcom/12890172/ENResource/p174)]

all_fanin 是如何工作的

当check_timing 出现constraint warning: no clock;
此时的模块工作在functional mode;在I_PLL出现 missing generated clock的warning;

使用以下commands追踪warning的来源路径:

all_fanin -startpoints -flat -to F1/CLK

trace timing arc追踪时序弧,跨层次结构,在下面几种情况下停止:

  1. input port
  2. CLK flop pin 或者G & D latch pin;
  3. 时序弧消失或者不可用的cell的输出引脚;

在路径中找到disable的timing arcs

report_disable_timing [all_fanin only_cells -to F1/CLK -flat]
PT会标记disable_arcs的原因
dissmiss clock gating logic as valid clock startpoint
all_fanout -flat -endpoint -from L1/Q

all_fanout追踪timing arcs的,不考虑模块边界,在下面情况下停止:

  1. 输出port
  2. input flop and latch pins
  3. cell里那些缺失或者不使用 timing_arcs的输入端口

从时序报告中识别出约束

clock_constraints
interface_constraints

pre versus post CTS

pre CTS 也就是在时钟树综合之前,需要用户指定时钟的network delay;clocks are created as ideal clock;
set_clock_latency 1 [get_clocks CLK]
在CTS之后; 工具有了更详细的时钟路径的延迟信息;路径中的buffer也插入完毕,所以PT会自动计算clock network 的延迟;
使用命令:
set_propagated_clock [all_clocks]

指定时钟的jitter 抖动

什么是时钟的抖动 jitter
cycle to cycle jitter in phase
duty cycle jitter
jitter是可以在PT中创建,报告,移除的;

create_clock x -name mclk -period  10
set_clock_jitter -cycle 2 -duty_cycle 3 -clock mclk
#cycle to cycle 的jitter 应用于max(setup)的path;

clock uncertainty& skew

clock_uncertainty 一般包括 clock skew 和margin(裕量)
在post CTS中,clock_uncertainty 只包含时序的裕量margin;
在传统的约束设置中,会将jitter也加入到clock_uncertainty中

约束interface path(接口路径)的一个比较清晰的解决方案

  1. 将clock_latency包含到输入延迟之中(input_delay)
set_input_delay -network_latency_included \
-source_latency_included -max 2.6 -clock clk [get_ports A]
#-max 指的是 setup time 的需要
#-min 是hold time需要

set_output_delay -max 2.5 -clock CLk [all_outputs]
set_output_delay -min -0.2 -clock CLK [all_outputs]

represented

时序报告的分析

生成总结性的报告,并保存会话
重新加载PT的会话
生成详细的信息
timing arcs的延迟计算

#design quality of results
report_qor
report_global_timing
report_global_slcak
report_constraint -all
report_analysis_coverage
report_timing
report_delay_calculation
report_qor

report_qor -only_violated
为一个总结性的报告:报告的内容包括:
违例路径组的summary;包括每条违例路径的max\min delay
还有设计的细节,和DRC的违例;

report_global_timing

internal 违例发生在内部还是I/O
会将违例按路径分成四类:
reg-reg reg-out in-reg in-out

report_global_slack

slack的总结性的报告 报告设计的setup & hold slack的信息;
或者指定pin或ports的slack
max_rise max_fall min_rise min_fall?
待补充:
报告经过指定端口的所有路径的setup hold slack信息;

  • 表示,指定的pin/port没有slack信息
    为了节省运行时间,在生成报告之前,设置:
    set_app_vartiming_save_pin_arrival_and_slack true
report_constraint

报告的是所有的违例的endpoints sorted by slack

report_analysis_coverage

violater的占比,untested的占比
setup
hold
recovery
removal
min_period
min_pulse_width
out_setup
out_hold

边缘敏感sensitivity negativ_unate

cell delay 输出从1到0 和从0 到1 的延迟是不同的
R: 表示 transitions from0 to 1
F: 表示 transitions from1 to 0
所以遂昌的数据到达时间,最短的数据到达时间,和可由的数据到达时间都是不同的:
longest: R + R+ F 当然里面有反相器
shortest : F+F+R

边缘敏感 non unate

路径中如果有一个多输入与非门,非此路径输入无法确定,
所以此路径的到达时间的可能情况一共有4种;

报告 库中的arcs :反相器

report_lib -timing_arcs cb13fs120_tsmc_max inv0d1
### 类似的 filp_flot的arcs信息
report-lib -timing_arcs cb13fs120_tsmc_max sdcrql

report_timing

stages
report_timing 默认是不会报告hierarchy pin的,为了显示hierarchy pin 可以添加option -include_hierarchical_pins
默认report_timing 会生成一个报告,包含setup time最坏的slack的情况

通过增加选项,可以实现报告每一个path group 的最坏的setup slack;
report_timing -group [get_path_group *]

-max_path选项 每个endpoint只报告一条最坏的slack
-nworst选线,就是报告情况最坏的slack的情况;

report_timing -to FF4/D -max_path 3
#也只报告一条路径
report_timing -to FF4/D -nworst 3 
#会报告此endpoint的三条路径;
report_timing -cover_design
#报告设计中每个违例pin的最坏的路径
#当你需要 capture 时钟SDRAM下降沿的 hold timing的最坏的十条路径,以总结的形式报告出来
report_timing -delay min -fall_to [get_clocks  SDRAM_CLK] -max -path end
#报告前十条setup违例的endpoints
report_timing -path summary -group SYS_2x_CLk -max_path 10
#使用-start_end_type 选项指定path的种类;
report_timing -start_end_type reg_to_reg -path_type summary -nworst 5 -nosplit
#使用 slack amount筛选违例路径
report_timing -slack_lesser_than *
report_timing -slack_greater_than *
#还可以生成类似的总结报告:
report_timing -slack_greater_than -13 -slack_lesser_than -12 -max_path 10 -path_type summary

包含input_pin 在时序报告中

report_timing -input_pins
在时序报告中,会将cell_delay和net_delay分开

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PRIME TIME官方教程笔记(静态时序分析)(二) 的相关文章

  • MATLAB算法实战应用案例精讲-【深度学习】CNN池化

    目录 计算机视觉与卷积神经网络 计算机视觉综述 计算机视觉的发展历程 卷积神经网络
  • 狂神ES入门

    视频链接 https www bilibili com video BV17a4y1x7zq 文章目录 一 Elasticsearch与Solr对比 二 环境安装 2 1 Elasticsearch 7 12 1安装 2 2 elastic
  • 7)存储过程

    文章目录 一 存储过程概念 1 存储过程的优点 2 存储过程的类型 二 创建和使用存储过程 1 创建存储过程 2 使用存储过程 3 修改存储过程 4 删除存储过程 一 存储过程概念 就是一条或者多条T SQL 语句的集合 可视为数据库的批处
  • 带注释 实验8-2-3 删除字符 (20分)

    实验8 2 3 删除字符 20分 本题要求实现一个删除字符串中的指定字符的简单函数 函数接口定义 void delchar char str char c 其中char str是传入的字符串 c是待删除的字符 函数delchar的功能是将字
  • Datawhale宣传团队名单公示!

    Datawhale团队 公示 Datawhale宣传团队名单 感谢今年八月所有参与 AI夏令营 的宣传大使 是你们 让更多的同学了解到了开源学习 也让更多人看到了Datawhale 星星之火 可以燎原 社区的发展离不开每一位贡献者 让我们从
  • 浏览器渲染进程的线程有哪些

    浏览器的渲染进程的线程总共有五种 1 GUI渲染线程 负责渲染浏览器页面 解析HTML CSS 构建DOM树 构建CSSOM树 构建渲染树和绘制页面 当界面需要重绘或由于某种操作引发回流时 该线程就会执行 注意 GUI渲染线程和JS引擎线程
  • ueditor百度富文本编辑器粘贴后html丢失class和style样式

    问题 项目经理从123在线编辑上排版好的文章 粘贴到项目的编辑器上 样式完全乱了 排版是这样的 复制到ueditor后的格式 这天差地别呀 于是打开代码模式 发现section的属性全没了 但是 span的属性还是有的 猜测ueditor有
  • Vue样式设置的几种方式

    1 直接使用class设置样式 代码 结果 2 通过v bind绑定class设置样式 1 使用json形式 代码 结果 2 使用数组形式 代码 结果 注意 通过第二种数组的方式 也可以通过三元表达式进行class的判断 此处不再赘述 3
  • 数学建模算法与应用(司守奎版)python 代码实现

    引言 在准备九月份的华为杯 入门选择了司守奎老师的教材 数学建模算法与应用 书中仅提供了lingo和matlab的版本 但是python的数据处理能力更加出色 因此考虑在学习的过程中将代码全部用python实现 第一章 线性规划 基础代码
  • 用 Rust 编写一个简单的词法分析器

    词法分析是编译器和解释器的第一个环节 相对而言也比较简单 词法分析器 有时也称为单元生成器 tokenizer 或者扫描器 scanner 将源代码转换为词法单元 这个过程称为词法分析 本文代码设计复刻自 用Go语言自制解释器 词法分析器一
  • 力扣每日一题——最大间距

    题目链接 class Solution public int maximumGap vector
  • Nodejs全局配置

    在软件的安装 目录下自己新建两个文件夹 node gobal 和 node cache 进入cmd命令行 输入一下的命令设置全局模块的安装路径到node gobal文件夹 缓存到node cache文件夹 npm config set pr
  • C语言-指针变量作为函数参数

    指针变量作为函数参数 函数的参数类型不仅仅是整型 浮点型 字符型也可以是指针类型 它的作用是将一个变量的地址传到另外一个函数中 常见的是传数组的首地址 文章目录 指针变量作为函数参数 一 示例1 二 示例2 三 示例3 提示 以下是本篇文章
  • LeetCode 811. Subdomain Visit Count(哈希表的简单运用,c++,python)

    A website domain like discuss leetcode com consists of various subdomains At the top level we have com at the next level
  • android手机如何到导出电话号码,手机通讯录怎么导入到新手机?这招太给力了!...

    手机通讯录怎么导入到新手机 这招太给力了 2020年01月01日 14 41作者 网络编辑 宏伟 分享 手机通讯录怎么导入到新手机 很多人在第一次接触iPhone的时候 往往会遇到老手机通讯录联系人转移的问题 望着通讯录长长的名单 如果一个
  • debug跳出循环_Debug中经常遇到的一些问题

    在调试中经常遇到的问题 1 这个变量在什么地方被改变了呢 或是这个变量在什么时候才变成了某个值 2 程序运行中报了一条message 这是在什么地方报出来的 3 我想调试在嵌套的循环中外面一层第XXX条 里面一层第YYY条时候的处理 一次次
  • Raspberry Pi 托管 Flask 服务器监控植物生长数据

    使用 Raspberry Pi 3 Model B 和 Arduino 的简单项目 从传感器读取数据并将其显示在 Flask 网站上 所需材料 简述 项目是关于使用土壤湿度传感器和 DHT 11 温度和湿度传感器监测花朵 还包括蜂鸣器 因为
  • 真的太重要了,面试出现的概率达到了 99%!!!对于哈希表的知识(建议收藏)

    哈希表 1 哈希表的引入 2 哈希冲突 1 概念 2 避免哈希冲突负载因子调节 3 哈希冲突的解决方法 重重重点 3 Java 类集的关系 1 哈希表的引入 前言 顺序结构 以及 平衡树 中 元素关键码与其存储位置之间没有对应的关系 因此在
  • 利用百度api实现ocr识别发票

    一 准备工作 1 百度智能云申请一个文字识别的api 里面每个月有1000次调用测试应该够用 2 一个springboot项目 二 主要代码 pom依赖引入

随机推荐