点击上面“蓝字”关注我们!

曾经看过一个帖子,有人问K库的痛点在哪里?部分回帖提到了lib的验证,怎么验证我们做出来的库。lib验证是单元库建库不可缺少的一环,关系到整个单元库的质量。

SiliconSmart提供了一套完善的单元库验证流程,主要包括三块内容:compare_library比较两套lib文件的差异;qualify_library验证lib文件的质量;HDL(Verilog)验证。

这篇推文着重介绍compare_library

既然compare_library是单元库质量验证中的一个必要环节,那么什么时候需要用到?Compare library在re-characterization中应用最为广泛,用来验证我们re-char出来的lib跟reference lib相比,结构是否一致,有无attribute丢失,table数值是否有较大的差异等等。

Compare library的基本命令很简单:

compare_library -reference reference.lib -test test.lib

以上命令会比较test.lib与reference.lib的结构是否匹配,包括group,attributes,whens,但是这个命令不会比较table的数值。比较的结果会存放在当前工作目录下的compare_library文件夹下。可以使用-output_dir这个option来指定不同的存放路径。

那么如果需要比较table的数值呢?其实很简单,加一个-value的option就可以:

compare_library -reference reference.lib -test test.lib -value

运行结束后会得到一个summary,你可以从summary.log里查看相应的结果。

如果你想看更加细节的数据,比如所有points的比较结果,这些数据放在.csv文件里,你可以进去查看。每一种meas类型都有对应的.csv文件,如delay,slew,energy,setup,hold等等。默认只列出比较结果为fail的点,如果需要所有点的比较结果,可以使用-all_points这个option。建议加上-tsv这个option,能使数据排列更整齐易读。

下面介绍几个常见并且非常好用的compare_library的option

-compare_values

指定哪些group的数值需要做比较,比如我们要比较ccst,lvf这两个group的数值在reference.lib和test.lib之间的差异,命令就可以这么下:

compare_library -reference reference.lib -test test.lib -value -compare_value {ccst lvf}

-compare_template_name

默认是不比较templates的,可以通过打开-compare_template_name来比较templates:

compare_library -reference reference.lib -test test.lib -value -compare_values (ccst) -compare_template_name

-ignore

通过使用这个option来人为控制某些不需要比较的group或者attribute,如不需要比较“timing” group和“driver”相关的attribute:

compare_library -reference reference.lib -test test.lib -value -cells {INVX2} -ignore {timing *driver*}

-interpolation

当reference.lib和test.lib的index里的数值不一样的时候,我们还能不能做compare了?使用-interpolation就可以。-interpolation有三个数值,分别是0,1,2。0代表不做内插计算,只有在table的size完全一致,并且数值的偏差小于某一个确定的tolerance的情况下才会做比较;1代表只做线性内插计算,不做外插计算;2代表即会做内插计算又会做外插计算。

compare_library -reference reference.lib -test test.lib -value -interpolation 1

SiS有一个参数compare_library_interpolation的作用跟这个option类似,一旦用了-interpolation这个option,那么compare_library_interpolation会自动失效。

这里还要注意一点,-interpolation只针对1D,2D的table,3D的table不支持,也就是说如果要做3D的table的数值比较,两个lib的index必须要相同。

-user_defined

SiS默认是不比较user_defined相关的attribute的,必须打开-user_defined option才能比较。这里需要提醒大家的是,ECSM相关的group目前是被当作user_defined的,因此如果要比较ECSM相关的内容,不要忘了打开-user_defined这个option。

compare_library -reference reference.lib -test test.lib -user_defined

-ee_cells

如果两个lib里有几个cell类似,但是名字不同,能比较吗?可以,用-ee_cells列出需要配对比较的cell的名字:

compare_library -reference reference.lib -test test.lib -ee_cells {AND2X1 ANDP2X1}

-tolerance_guide

这个option也比较好用,它能告诉你设置不同的tolerance,比较出来结果的不同通过率(pass-rates),让用户对趋势有个大致的了解。

compare_library -reference reference.lib -test test.lib -value -tolerance_guide

支持GUI

Compare_library是支持GUI的,关于GUI的用法,后面打算专门推文详细介绍。

 

 如何设置tolerance

首先,可以使用-tolerance开关来查看当前默认的tolerance:

compare_library -tolerance

如果需要调整当前的tolerance,可以使用set_config_opt命令,如:

set_config_opt delay_absolute_tolerance 0.0005 (单位是lib里对应的单位)

set_config_opt delay_relative_tolerance 0.02 (2%)

如果两个lib的误差超过了设定的tolerance,那么就会报出来。

几点建议

-  对于第一次使用compare_library,建议分成两步来做,先比较结构,再比较数值。在比较数值之前,将结构等基础问题解决好,然后再做数值上的比较。

-  对于数值的比较,建议设置合理的tolerance,不要太紧也不能太松。比如constraints,如果设置1ps的tolerance,显然就太紧了,因为constraint很难有这么高的匹配度。但是对于delay/slew,设置1ns,显然又太松了,因为delay/slew的量测很简单直接,一般设置1~5ps比较合理。

-  要注意tolerance的单位,tolerance的单位是跟着lib走的,在设置tolerance之前必须弄清楚你的lib的单位,这点很重要。

-  要注意,CCS,ECSM,LVF默认是不比较的,怎么让工具比较,上面已经提到了。

最后,祝小伙伴们使用愉快!

欢迎加入微信交流群

长按右边二维码

加我微信,拉您入群

长按二维码关注公众号

点一下"在看"再走吧

单元库质量验证方法之compare library相关推荐

  1. java调用so库中的native方法_Java如何调用本地.so库里的方法

    首先在此之前希望你已经掌握了基本JNI常识的运用,比如Java代码如何调用本地native的方法,native方法如何访问本地变量,本地方法等以及其他相关的基础知识.在此我还是贴上Activity的部 ...

  2. 德巴赫猜想python_哥德巴赫猜想问题基于Python的验证方法研究

    1.概述 Python语言[1,2]是一门面向对象的解释型高级程序设计语言,其不仅开源,而且支持命令式编程,包含丰富且易理解的标准库和扩展库,可以快速生成程序的原型,帮助开发者高效地完成任务.同时,P ...

  3. 基于Flink的实时数据消费应用、功能质量保障方法

    前言:由于最近公司的实时数据处理引擎再向Flink迁移,所以专门设计.总结了一篇"基于Flink的实时数据消费应用.功能质量保障方法".欢迎大家一起分享探讨在大数据方面的测试方法和 ...

  4. python图像融合算法_图像融合质量评价方法的python代码实现——MS-SSIM

    图像融合质量评价方法的python代码实现--MS-SSIM 图像融合质量评价方法的python代码实现--MS-SSIM 文章目录 1 前言 2 MS-SSIM介绍 2 MS-SSIM的代码 2.1 ...

  5. php volist中作判断,ThinkPHP模板中判断volist循环的最后一条记录的验证方法

    ThinkPHP模板中判断volist循环的最后一条记录的验证方法 对于用过smarty做过php开发的朋友来说,应该都知道在smarty模板里面判断foreach循环是否是最后一个可以用$smart ...

  6. 双向长短期记忆网络模型_基于深度双向长短期记忆网络的空气质量预测方法与流程...

    [技术领域] 本发明涉及一种基于深度双向长短期记忆网络的空气质量预测方法,属于空气污染预测领域. 背景技术: 空气污染物浓度的预测拥有很强的学科交叉性,一直是环境.气象.数学.地理及计算机科学领域研究 ...

  7. 基于kali2020环境,熟悉数据库服务的部署及基本验证方法及访问数据库

    1.1 问题 本例要求基于kali2020环境,熟悉数据库服务的部署及基本验证方法,完成下列任务: 1)在kali2020上启用mysql服务,并设置开机自启 2)完成初始安全设置,将管理密码设为12 ...

  8. 半导体MPW、PCM、WAT、单元库设计

    1.什么是集成电路设计? 集成电路设计简单的说就是设计硬件电路.设计集成电路时,设计者首先根据对电路性能和功能的要求提出设计构思.然后将这样一个构思逐步细化,利用电子设计自动化软件实现具有这些性能和功 ...

  9. 六个最佳的软件工程实践(持续的质量验证、变更管理)

    昨天图文介绍了基于构件的体系结构以及可视化建模,今天我们介绍六个最佳工程实践的最后两个,持续的质量验证以及变更管理.持续的质量验证是伴随迭代化开发而进行的不断验证,且每次迭代的测试集合都是不断递增的. ...

最新文章

  1. adobexd怎么录屏_请问如何使用Adobe XD制作应用动效?
  2. java线程系列---类中的定时器Timer
  3. web项目打包到上线教程_手把手教你在 IntelliJ IDEA 中部署 Web 项目
  4. leetcode 523. 连续的子数组和
  5. Go语言channel与select原理
  6. python从csv中读取数据打印到屏幕上-从Python中的CSV文件读取数据
  7. TensorFlow tf.keras.layers.TimeDistributed
  8. L2-001. 紧急救援-PAT团体程序设计天梯赛GPLT(Dijkstra算法)
  9. SuperMap GIS 10i软件概览
  10. 稀奇古怪--JAVA篇
  11. 凉凉!Tumblr 或被 300 万贱卖
  12. 爬取智联招聘(搜索含关键词职位)
  13. 一个神奇的测试_神奇的心理测试:一个问题就能测试出你的情商!超准慎测
  14. 什么是CDN什么是高防CDN
  15. PC版淘宝UWP揭秘
  16. c语言计算机二级考试内容,2018年全国计算机二级C语言考试考什么内容
  17. Zxing 识别反色二维码
  18. 折叠屏手机阵亡,三星的手机梦会不会被彻底折叠?
  19. Navicat连接Linux系统MySQL
  20. 深入JVM 对象优先在Eden分配

热门文章

  1. 马思洛需求理论与市场营销究竟是什么关系
  2. wpf 音频波形图_wpf波形图 - IT屋-程序员软件开发技术分享社区
  3. 3D数据---未来数字世界的物质基础
  4. Beta测试应用程序完整指南
  5. HTTP之URL详解
  6. Redis说无法分配内存该怎么办?
  7. cka考试指南-简单高效
  8. 解决Beyond Compare中文乱码问题
  9. 为何要使用云端ERP系统
  10. 【定位原理揭秘第四期】精准导航领域的定位技术(在高架、隧道、主辅路识别中如何实现)