为什么要引入AOCV


为了精确性,为了剔除悲观度。用set_timing_derate来设置OCV,对于一个固定的corner,只能对data/clock, cell/net, late/early分别设不同的值,由下图可知,这个值是个trade off的结果,在保证yield的前提下,尽量不那么悲观,但由于其『固定天性』,这个值既不能cover最悲观的部分,而对另一部分又过于悲观。

什么是AOCV


AOCV是一种用伪统计(pseudo-statistical )来模拟variation的方法,相对于传统OCV更精确,它用于模拟random 和systematic variations:

Systematic variation:即Distance based AOCV,用于模拟global variation,根据芯片制造过程的统计特性,距离越远的cell之间相对的variation越大,所以用distance based AOCV来描述距离跟derate之间的关系,距离越大derate越大,这个距离是指一条timing path所在『物理范围』内对角线的长度。timing path的位置信息由SPEF提供,这要求抽SPEF时需要将坐标信息抽出,在STA中读SPEF时要把SPEF的坐标读入。

Random variation:即Depth based AOCV,用于模拟Local variation,由于random variation相互抵消作用,derate随着路径深度的增加而减小。

通常AOCV table有一维跟二维两种,一维table的index是depth,二维table的index是depth跟distance。对于每种类型的cell,foundry会针对rise/fall, late/early, data/clock分别提供一个table。

object_type : lib_cell

rf_type : rise

delay_type : cell

derate_type : late

path_type : data

object_spec : 10nmlib/BUF_X4

depth : 1 2 3 4 5

table: 1.183 1.145 1.122 1.109 1.0901

object_type : lib_cell

rf_type : rise

delay_type : cell

derate_type : early

path_type : data

object_spec : 10nmlib/BUF_X4

depth : 1 2 3 4 5

distance: 0 500 1000 1500

table: 1.123 1.090 1.075 1.067 1.062

       1.124 1.0911.076 1.068 1.063

       1.125 1.0921.077 1.070 1.065

       1.126 1.0941.079 1.072 1.067

如何使用AOCV做STA分析

BA AOCV:

  • 对于一个cell,其Depth取其所在所有timing path上的最小值;

  • 不考虑distance based OCV,即不计算distance的值;

  • 如果AOCV table是二维的,STA工具通常会选最后一行做GBA分析,以保证distance值最悲观。

  • PBA AOCV:

    • 在GBA的基础上,针对用户指定的一组path重新计算timing,并重新计算该组path上每个cell的Depth;

    • 对于一个cell,其Depth对不同的path分别计算,分别取该cell所在path上的精确值;

    • 如果提供了distance basbed AOCV table,会根据SPEF中的坐标信息,计算对应path所在区域的对角线长度,即derate值从二维表格中得到。

    • PBA计算得到的值更精确,但需要特别特别特别长的runtime。

Tool:因为方法学上一致,在工具端,除了变量/命令命名方式不同,剥去这层外衣,里面都是一样雪白的肉体。此处仍以Tempus为例,来介绍工具端使用模型(use model)。

使能AOCV 分析:

  • setAnalysisMode –aocv true –analysisType onChipVariation

读入AOCV table:

  • Single corner: read_lib -aocv my.aocv

  • MMMC: create_library_set -name mylib -timing my.lib -aocv my.aocv

AOCV相关变量设置:

列几个常用变量,至于每个变量用于什么用途,请自行查guide。这里需要特别说明的一点是:如果既读入了AOCV table又用set_timing_derate设了OCV,不同工具的行为有所差别,都有相应的变量控制。对于Tempus工具在计算最后的derate时会根据以下标红变量的不同设置,做不同计算。

timing_aocv_analysis_mode

timing_aocv_derate_mode 

timing_derate_aocv_reference_point 

timing_derate_ocv_reference_point

timing_derate_aocv_dynamic_delays

AOCV report:

report_aocv_derate

report_timing -retime aocv/aocv_path_slew_propagation

report_timing -format { ... stage_count aocv_derateuser_derate ...}

最新文章

  1. 敏捷开发之Scrum扫盲篇
  2. Android多线程
  3. laravel5如何创建service provider和facade
  4. oracle 函数大全及运算符
  5. 装系统提示缺少所需的CD/DVD驱动器设备驱动程序
  6. 关于seafile启动的问题解决
  7. WebStorm 8.0安装LESS编译环境的教程
  8. PHP如何解决网站大流量与高并发的…
  9. js 中对象--属性相关操作
  10. Entify Framewrok - Join的使用方法
  11. 获取ubuntu 的root密码,告别sudo
  12. Linux服务器rsync自动备份
  13. mongoDB6--查询表达式
  14. Python开发【字符串格式化篇】
  15. SAwUML – UML-based, contractual software architectures and their formal analysis using SPIN
  16. 论文笔记-Mining latent relations in peer-production environments
  17. C# 开发圆角控件(窗体)
  18. 2018-2019-1 20189215 《Linux内核原理与分析》第七周作业
  19. Flask框架的学习与实战(一):开发环境搭建
  20. JDK(七)JDK1.8源码分析【集合】TreeMap

热门文章

  1. Selenium3+python自动化006-环境搭建
  2. SSM项目使用junit单元测试时Mybaties通配符加载Mapper不能正常加载
  3. c++ char*和wchar*互相转换(转)
  4. c++踩坑大法好 typedef和模板
  5. Linux之温故知新1
  6. FormData控制台打印为空及使用方法
  7. R Tidyverse dplyr包学习笔记2
  8. 实现简单的 JS 模块加载器
  9. unity的一些特殊目录
  10. mysql数据库事务的操作与理解