当前位置: 首页 > news >正文

PERC初探暨小试牛刀

早在2010年,Mentor Graphics明确将Calibre PERC定位为“最完整可程序电子规则检查工具”,此声明预示着PERC已经完成开发并投入市厂。时至今日,PERC已经走过了15年的历程,并且已经深入到众多工艺节点,尤其是一些复杂的工艺节点,这里用一篇小文章,抛砖引玉,一起来认识这个正值青春少年的精神小伙:PERC。闲话少叙,ICer GO!
在这里插入图片描述

什么是PERC(What)

Calibre PERC(Programmable Electrical Rules Checking)是传统的ERC检查的升级版本,基于ERC的原理,裹胁着插上了可编程(programmable)的翅膀。在传统基本的ERC检查基础上,提供了更加丰富多彩的客制化检查方法。

为何要使用PERC(Why)

芯片的规模成几何级数级别增长,更多复杂的设计被导入,同时芯片的生产/制造的成本越来越高,芯片的检查更加需要格外注意(成本和时效性的要求),必要的甚至是一些激进的检查都慢慢映入芯片签收的事业。对于基于GDS结果的PERC静态检查,可以从电气特性和电路特征的维度入手,用户撰写一些ERC规则,可以很好的其甄别出,最终TO GDS数据库的电气问题,从而有助于提升芯片设计质量。

何时使用PERC(When)

和常规的TO类似,PERC属于LV signoff的一部分,但是由于很多的PERC都是用户自己撰写的,FAB并不会做强制。但是用户出于对自己设计的理解,作为内部的TO signoff,还是需要做到合并到芯片的TO LV checklist里边的。考虑到项目的继承性和延续性,PERC的脚本可以不断地加强和完善,用户的每一次TO都会无形中多了更安全的一层检查,对于项目的质量一定会有相当的把控。所以:TO的时候,是需要完成既定的PERC检查的

PERC的使用场景(Where)

基于PERC和IC设计的基础理论,PERC通常可以在以下的场景里边使用

  • 基于source:
    • ESD结构检查
    • EOS检查
    • Multiple power domains check
  • 基于layout:
    • Point-to-Point resistance
    • Current Density (CD)
    • Voltage-Dependent DRC
    • Hot gate/diffusion identification
    • Layer extension/coverage
    • Device matching

以上都是基于检查场景的分类,从PERC的运转流程上看,无论是source还是layout,在Calibre里边都会转换成spice netlist(PS:常见的LVS也是如此),然后工具基于对spice netlist的读取,执行PERC的rule进行相关项目的检查。这种静态的分析方法是基于电气特性,对于特征电路结构进行的分析,对于IP设计或者全芯片的特定检查目标,都有非常好的效果。(PS:可以理解,PERC之于GDS,犹如STA之于网表/SDF

PERC的终端用户(Who)

鉴于PERC的强大静态分析功能,在芯片的设计中,通常需要以下的工程人员注意:

  • 设计人员:

    • 模拟设计:IP设计级别
    • 芯片LV签收人员(chip sigoff):全芯片级别,此处强调IO和全局连接的影响
  • FAB RSF维护人员:提供基于自家工艺节点的PERC常规检查。譬如

    • P2P
    • IO PG cell distance check etc.

PS:和常规的静态LV检查类似,工程人员对于FAB的PERC检查文件,是需要逐级,逐步收敛的。

如何使用PERC进行检查(How)

对于传统的LVS/DRC/ERC,大部分情况下,终端用户只是把FAB的LVS/DRC/ERC 的RSF文件,进行简单的配置(如版层,是否full-chip,top-desig等),然后就可以直接用了。丹斯无论是那种检查,其核心的语法都是基于Calibre的SVRF (Standard Verification Rule Format)语法。

同样的,PERC也是基于SVRF语法实现的,由于PERC可编程的特性,基本是需要用户自己去进行实际编写的。所以用户需要熟悉SVRF的一些基本语法。

PS:由于PERC是基于电气性能和拓扑连接的分析,PERC和LVS有很多共同之处,这个后面会做介绍。

但是由于SVRF这套语法缺乏灵活的控制和判断结构,所以为了适应PERC可编程的要求,Calibre提供了一套TVF ( Tcl Verification Format )机制,这个可以视为是SVRF语境下的一个内嵌语法(native),可以通过一定的提示词在SVRF调用TVF。由于这个内嵌语法系统是Tcl-based的原因,对于PERC来讲,这样就打通了TCL脚本和SVRF的最后一道屏障。

所以,具备下列条件的工程人员就可以完成PERC检查规则的编写:

  • 电路设计的结构基本原理:ESD结构,模拟连接拓扑结构等
  • LVS和ERC检查规则和原理。
  • TCL语法知识
  • spice语法基础

由此可见,PERC对工程人员的要求比较多,对模拟,tooling以及TCL 编程等都是要有一定熟悉的。当然,并不是说不同时具备上述要求的工程人员是无法完成PERC的规则编写的,相反,PERC提供了一个非常好的思维角度,不同工作范畴的人员,在进行紧密的沟通后,通过相互学习和借鉴,出具一套系统级别的PERC检查规则,这种先进的检查方式必然可以有效提升芯片的整体设计质量。

PERC rule介绍

基于上述介绍,PERC需要一定的组织结构,才能将上述特性实现出来,所以,这里需要先简单的介绍以下PERC rule的基本结构

PERC rule的基本结构

如上述PERC是一种类似LVS的电气特性检查,所以一个完整的rule需要下列元素

  • 输入数据的类型、路径、顶层设计(topcell),SVDB等声明:和LVS一样的声明手段
  • PERC的属性配置:PERC起头的专属配置,(PS:以PERC为前缀,和LVS/DRC等命令加以区别
  • PERC的具体规则配置:TVF格式的检查规则撰写,以perc::*命令为主进行构建。(PS:需要提前加载指定的的Calibre PERC package

PERC rule的运行

和其他的静态LV检查类似,Calibre提供了专属的PERC运行命令,类似于LVS/DRC,PERC可以分为hierarchy和flatten两种方式进行运行

从PERC的运行机理上看,PERC可以对电路结构,以及基于电路结构的和电气特性对电路进行分析。这样会诞生两种不同的检查方式。

  • hierarchy mode

    # shell
    calibre -hier [-hcell hcell.list] -perc perc.rule |& tee perc.hier.log
    
  • flatten mode

    # shell
    calibre -perc perc.rule |& tee perc.hier.log
    

和LVS/DRC类似,不同模式下的结果可能会出现差异。只是维度问题,并非结果分歧。

基于PERC的机理,PERC是针对spice netlist的分析,可以提供电气连接上的分析(类似LVS),同时也可以提供spice topology的拓扑的分析。这里结合上述讲解,分别对两种分析逐一做以介绍。

基于电气特性的PERC分析

  1. 配置SOURCE:
  • SOURCE 的文件路径
  • SOURCE 的顶层设计
  • SOURCE 的文件系统,通常为spice

在这里插入图片描述

  • 配置SVDB:(Standard Verification Database Directory

在这里插入图片描述

  1. PERC专属配置:

在这里插入图片描述

  • PERC 数据输入源类型选择:SOURCE | LAYOUT

  • PERC的报告路径

  • PERC对device的属性声明 (可选)

    • 语法:PERC PROPERTY device_abber device_property
    • 默认PERC不会记录跟着任何器件的属性,除非此处声明。
    • Calibre结合spice的语法,将device做了一下分类(节选):

    在这里插入图片描述

    device对应的属性,有如下的规定(节选):

    在这里插入图片描述

    用户需要结合自己PERC rule的需求来配置相应的device property。

  • 选取PERC具体的规则检查

    语法:PERC LOAD TVF_function INIT init_proc SELECT check_proc

如前述,PERC的检查规则都写入到TVF的function内,PERC针对一个完整的TVF function,对其中的不同的proc进行选取。

INIT字段是对数据库的初始化进程,SELECT是对数据的进一步检查进程。INIT是可选项,但是PERC提供了大量的给init使用的命令,可以有效地对设计数据进行规范,譬如:net,device等的客制化定义。用户有了这些定义后,对于后面的检查会比较方便,如果没有这些定义,后期的cehck_proc可能会缺失一个合适的起点数据。

按照PERC运行机制,PERC启动的第一个动作就是做INIT,而后基于INIT的结果,再使用check_proc做具体检查。

  • TVF的PERC规则描述

在这里插入图片描述

TVF section声明语法:

TVF FUNCTION func_name [/*# tcl commandpackage require CalibreLVS_PERCproc init {} {……}proc check_proc {} {……}
*/]

使用TVF function声明,指引PERC对于其中的语句使用TCL parser进行处理,结合导入的TCL package: CalibreLVS_PERC,TVF里边的所有TCL命令都可以调用perc:😗 命令进行处理。

  • Init proc: esd_init

这里使用了esd_init来对数据进行初始化,这里的命令对PG,port等三类net进行归类,加之net path声明,所有穿越R的net也可以继承port上的net 名称。

  • check proc: rule_1

这个proc对于init后的数据进行处理,这里的proc并没有给出argu,可以理解为,在esd_init运行完,就会去运行rule_1的proc,查验符合条件的device,如果这个device具备下列属性

pmos或者nmos类型
mos的gate连接到了非PG的port上

基于net path机理:如果这个net 没有穿越任何R,或者穿越的R对于的电阻小于200 ohm,都属于连接到非PG的port上net(Pad),详见下图:

在这里插入图片描述

  • 无论是Pad net还是Pad net(net path)都是被考察的对象
  • X1的mos到Pad net有200的电阻
  • X2的mos到Pad net有50的电阻
  • X3的mos到Pad net没有电阻

所以最后的结果是:X2和X3的device符合PERC的检查规则,PERC以CHECK FAILED结果报告出来,汇总在perc.rep

在这里插入图片描述

PS:这里返回的C2(X2)和C3(X3),因为目前是hierarchy的模式,所以就报告在了hcell C2和C3上了。

此外,用户需要理解,PERC本质上还是对于spice的数据进行各项的查验。这个和Calibre直接对GDS进行数据遍历的DRV是不一样的:DRV主要是基于GDS的物理数据结构进行遍历,两者的命令方式也不尽相同:一个是重点是静态分析,一个则侧重在交互处理。

基于电路结构的PERC分析

如上描述,PERC可以将spice的整体读入,使用PERC对spice分析本身就是一件手到擒来的事情。譬如:针对std-cell的spice/cdl,对每一个cell,进行device的用量统计。

对于std-cell的设计,通常而言只会存在mos结构:PMOS和NMOS,(PS:diode 例外)但是用户一般很难从GDS/lib中感受到每一个stdcell的mos用量,尤其是常见的同样功能,但是驱动能力不同的差异;抑或是不同工艺库,在同样驱动下,其设计上的mos管子数量是否有做过优化等。这个看起来比较麻烦的事情(std-cell 数量比较多),对于PERC而言,一个TVF function就可以很好的解决。

解题思路

  • 使用hierarchy模式,同时给入hcell list,确保每个stdcell都会被覆盖到
  • 每个std-cell只会用到两种mos,但是pmos和nmos数量并不会一样,很多时候是驱动的考量。(PS:由于pmos和nmos天然的特性,为了维持一致的驱动力,往往pmos会比nmos用量更多一些,最小驱动除外,这个从报告中也可见一斑。

PERC的检查规则如下

在这里插入图片描述

  • SOURCE声明:

    • SYSTEM: spice
    • PATH和PRIMARY:使用env进行传递。使用可配置思路可以方便指定spice
  • PERC声明:

    • 使用SOURCE 作为输入

    • 加载TVF function: perc_lib

  • INIT:跳过

  • Check rule:check_device (TCL proc)。具体涉及到的命令

    	perc::get_cellsperc::get_nameperc::get_placementsperc::get_instancesperc::typeperc::subtypeperc::inc
    

最终报告

在这里插入图片描述

通过这个表单,用户可以快速获取所有std-cell的pmos、nmos以及other device 的数量,从而可以对std-cell的设计规模有一定的显性的了解。PS:PERC命令效率非常高,秒级速率
具体的脚本不在这里赘述,有兴趣的同学请移步知识星球下载试用。

【敲黑板划重点】

image-20240503184222477
PERC是一个高效的静态检查手段,用惯了FAB的RSF的同学,可以尝试一下这个SVRF/TVF组合而成的高级检查手段,这年头,如果是能写几个PERC的童鞋,那放到哪里都是能吹上一吹的。(*^_^*)

参考资料

Mentor Calibre® PERC™ User’s Manual
Mentor Standard Verification Rule Format (SVRF) Manual

http://www.dtcms.com/a/332044.html

相关文章:

  • Vue3 vxeTree树形组件完全指南:从入门到精通的完整使用教程
  • QT6(可视化UI设计代码实现)
  • MATLAB实现图像增强(直方图均衡化)
  • 数学分析| 极限论| 1.数列极限常用方法总结
  • App冷启动阶段Open Dexfiles实现原理【ART虚拟机系列2】
  • docker nginx 定时脚本保存30天日志信息
  • MFC的使用——使用ChartCtrl绘制曲线
  • 2025.8.13~14 实习总结
  • 计算机网络技术学习-day1《网络乾坤:从比特洪流到协议星河的奇幻之旅》​
  • MCU中的LTDC(LCD-TFT Display Controller)
  • 网卡聚合teamdctl
  • 大模型技术栈全景
  • Java 图片像素碰撞检测
  • Linux软件编程-进程(1)
  • 【嵌入式C语言】四
  • 【PCB设计经验】3D模型在线预览!效率便捷!
  • pycharm远程连接服务器跑实验详细操作
  • ClickHouse 日常运维命令总结
  • 并发编程原理与实战(二十三)StampedLock应用实战与其他锁性能对比分析
  • CentOS7系统负载异常飙高全链路分析详细指南
  • Kaggle赛题分析1:Elo用户忠诚度评分预测(2)-特征工程与模型训练
  • 解决Python环境混乱问题
  • 【159页PPT】智慧方案企业数字化转型流程体系建设与运营方案(附下载方式)
  • 鸿蒙应用开发实战:模块内页面路由与Navigation导航详解
  • 深入理解提示词工程:从入门到精通的AI对话艺术
  • 零基础-动手学深度学习-10.3. 注意力评分函数
  • [vibe coding-lovable]lovable是不是ai界的复制忍者卡卡西?
  • 《零基础入门AI:深度学习中的视觉处理(卷积神经网络(CNN)进阶)》
  • 光猫 SK-D840N 获取管理员密码和登录Telnet简记
  • 如何永久修改开发板的时间(重启开发板也不会失效)