当前位置: 首页 > news >正文

PrimeTime:高级片上变化(AOCV)

相关阅读

PrimeTimehttps://blog.csdn.net/weixin_45791458/category_12900271.html?spm=1001.2014.3001.5482


简介

        随着工艺尺寸的不断缩小,静态时序分析受到的制造过程变化影响日益显著。传统的解决方案是使用一个全局的固定系数(set_timing_derate命令)来为设计添加裕量,以应对片上变化(On Chip Variation, OCV),虽然在130nm和90nm工艺节点时仍属合理,但在更先进的制程中已显得过于保守,带来了过度设计、性能下降和设计周期延长等问题。

        为解决这一挑战,PrimeTime在2009年引入了高级片上变化(AOCV)技术,这是对传统OCV方法的自然扩展,它通过更细致和上下文相关的建模方式,为设计提供了更真实、低悲观度的时序裕量控制。

        AOCV通过以下两个关键参数来对设计路径施加更合理的derating系数:

逻辑深度:

        逻辑深度用于模拟随机变化,较长的路径包含更多的门级元件,其随机性变化之间往往会互相抵消,因此整体上的随机变化会变小。AOCV针对逻辑较深的路径采用更低的derating系数,从而降低不必要的裕量。

物理距离:

        物理距离用于模拟系统变化,当路径跨越芯片较大区域时,更容易受到系统性变化(如工艺密度或邻近效应)的影响。AOCV结合路径所跨越的物理区域,为其计算位置相关的derating系数,从而更准确地反映系统性变化对时序的影响。

准备工作

带有物理信息的寄生参数文件

        由于要计算路径的物理距离,需要使用坐标信息,而计算路径的逻辑深度则不需要坐标信息。若要从SPEF、SBEF或GPD文件中读取线网、引脚和端口的节点坐标到PrimeTime中,首先将变量read_parasitics_load_locations设置为true,然后再使用read_parasitics命令,如下所示。

pt_shell> set_app_var read_parasitics_load_locations true
pt_shell> read_parasitics parasitics_file

AOCV文件

        由于需要根据逻辑深度和物理距离确定derating系数,用户必须按照AOCV文件格式来指定AOCV derating表,支持的类型包括:

  • 一维表:仅基于逻辑深度(depth)或物理距离(distance)

  • 二维表:同时基于逻辑深度和物理距离

        以下是AOCV文件中每个字段的定义,每个字段必须单独一行指定(除非使用\转义):

version: aocv_format_version

        该字段可指定文件版本号,便于未来兼容不同格式,必须写在AOCV文件的第一行,有效版本包括:1.0、2.0和3.0。若使用path_type字段,版本需为2.0;若使用group_name字段,版本需为3.0。

group_name: name

        该字段(可选)用于指定derating表所属的AOCV表组名称。若使用该字段,必须将版本设置为3.0。

object_type: design | cell | lib_cell

        该字段可指定derating表定义的对象类型,可以是design、cell或lib_cell,配合可选的object_spec字段使用(注意此处的cell指的是层次单元而不是叶单元)。

rf_type: rise | fall | rise fall

        该字段可指定时序弧的转换方向,可以是rise、fall或rise fall。

delay_type: cell | net | cell net

        该字段可指定derating表影响的时序弧的种类,如果object_type为design或cell,则可指定为cell、net或cell net;如果object_type为lib_cell,则可指定为cell。

derate_type: early | late

        该字段可指定derating表的类型,可以是early或late,不能同时指定。若为early类型,则derating系数小于1;若为late类型则derating系数大于1。

object_spec: [patterns] [-filter expression]...

        该字段可指定与object_spec对应的对象查询命令所支持的任何选项和参数,用于指定derating表定义的对象,可留空。例如对于object_type为cell时,可以使用get_cells命令的所有选项和参数。

voltage: floating_number

        该字段(可选)用于指定多电压情况下的derating表,只能在object_type为design和lib_cell时使用。

path_type: data | clock | data clock

        该字段(可选)用于指定derating表影响的路径种类,可以是data、clock或data clock。若使用该字段,必须将版本设置为2.0。

depth: floating_number list

        该字段用于指定逻辑深度值,由M个浮点数组成,可留空。

distance: floating_number list

        该字段用于指定逻辑深度值,由N个浮点数组成(以nm为单位),可留空。

table: N*M数组        

        该字段用于指定derating系数,可以是二维、一维甚至零维。

        下面展示了一个AOCV derating表的示例,该表定义在名为top的设计对象上,并将derating系数反标到设计中的所有单元、线网时序弧上。

version: 1.0
object_type: design
rf_type: rise fall
delay_type: cell net
derate_type: early
object_spec: top
depth: 0 1 2 3
distance: 100 200
table: 0.87 0.93 0.95 0.96 \0.83 0.85 0.87 0.90

读取AOCV文件

        使用read_aocvm命令可以读取AOCV文件,PrimeTime会将该文件中的derating表定义在指定对象上,如下所示。如果derating表的语法不正确,PrimeTime会给出错误提示,并且不会进行任何定义。

pt_shell> read_aocvm aocv_file_name

        为了保护与工艺相关的敏感信息,可以使用write_binary_aocvm命令将ASCII格式的AOCV文件转换为二进制编码格式。read_ocvm命令可以读取由write_binary_aocvm生成的二进制或压缩二进制AOCV文件,无需添加任何额外参数。

         derating系数是通过以逻辑深度和物理距离为索引的表格查表得到,如不能完全匹配,将使用线性插值来计算所需的derating系数,就像是非线性延迟模型查表得到延迟值那样,但需要注意的是在计算derating系数时不会进行外插。

        在读取了AOCV文件后可以使用report_aocvm命令报告当前设计的AOCV信息,该命令默认显示当前设计中叶单元和线网的上是否有定义derating表(注意:尽管在AOCV文件中不能指定object_type为叶单元或线网,但他们能从顶层继承derating表的定义,继承的优先级从高到低为库单元(只针对叶单元)、层次单元、设计),如下所示。

****************************************
Report : aocvm
Design : top
Version: W-2024.09-SP2
Date   : Sun Jul 20 21:21:20 2025
****************************************AOCV Table Set                :       *Default*******************************************************|           | Fully     | Partially | Not       || Total     | annotated | annotated | annotated |------------+-----------+-----------+-----------+-----------+Leaf cells |         6 |         0 |         6 |         0 |Nets       |        18 |         0 |        18 |         0 |------------+-----------+-----------+-----------+-----------+|        24 |         0 |        24 |         0 |

        如果指定单元或线网,则能显示该对象上定义的derating表,如下所示。Inherited字段显示该单元从top设计继承的derating表。

****************************************
Report : aocvmobject_list
Design : top
Version: W-2024.09-SP2
Date   : Sun Jul 20 21:21:44 2025
**********************************************************************************************AOCV Table Set                :       *Default*******************************************************| DepthDistance   |      0      1      2      3------------+-----------------------------100 | 0.8700 0.9300 0.9500 0.9600200 | 0.8300 0.8500 0.8700 0.9000File: /home/zhangchen/AOCV/aocvm_1D_LUT.ptName                                         Object   Process  Voltage  Sense    Path     Delay    Inherited---------------------------------------------------------------------------------------------------------------U10                                          cell     early    *        rise     clock    cell     topU10                                          cell     early    *        fall     clock    cell     topU10                                          cell     early    *        rise     data     cell     topU10                                          cell     early    *        fall     data     cell     top

启用AOCV分析

        启用AOCV分析需要将变量timing_aocvm_enable_analysis设置为true,如下所示。

pt_shell> set_app_var timing_aocvm_enable_analysis true

        需要注意的是,将该变量设置为true会隐式执行set_operating_conditions命令,将分析模式切换为on_chip_variation,即AOCV分析是在原OCV模式的基础上进行的。

        在PrimeTime中,AOCV集成于图分析(GBA)和路径分析(PBA)能力中,这使得分析可以采用一种逐步细化的策略,这一策略在传统的静态时序分析中已被广泛使用,可以参考下面的博客。

静态时序分析:静态时序分析的原理及其两种模式PBA、GBAhttps://blog.csdn.net/weixin_45791458/article/details/136078969?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522c4f0b53a37090de7069d86ea87e4100b%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=c4f0b53a37090de7069d86ea87e4100b&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-136078969-null-null.nonecase&utm_term=PBA&spm=1018.2226.3001.4450

GBA AOCV分析

        GBA AOCV分析是一种快速、覆盖整个设计的分析方式,在进行任何时序更新时进行(例如使用update_timing命令或report_timing命令)。它可以在全芯片范围内利用较低的悲观性,从而节省面积、提升性能。

        在执行GBA AOCV分析时,PrimeTime会计算时序弧的逻辑深度和物理距离的保守值,以覆盖穿越某条时序弧的最坏情况路径。例如,对某条时序弧而言,其深度值为包含它在内的所有时序路径(这里的时序路径需要包含时钟路径,与一般情况下的定义不同)中的深度最小值(深度越小,受到AOCV影响越大)。

        GBA AOCV分析是后续在关键路径上进行PBA AOCV分析以进一步减少裕量的前提条件,对于大多数设计,GBA AOCV分析已足以用于时序签核。

指标计算规则

        对于时钟路径和数据路径,逻辑深度和物理距离(两者后称为指标)的计算方式有些许不同:时钟路径上的时序弧拥有三套指标,分别针对发射路径(launch)、捕获路径(capture),或者是穿过时钟路径的数据路径(data);数据路径上的时序弧只能作为发射路径的一部分存在。

        由于存在共同悲观路径,指标的计算从时钟路径上的共同点开始,但一个时钟路径上的时序弧,可能在一个时序路径中是共同路径的一部分,而在另一个时序路径中不是,若要为每种可能的组合计算指标,在计算上是不可行的。这种情况下PrimeTime会选择一个最保守的共同点。

        若想查看某条时序弧上的指标和derating系数,只需要将其作为参数传递给report_aocvm命令即可,如下所示。

pt_shell> report_aocvm [get_timing_arcs -of_objects [get_cells U10]]
****************************************
Report : aocvmobject_list
Design : top
Version: W-2024.09-SP2
Date   : Sun Jul 20 22:23:56 2025
****************************************Warning: No coordinates locations have been defined; AOCVM analysis may be inaccurate. (UITE-464)From pin: U10/ATo pin:   U10/YArc type: cell (data network)AOCVM arc metrics      Launch       ---------------------------------------Distance                   --       Depth                    4.00       AOCVM arc derates      Launch       ---------------------------------------Early rise             0.9000       Early fall             0.9000       Late rise                  --       Late fall                  --       From pin: U10/BTo pin:   U10/YArc type: cell (data network)AOCVM arc metrics      Launch       ---------------------------------------Distance                   --       Depth                    6.11       AOCVM arc derates      Launch       ---------------------------------------Early rise             0.9000       Early fall             0.9000       Late rise                  --       Late fall                  --     

        可以看出其中有一条时序弧的逻辑深度中出现了小数,这是由于使用了set_aocvm_coefficient命令重新指定了单元的深度系数(默认为1)。

        使用report_timing -derate即可查看时序报告,如下所示,需要注意的是此时只报告了最小路径(保持时间),因为derating表中仅指定了early类型。

****************************************
Report : timing-path_type full-delay_type min-input_pins-max_paths 1-derate-sort_by slack
Design : top
Version: W-2024.09-SP2
Date   : Sun Jul 20 22:28:28 2025
****************************************Startpoint: q_long_reg (rising edge-triggered flip-flop clocked by clk)Endpoint: out_long (output port clocked by clk)Path Group: clkPath Type: minPoint                                               Derate  Incr     Path--------------------------------------------------------------------------clock clk (rise edge)                                     0.00     0.00clock network delay (propagated)                          0.02     0.02q_long_reg/CK (DFFRQX2)                                   0.00     0.02 rq_long_reg/Q (DFFRQX2)                             0.90   0.07     0.09 rU10/B (AND2X1)                                     0.90   0.00     0.09 rU10/Y (AND2X1)                                     0.90   0.03     0.12 rU9/A (XNOR2X1)                                     0.90   0.00     0.12 rU9/Y (XNOR2X1)                                     0.90   0.02     0.14 rU8/C (NOR3BX1)                                     0.90   0.00     0.14 rU8/Y (NOR3BX1)                                     0.90   0.01     0.16 fU7/B (XNOR2X1)                                     0.90   0.00     0.16 fU7/Y (XNOR2X1)                                     0.87   0.01     0.17 fout_long (out)                                     0.87   0.00     0.17 fdata arrival time                                                  0.17clock clk (rise edge)                                     0.00     0.00clock network delay (propagated)                          0.00     0.00clock reconvergence pessimism                             0.00     0.00output external delay                                    -0.50    -0.50data required time                                                -0.50--------------------------------------------------------------------------data required time                                                -0.50data arrival time                                                 -0.17--------------------------------------------------------------------------slack (MET)                                                        0.67

PBA AOCV分析

指标计算规则

        如果在完成GBA AOCV后仍有时序违规,可以通过启用PBA AOCV分析来进一步降低悲观性并提高分析准确性,只需要在使用get_timing_paths命令或report_timing命令时添加-pba_mode选项即可。PBA AOCV分析会逐条时序路径独立分析,而不受其他时序路径影响,换句话说,一条时序弧上的指标还取决于其所在的时序路径(可能有很多条),图1展示了如何计算一条时序路径的单元逻辑深度。

图1 PBA AOCV模式下单元逻辑深度的计算

        单元的物理距离是通过计算一个包围时序路径中所有单元的边界框(bounding box)的对角线长度来确定的,如图2所示。

图2 PBA AOCV模式下单元物理距离的计算

        由于存在共同悲观路径,指标的计算从时钟路径上的共同点开始,由于只有一对发射/捕获路径,因此共同点是显然的。

        若想查看某条时序路径上的指标,只需要将其作为参数传递给report_aocvm命令即可(注意使用-pba_mode选项),如下所示。 

pt_shell> report_aocvm [get_timing_paths -pba_mode path -from q_long_reg/CK -to out_long]
Warning: AOCVM path-based analysis can take a long time if path-specific slew propagation is also performed. (UITE-487)
****************************************
Report : aocvmobject_list
Design : top
Version: W-2024.09-SP2
Date   : Sun Jul 20 22:57:36 2025
****************************************Startpoint: q_long_reg (rising edge-triggered flip-flop clocked by clk)Endpoint: out_long (output port clocked by clk)Path Group: clkPath metrics             Cell               Net---------------------------------------------------------Distance                   --                --Launch depth             6.11              7.00Capture depth            0.00              0.00

        可以看出存在UITE-487警告,这是由于PBA AOCV分析同时也会像传统PBA分析中那样,不进行最差转换时间合并而是重新计算,这会导致运行时间增加,为了节省运行时间,用户也可以选择将变量pba_derate_only_mode设置为true,这会导致仅执行PBA AOCV分析部分,跳过转换时间的重新计算过程,而使用GBA分析得到的最差情况的转换时间。

        从上面的报告中可以看出,对于线网和单元,指标的计算是分开的,这是由于变量timing_aocvm_enable_single_path_metrics的默认值为false,PrimeTime将分别计算单元和线网的指标,这对于GBA AOCV分析和PBA AOCV分析都是生效的,图3给出了线网的物理距离的计算规则。

图3 PBA AOCV模式下单元物理距离的计算

        如果想查看时序路径中某条时序弧的derating系数比较麻烦,该系数保存在时序路径的points属性下各个时序点的applied_derate属性中。

foreach_in_collection point [get_attribute [get_timing_paths -pba_mode path ...] points] {echo [format "Derate value: %f" [get_attribute $point applied_derate]]
}

        使用report_timing -derate -pba_mode ...即可查看时序报告,如下所示,需要注意的是此时只报告了最小路径(保持时间),因为derating表中仅指定了early类型。 

****************************************
Report : timing-path_type full-delay_type min-input_pins-max_paths 1-derate-pba_mode path-sort_by slack
Design : top
Version: W-2024.09-SP2
Date   : Sun Jul 20 23:18:28 2025
****************************************Startpoint: q_long_reg (rising edge-triggered flip-flop clocked by clk)Endpoint: out_long (output port clocked by clk)Path Group: clkPath Type: min  (recalculated)Point                                               Derate  Incr     Path--------------------------------------------------------------------------clock clk (rise edge)                                     0.00     0.00clock network delay (propagated)                          0.02     0.02q_long_reg/CK (DFFRQX2)                                   0.00     0.02 rq_long_reg/Q (DFFRQX2)                             0.90   0.07     0.09 rU10/B (AND2X1)                                     0.90   0.00     0.09 rU10/Y (AND2X1)                                     0.90   0.03     0.12 rU9/A (XNOR2X1)                                     0.90   0.00     0.12 rU9/Y (XNOR2X1)                                     0.90   0.02     0.14 rU8/C (NOR3BX1)                                     0.90   0.00     0.14 rU8/Y (NOR3BX1)                                     0.90   0.01     0.16 fU7/B (XNOR2X1)                                     0.90   0.00     0.16 fU7/Y (XNOR2X1)                                     0.90   0.02     0.17 fout_long (out)                                     0.90   0.00     0.17 fdata arrival time                                                  0.17clock clk (rise edge)                                     0.00     0.00clock network delay (propagated)                          0.00     0.00clock reconvergence pessimism                             0.00     0.00output external delay                                    -0.50    -0.50data required time                                                -0.50--------------------------------------------------------------------------data required time                                                -0.50data arrival time                                                 -0.17--------------------------------------------------------------------------slack (MET)                                                        0.67

一些影响AOCV的应用变量

        下面列出了一些影响AOCV的应用变量,它们有些在本文中涉及了,有些没有,可以参考相应的手册进行学习。

  • pba_derate_only_mode
  • timing_aocvm_enable_analysis
  • timing_aocvm_analysis_mode
  • timing_aocvm_enable_clock_network_only
  • timing_aocvm_enable_single_path_metrics
  • timing_ocvm_enable_distance_analysis
  • timing_ocvm_precedence_compatibility
http://www.dtcms.com/a/289848.html

相关文章:

  • 1948. 删除系统中的重复文件夹
  • 16.TaskExecutor启动
  • Windows批量修改文件属性方法
  • pyhton基础【27】课后拓展
  • 【华为机试】169. 多数元素
  • C++ STL中迭代器学习笔记
  • day057-docker-compose案例与docker镜像仓库
  • 元学习算法的数学本质:从MAML到Reptile的理论统一与深度分析
  • Vision Transformer (ViT) 介绍
  • 面试高频题 力扣 417. 太平洋大西洋水流问题 洪水灌溉(FloodFill) 深度优先遍历(dfs) 暴力搜索 C++解题思路 每日一题
  • 使用unsloth模型微调过程
  • 软件反调试(5)- 基于注册表实时调试器检测
  • MYSQL:从增删改查到高级查询
  • 数据结构-线性表的链式表示
  • 《P3398 仓鼠找 sugar》
  • 【1】YOLOv13 AI大模型-可视化图形用户(GUI)界面系统开发
  • 【实证分析】会计稳健性指标分析-ACF、CScore、Basu模型(2000-2023年)
  • MySQL锁(二) 共享锁与互斥锁
  • Filter快速入门 Java web
  • Compose笔记(三十七)--FilterChip
  • TVLT:无文本视觉-语言Transformer
  • c++ duiLib 显示一个简单的窗口
  • AMD处理器 5700G 矿卡RX580-8G 打英雄联盟怎么样
  • 洛谷 P10287 [GESP样题 七级] 最长不下降子序列-普及/提高-
  • 《P2680 [NOIP 2015 提高组] 运输计划》
  • 【66】MFC入门到精通——(CComboBox)下拉框选项顺序与添加顺序不一致
  • 前端静态资源免费cdn服务推荐
  • Dify极简部署手册
  • 30天打好数模基础-逻辑回归讲解
  • 7-大语言模型—指令理解:指令微调训练+模型微调