目录

  • 序言
  • 数据准备
    • 时序库(Timing Library)
    • 物理库(Physical Library)
    • 网表(Verilog Netlist)
    • 时序约束(Timing Constraints)
    • RC 提取(Extraction)
    • 信号完整性分析库(SI library)
    • 时序分析MMMC设置
  • 导入设计
    • 数据验证
    • globals 脚本
      • io 文件
      • view 文件
  • 参考

序言

后端设计的流程之前的博文——大规模数字设计的特点已经有过介绍。后端工作的目标就是实现一个不违反逻辑、物理和设计规则,满足或者超出时序要求的设计。因为后端直接面向流片,所以在确认时序满足前必须考虑所有的物理效应,比如金属填充】、金属耦合之类的。
时序收敛涉及一个完整的流程,包括布局、时序优化、时钟树综合(CTS)、布线和信号完整性(SI)检查。本篇先介绍开始设计前的数据准备工作。数据准备和验证的目标包括:

  • 确认 innovus 拥有完整且一致的设计数据集(所有库视图和版本一致);
  • 确保流程中用到的工具一致地解释时间约束;
  • 确保正确定义了逻辑上等效的单元;
  • 将原型和签核提取工具之间的寄生关联起来。

数据准备

时序库(Timing Library)

设计中用到的单元都必须在库中定义,如果需要分析多种延时工艺角(corner),每个单元都要在每种corner 下提取时序功耗特征。Innovus 支持 NLDM, ECSM, CCS 三种库格式,65nm 之后最好用 ECSM 或 CCS, 模型更精确,没有 NLDM 那么悲观,悲观度可减少5%~10%,这部分可参考之前的博文——数字电路时序分析基础。

物理库(Physical Library)

每个单元必须在 LEF 或者 OpenAccess 格式文件中有抽象的版图定义。LEF 文件中可以定义一些非默认的布线规则,并且有一组优化过的通孔(via)用于布线,LEF 文件可参考之前的博文——LEF文件介绍及其生成。在读入 LEF 时,要先读入 Technology LEF 再读入其他 LEF,或者确保 LEF 里包含了 technology 部分。

网表(Verilog Netlist)

Innovus 要求输入的网表(.v 文件) unique,如果 netlist 没有做 uniquify 在读 netlist 之前可以将变量 “init_design_uniquify” 设成1,工具会在解析 netlist 时候自动做 uniquify。对于 master/clone partitioning 需要特别处理。有些客户基于特别需求要求输入的 netlist 不能有 assign 语句,可以在综合工具中将assign 删掉,如果 netlist 有 assign 没有被删掉,可以在 innovus 中用命令 remove_assigns 将其删掉,默认该命令会把 assign换成一条 net,但是有些 assign 直连了两个port,如果不加 buffer无法将其删掉,对于这种情况建议用 “remove_assigns -buffering” 将其替换成 buffer。其实在 Innouvs 优化过程中也会引入新的 assign, 如果不让 innovus 加入新的 assign 可以加变量:set init_remove_assigns 1。

时序约束(Timing Constraints)

sdc 格式的约束文件,另外对于 SDC 中的 ideal network 和 dont touch network 也要修改,如在综合时可能没修某些 DFT 或 reset 信号,但在 PR 时需要对这些信号做 buffering 就需要将对应的 ideal 或 dont touch 属性去掉,如果在 init_design 之后加额外约束需要先执行:set_interactive_constraint_modes [all_constraint_modes -active] 再加对应的命令。除了 SDC 命令之外,还有一些约束如 dont use 跟 dont touch, 这些命令不是 SDC 的命令是针对 design 中 object 设的命令,加的时候不需要设interactive_constraint_modes.

RC 提取(Extraction)

innovus 使用 Quantus technology file 进行 RC 提取,用于65nm及以下的布线后寄生提取和32nm及以下的布线前后寄生提取。对于65nm之前的工艺基于 capacitance table(Captable) file 使用 innovus 自带提取器即可,但是 TQuantus、IQuantus 和签核 Quantus QRC 需要 Quantus tech file.

信号完整性分析库(SI library)

在 innovus 优化过程中需要对 SI 引起的 delay 跟 glitch 进行分析跟优化,这就需要读入 Noise Models,如 ECSMN 和 CCSN library,或者读入 cdB library.

时序分析MMMC设置

MMMC(Multi-Mode Multi-Corner)设置用于不同工作条件下的优化分析,定义了视图(view)用于建立和保持时间的分析,每个视图由不同的 operating mode 和 delay corner 定义,operating mode 是一系列 SDC 约束,delay corner 由 library set、operating conditions 和 RC corner 组成。

导入设计

数据验证

打开 innovus 后点击 File -> Import Design,填写各栏信息或者直接载入已经准备好的 global variables file(.globals文件)来导入库、网表和时序分析设置(对应命令:source XXX.globals),innovus 会运行 init_design 命令来检查数据并提示错误,点击 Tools -> Log Viewer 可以高亮查看 error 和 warning 信息。
导入设计后可以运行 check_design -all 命令检查库或设计数据是否有缺失或不一致,检查结果会保存到一个 text 文件中。
除了对设计的合理性进行检查之外,同样需要:

  1. 对 sdc 时序约束的一致性以及完整性进行检查,检查 sdc 约束是否有冲突以及缺失;输入命令check_timing;
  2. 对 Design 在理想状态下(采用零互连延迟模型)的 Timing 做一个检查,一方面可以查看设计是否有可能完成时序收敛,另外也对 sdc 里面时序约束的情况做一个大致的了解。菜单栏中依次选择 Timing -> Report Timing 弹出 “Timing Analysis” 对话框,在 “Design Stage” 一栏选择 “Pre-Place”。

globals 脚本

一个 globals 脚本实例如下:

set defHierChar {/}
set locv_inter_clock_use_worst_derate false
set init_io_file {xxxx.io}
set init_oa_search_lib {}
set lsgOCPGainMult 1.000000
set init_verilog {../verilog/xxxx.v ../verilog/xxx.v}
set init_pwr_net {VDD}
set init_mmmc_file {./xxxx.view}
set delaycal_input_transition_delay {0.1ps}
set init_lef_file {../lef/all.lef}
set init_top_cell {XXXX}
set fpIsMaxIoHeight 0
set init_gnd_net {VSS}
set timing_case_analysis_for_icg_propagation false

io 文件

在开始 Floorplan 之前需要编写好 IO PAD 或者 Pin 的排列文件(对应于S公司的 .tdf 或者 .tcl 格式的 tdf文件),然后读入Design中。io文件示例如下:

(globalsversion = 3io_order = default
)(iopad(topright    #指定右上角的IO Corner名字(inst name="xxxx"   )          )(top    #指定上方IO的名字和排布顺序,默认按照从左到右顺序排布(inst  name="XXXX"  )(inst  name="XXXX" )(inst  name="XXXX"  )(inst  name="XXXX"        )(inst  name="XXXX" )(inst  name="XXXX"  ))(topleft    #指定左上角的IO Corner名字(inst name="XXXX"   ))(left    #指定左侧IO的名字和排布顺序,默认按照自下而上的顺序排布(inst  name="xxxxx"  )(inst  name="xxxx"  )(inst  name="xxxxx"  )(inst  name="xxx"      )(inst  name="xxxx"      )(inst  name="xxxx"     ))(bottomleft    #指定左下角的IO Corner名字(inst name="XXXX"    ))(bottom    #指定下方IO的名字和排布顺序,默认按照从左到右的顺序排布(inst  name="xxxxx" )(inst  name="xxxx"  )(inst  name="xxxx" )(inst  name="xxxx"       )(inst  name="xxxxx"  )(inst  name="xxxx"  )(inst  name="xxx" ))(bottomright  #指定右下角的IO Corner名字(inst name="XXXX"    ))(right    #指定右侧IO的名字和排布顺序,默认按照自下而上的顺序排布(inst  name="xxxx"  )(inst  name="xxxx"  )(inst  name="xxxx"       )(inst  name="xxxx"          )(inst  name="xxxx"    )(inst  name="xxxx"    ))
)

view 文件

用于 MMMC 分析的 view 文件示例如下:

# 创建用于对标准单元以及 Macro 进行时序分析和 SI 分析的 lib/cdb 库(library set),
# 根据时序分析的 PVT 环境,需要将所有用到的 PVT Corner 的库都读进来,根据 PVT 环境的不同将它们分组。
# 65 nm以前最常用的就是 BCWC 的 STA 模式,以这种模式为例,需要创建 setup 分析用的 slow lib set,
# 创建 hold 分析用的 fast lib set:create_library_set -name xxxx_libs_min \
-timing {../lib/pllclk_fast.lib \
../lib/ram_128x16A_fast_syn.lib \
../lib/rom_512x16A_fast_syn.lib \
../lib/ram_256x16A_fast_syn.lib \
../lib/fast.lib \
../lib/tpz973gbc-lite_fast.lib} \
-si {../CDB/fast.cdb}create_library_set -name xxxx_libs_max \
-timing {../lib/pllclk_slow.lib \
../lib/ram_128x16A_slow_syn.lib \
../lib/ram_256x16A_slow_syn.lib \
../lib/rom_512x16A_slow_syn.lib \
../lib/slow.lib \
../lib/tpz973gwc-lite_slow.lib} \
-si {../CDB/slow.cdb} # 前面创建的 lib set 指定了对标准单元和 Macro 进行 STA 的 PVT 信息,
# 这里创建 RC Corner 来为提取 Net 的寄生电阻电容指定电阻、电容查找表(从而得到 Net的 Delay 信息),
# 根据 Stage 的不同选用不同的查找表文件(.capTbl 和 .tch):create_rc_corner -name xxxx_rc_corner \
-cap_table {../captable/t018s6mlv.capTbl} \
-preRoute_res {1.0} \
-preRoute_cap {1.0} \
-preRoute_clkres {0.0} \
-preRoute_clkcap {0.0} \
-postRoute_res {1.0} \
-postRoute_cap {1.0} \
-postRoute_xcap {1.0} \
-postRoute_clkres {0.0} \
-postRoute_clkcap {0.0} \
-qx_tech_file {../QRC/t018s6mm.tch}# 创建 Delay Corner,它是 library set 和 RC Corner 等的组合
#(此Lab中没有设置 power domain 和 op condition 的信息,因此就这两项内容的组合):create_delay_corner -name xxxx_corner_min \
-library_set {xxxx_libs_min} \
-rc_corner {xxxx_rc_corner}
create_delay_corner -name xxxx_corner_max \
-library_set {xxxx_libs_max} \
-rc_corner {xxxx_rc_corner}#创建 Constrain Mode,读入时序约束文件(.sdc)create_constraint_mode -name common \
-sdc_files {xxxx.sdc}#创建 Setup 分析和 Hold 分析的 Analysis View,它 是Constrain Mode 和 Delay Corner 的组合:create_analysis_view -name xxxx_view_hold \
-constraint_mode {common} \
-delay_corner {xxxx_corner_min}
create_analysis_view -name xxxx_view_setup \
-constraint_mode {common} \
-delay_corner {xxxx_corner_max}#指定进行 Setup/Hold 分析和优化的 Analysis View:set_analysis_view -setup {xxxx_view_setup} \
-hold {xxxx_view_hold}

参考

  1. https://cloud.tencent.com/developer/article/1734394
  2. https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzIyMjc3MDU5Mw==&action=getalbum&album_id=1406625995842748420&scene=173&from_msgid=2247491067&from_itemidx=1&count=3&nolastread=1#wechat_redirect

Innovus——数据准备和验证相关推荐

  1. 独家 | 一文读懂数据质量和验证检查(附代码)

    作者:Vinod Kumar 翻译:季洋 校对:王雨桐 本文约1600字,建议阅读8分钟. 本文主要讲述关于数据质量和验证检查的实例,以及运用Apache Spark和Scala采用编码来确保数据质量 ...

  2. MVC5 数据注解和验证

    ①利用数据注解进行验证 ②创建自定义的验证逻辑 ③模型元数据注解的用法 ①先创建数据源 1,创建我们的Model  Order 2,创建控制器带EF 选择模型为Order 当你运行的时候会报错,需要代 ...

  3. LightSwitch 2011 数据字段唯一性验证方案

    LightSwitch 2011 数据字段唯一性验证方案 验证单表数据的某个字段不能输入重复值 设置实体字段唯一索引 如果不写代码,那么验证只会在用户提交[保存]数据后,会提示错误,很明显这样的用户体 ...

  4. SLCP验厂辅导,SLCP数据收集和验证工具整合成在线格式的托管平台来完成

    SLCP是独立于SAC的另外一个机构,但是SLCP和SAC之间又有密切的合作关系.SLCP本身只是一个行业标准,但是SLCP没有开发自己的IT平台,也没有自己的对验证机构的认可/授信团队,所以他们寻求 ...

  5. 大话卫星导航中的信号处理系列文章——GPS信号L1频点的中频数据生成与验证

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 大话卫星导航中的信号处理系列文章--GPS信号L1频点的中频数据生成与验证 需求 扩频码的生成 其他 验证 需求 这篇文章,主要记录我 ...

  6. 数据的正态分布验证和方差齐性检验

    在对数据进行统计分析之前,应该先查看数据的特征,然后根据其特征选择分析方法. 很多统计假设方法要求数据是符合正态分布的和方差齐性. 1.数据的正态分布验证: 夏皮罗-威尔克(Shapiro-Wilk) ...

  7. EXCEL规范数据输入教程-验证身份证号

    EXCEL日常工作中经常会输入身份证号码,一不小心就可能出错,今天大飞老师就分享这样一个示例EXCEL规范数据输入教程-验证身份证号. 我们首先要保证在EXCEL中能正确输入身份证号码(PS:身份证号 ...

  8. ASP.NET 使用RegularExpressionValidator控件(数据输入格式验证)

    ASP.NET使用RegularExpressionValidator控件(数据输入格式验证)RegularExpressionValidator控件用于验证输入表单字段的值是否与某个正则表达式所定义 ...

  9. 验证客户端和服务端可以传输经SM4加密的密文数据,从而验证发送数据已使用服务器密码机进行SM4加密,而不是随便的字符串乱码

    前提操作 搭建客户端和服务端  Socket代码实现服务端 和 客户端之间通信_CHYabc123456hh的博客-CSDN博客 使用wireshark进行数据的监听和测试https://blog.c ...

最新文章

  1. PHP 取302跳转后真实 URL 的两种方法
  2. python在中小学教学中的应用-中小学Python编程语言教学
  3. Linux安装及管理程序——RPM和yum学会装软件超简单
  4. VSFTP服务--Linux学习笔记
  5. (转)BCG出品史上最全Fintech-金融科技-发展趋势报告
  6. H3CNE实验:Comware基本命令操作
  7. 如何在EDEM中添加颗粒的bond
  8. 银行业数据安全建设要点分析2022
  9. 游戏建模教程:肌肉建模丨人体比例及肌肉骨骼介绍
  10. elasticsearch问题: SERVICE_UNAVAILABLE/1/state not recovered /initialized
  11. 18:(基于对抗的学习)Learning a Self-Expressive Network for Subspace Clustering
  12. ant-design-pro跨域问题
  13. 软件企业认定的标准要求
  14. 汽车功能安全(一)~笔记
  15. 数据同步工具的研究(实时)
  16. 您有一篇Maven 常用命令的文章,请注意查收!
  17. 湖南对口计算机专业综合试题答案,湖南对口高考计算机专业综合试题汇总.doc...
  18. Sql Server 系统的存储过程
  19. 智慧城市升级版已来 | 城市大脑建设标准十大原则
  20. 关键词优化系统|智能优化「白狐公羊seo」

热门文章

  1. java判断图片相同_java 识别图片相似度及图片是否相同
  2. CSS中英文换行问题
  3. CToolBar的使用总结(1)
  4. assert()使用
  5. 前端如何保存图片?并在相册中查看。
  6. 推荐一个好用的OKR工具
  7. 6.1. Meanshift和Camshift
  8. 5 python数据分析基础——批量进行数据分析(一)
  9. 差错控制之检错编码与纠错编码
  10. 概率论与数理统计:随机变量、分布律,分布函数,密度函数