单元库质量验证方法之compare library
点击上面“蓝字”关注我们!
曾经看过一个帖子,有人问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相关推荐
- java调用so库中的native方法_Java如何调用本地.so库里的方法
首先在此之前希望你已经掌握了基本JNI常识的运用,比如Java代码如何调用本地native的方法,native方法如何访问本地变量,本地方法等以及其他相关的基础知识.在此我还是贴上Activity的部 ...
- 德巴赫猜想python_哥德巴赫猜想问题基于Python的验证方法研究
1.概述 Python语言[1,2]是一门面向对象的解释型高级程序设计语言,其不仅开源,而且支持命令式编程,包含丰富且易理解的标准库和扩展库,可以快速生成程序的原型,帮助开发者高效地完成任务.同时,P ...
- 基于Flink的实时数据消费应用、功能质量保障方法
前言:由于最近公司的实时数据处理引擎再向Flink迁移,所以专门设计.总结了一篇"基于Flink的实时数据消费应用.功能质量保障方法".欢迎大家一起分享探讨在大数据方面的测试方法和 ...
- python图像融合算法_图像融合质量评价方法的python代码实现——MS-SSIM
图像融合质量评价方法的python代码实现--MS-SSIM 图像融合质量评价方法的python代码实现--MS-SSIM 文章目录 1 前言 2 MS-SSIM介绍 2 MS-SSIM的代码 2.1 ...
- php volist中作判断,ThinkPHP模板中判断volist循环的最后一条记录的验证方法
ThinkPHP模板中判断volist循环的最后一条记录的验证方法 对于用过smarty做过php开发的朋友来说,应该都知道在smarty模板里面判断foreach循环是否是最后一个可以用$smart ...
- 双向长短期记忆网络模型_基于深度双向长短期记忆网络的空气质量预测方法与流程...
[技术领域] 本发明涉及一种基于深度双向长短期记忆网络的空气质量预测方法,属于空气污染预测领域. 背景技术: 空气污染物浓度的预测拥有很强的学科交叉性,一直是环境.气象.数学.地理及计算机科学领域研究 ...
- 基于kali2020环境,熟悉数据库服务的部署及基本验证方法及访问数据库
1.1 问题 本例要求基于kali2020环境,熟悉数据库服务的部署及基本验证方法,完成下列任务: 1)在kali2020上启用mysql服务,并设置开机自启 2)完成初始安全设置,将管理密码设为12 ...
- 半导体MPW、PCM、WAT、单元库设计
1.什么是集成电路设计? 集成电路设计简单的说就是设计硬件电路.设计集成电路时,设计者首先根据对电路性能和功能的要求提出设计构思.然后将这样一个构思逐步细化,利用电子设计自动化软件实现具有这些性能和功 ...
- 六个最佳的软件工程实践(持续的质量验证、变更管理)
昨天图文介绍了基于构件的体系结构以及可视化建模,今天我们介绍六个最佳工程实践的最后两个,持续的质量验证以及变更管理.持续的质量验证是伴随迭代化开发而进行的不断验证,且每次迭代的测试集合都是不断递增的. ...
最新文章
- adobexd怎么录屏_请问如何使用Adobe XD制作应用动效?
- java线程系列---类中的定时器Timer
- web项目打包到上线教程_手把手教你在 IntelliJ IDEA 中部署 Web 项目
- leetcode 523. 连续的子数组和
- Go语言channel与select原理
- python从csv中读取数据打印到屏幕上-从Python中的CSV文件读取数据
- TensorFlow tf.keras.layers.TimeDistributed
- L2-001. 紧急救援-PAT团体程序设计天梯赛GPLT(Dijkstra算法)
- SuperMap GIS 10i软件概览
- 稀奇古怪--JAVA篇
- 凉凉!Tumblr 或被 300 万贱卖
- 爬取智联招聘(搜索含关键词职位)
- 一个神奇的测试_神奇的心理测试:一个问题就能测试出你的情商!超准慎测
- 什么是CDN什么是高防CDN
- PC版淘宝UWP揭秘
- c语言计算机二级考试内容,2018年全国计算机二级C语言考试考什么内容
- Zxing 识别反色二维码
- 折叠屏手机阵亡,三星的手机梦会不会被彻底折叠?
- Navicat连接Linux系统MySQL
- 深入JVM 对象优先在Eden分配