前言
从事DRC已经满两年了,这两年里,或多或少通过case接触过不少的calibre command,但限制于manager安排的case,以及现在越来越成熟的reference,macro,tabulation,自己能动手写calibre command的能力稍显不足。
这次以初学者角度重新go through一遍所有常见的calibre command。
本次所用的环境如下:
- 1. Calibre Version : 2020.3
- 2. Virtuoso : 6.1.8
- 3. Test Deck : N65 deck from 咸鱼(不知道T家的PDK是怎么泄露出去的,咸鱼上一抓一大把😨)
- 4. TF,Map file : N65 from 咸鱼
什么是SVRF语言?
SVRF 指标准验证规则格式(Standard Verification Rule Format),它是一种用于描述芯片设计规则的语言。
既然是一种程序语言,那就离不开词法,语法与语义设计;数据类型和操作设计;安全性和兼容性设计;执行效率等等。最重要的是面向的客户和群体,如果是程序员高手,他能用汇编给你写出DRC,次一点的也可以用各种程序语言加各种library 完成,但如果是毫无编程经验的人,一群材料、化学、物理专业组成的用户群体,就不可避免要考虑语言的可解释性,简易性和灵活性。
举个栗子:
比如,有这样一条rule,假设有GDSII 文件:
Rule name | Rule description | Op | Value |
OD.S.1 | Space | >= | 1.0 |
如果我要用C++ /Python 实现,那要怎么做呢,比如我可以使用OpenCV 或者OpenGL 等图形库,处理对应的GDSII,来获取OD图形的每一个顶点,要自定义edge对象,然后判断edge与edge之间的笛卡尔距离。这样你可能要自己去写一堆封装库,大大的提高了DRC的入门门槛🤡。
但是我如果使用Calibre, mentor已经帮我封装好了一个command:External
其实从Usage 可以看出,这里有使用封装,多态和重载等OOP方法(我严重怀疑SVRF的大部分内核实现就是C/C++)。使用这个command,你只需要知道:
- 输入是什么(layer,edge,polygon,point)
- 输入的数量
- 可选的关键参数等
- 输出是什么
那么,可以很快的写出这条Rule:
OD.S.1 { @ Space >= 1.0
EXT OD < 1.0 ABUT < 90 OPPOSITE REGION
}
通过这里可以发现,SVRF 和我们通常使用的C++/Python 有一点区别,把各种复杂的程序逻辑简化为一个一个module,用户只需要知道输入是什么,需要查什么,输出是什么,可以快速的构建语法块来达成目的,不需要考虑任何程序框架,繁琐的语法和语义。
这或许就是面向需求编程(ORP)吧🤡。这就有点类似于我通过PyQt或者Delphi 实现一个界面,上面有一些button,lineedit,tableview,你莫管他具体怎么实现,直接designer上拖拖拽拽就可以搭出GUI。
后记
鄙人会一点点python,java,c,最开始学习calibre时,总感觉有点云里雾里,学起来也不通透,后来才发现这些具体的command 和keyword 要结合具体的case 才能搞明白,因为case 里面总有客户的奇奇怪怪要求。
前人栽树,后人乘凉,只有感激和敬畏。