我是靠谱客的博主 唠叨绿草,最近开发中收集的这篇文章主要介绍PT静态时序分析 第一课 第二课,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

绪论

在这里插入图片描述
目录:
在这里插入图片描述
在这里插入图片描述
第一到第四课比较重要

第一课

STA原理

静态时序分析是一种穷尽分析方法,用以衡量电路性能。
在这里插入图片描述

  • STA主要有三个步骤:
    1.设计被分解为时序路径(timing path)
    2.计算所有路径的延时(delay)
    3.检查路径的延时是否能满足约束条件

  • 第一步: 四种路径:
    1.输入端口到ff输入口
    2.ff的时钟端口到ff输入口
    3.ff的时钟端口到输出端口
    4.输入端口到输出端口
    在这里插入图片描述

  • 第二步:两种计算
    1.post-layout:从版图的寄生参数中算出,可以通过sdf文件直接导入到pt当中
    2.pre-layout:从technology library当中查表算出,模型并不完全准确

  • 第三步:约束

STA流程

在这里插入图片描述

  • 第一步:Read design & libraries
    读入.db文件,verilog网表,读入vhdl文件,读入库,分别对应以下命令:
read_db
read_verilog
read_vhdl,read_edif
lappend link_path Your_tech_lib.db
  • 第二步:Constrain design

在这里插入图片描述
根据上图写出的约束如下所示:

create_clock -period 5 [get_ports CLK]
set_input_delay 1 -max -clock Clk [get_ports In_N]
set_output_delay 2 -max -clock Clk [get_ports Out_M]

其它约束:
在这里插入图片描述

  • 第三步:specify delay calculation information
    读入已有版图的网表延迟,读入已有版图的寄生参数,对应以下命令:
read_sdf
read_parasitics

Timing reports

报告中的path type是max就是setup check,是min就是hold check。

第二课

Pre-layout constraint

以下面电路作为例子:
在这里插入图片描述

设置的约束如下所示:

create_clock -period 30 [get_ports Clk1]
create_clock -period 20 [get_ports Clk2]
create_clock -period 10 -name Clk3
create_clock -period 15 -name Clk4  #Clk3和Clk4在模块外,因此要额外注明
set_clock_uncertainty 0.35 [get_clocks Clk1]
set_clock_uncertainty 0.4 [get_clocks Clk2]
set_clock_transition 1.0  [get_clocks "Clk1 Clk2"]
set_clock_latency 0.5  [get_clocks Clk1]
set_clock_latency 0.6  [get_clocks Clk2]
set_input_delay 0.0 -clock Clk3 [get_ports Data_In]
set_output_delay 0.0 -clock Clk4 [get_ports Data_Out]  #疑问,如果延迟为0为什么要设置约束?
set_false_path -from [get_clocks Clk3] -to [get_clocks Clk1]
set_false_path -from [get_clocks Clk2] -to [get_clocks Clk4]

uncertainty约束包括skwe,jitter和毛刺,在pre-layout可以不考虑毛刺或者部分约束。

  • setup/hold的计算方法
    在这里插入图片描述
    由于Clk1和Clk2周期不同,在计算setup/hold time时所取的边沿也要进行调整。

  • 如何检查时钟约束的添加情况?

report_clock -attributes -skew   #根据约束的属性列出
check_timing

Post-layout constraint

时钟延时的设置变化为下面的命令:

set_propagated_clock
#具体示例如下:
read_sdf top.sdf
set_propagated_clock [all_clocks]
report_timing -path full_clock	#clk到reg之间的延时也会被列出来 
  • pre-layout vs post-layout
    在这里插入图片描述

Clock Source Latency

电路的延时除了network latency以外还有source latency,设置的命令如下:

#set_clock_latency 0.54 [get_clocks CLK] Pre-layout

set_propagated_clock [all_clocks]   #Post-layout
set_input_delay -source_latency_included -max 1.4 #Post-layout

Q:要如何设置比较准确的source latency?
A:使用-early和-late选项

set_clock_latency 2.5 -source -early [get_clocks CLK] 
set_clock_latency 3.5 -source -late [get_clocks CLK] 

setup time的检查中,最大延时算入信号路径,最小延时算入时钟路径。
在这里插入图片描述
holdtime的检查中,最大延时算入时钟路径,最小延时算入信号路径
在这里插入图片描述

Generated Clocks

对于在电路内部生成的时钟也要额外的命令去设置,才能让PT识别:
在这里插入图片描述

create_clock -per 10 [get_ports SYSCLK]
create_generated_clock -name DIVIDE 
		-source [get_pins U4/CLK] -divide_by 2 [get_pins U4/Q]

Keep Clocks “Clean”

  • minimum pulse width
    PT可以检查FF上的最小时钟宽度是否满足要求,当时钟树定义完毕并在计算完时钟路径的延时后,执行对最小时钟宽度的检查。
set_min_pulse_width -high 1.5 [all_clocks]
set_min_pulse_width -low 1.0 [all_clocks]
  • gating clock
    为了防止gating clock出现毛刺,可以利用约束检查gating信号相对于时钟信号的setup和hold time
    设置后PT会根据电路的逻辑自动判断出门控时钟信号,但是在一些复杂的单元之中需要手动设置。

在这里插入图片描述

create_clock -period 10 [get_ports CLOCK]
set_clock_analysis 0 [get_ports SCAN_CLOCK]
set_clock_gating_check -high -setup 0.5 -hold 0.4 [get_cells U1]
report_clock_gating_check

***注意:约束通过后不产生毛刺的前提是已经规划好了gating信号到来的时间。

Post-layout Analysis

  • OCV
    on-chip variation,PT会根据芯片的PVT环境分析不同情况下的延时。
    OCV分析需要有后端实现后的sdf文件
read_sdf -analysis_type on_chip_variation TOP.sdf

最后

以上就是唠叨绿草为你收集整理的PT静态时序分析 第一课 第二课的全部内容,希望文章能够帮你解决PT静态时序分析 第一课 第二课所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部