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

使用Calibre对GDS进行数据遍历

在芯片的GDS数据里,使用Calibre对数据进行处理是非常常见的操作,但是GDS是一种和常规设计结构不太一样的一种数据,这里,通过这个小小的科普文章,一起看看怎么样在GDS里边做数据漫游吧!闲言少叙,ICer GO!

在这里插入图片描述

Verilog-like 数据结构

在芯片设计的世界中常用的数据结构就是verilog类型的了,通常是由module(设计)和instance(例化)组成,这样通过对module的不断instance,就可以形成一个层次化(hierarchy)的完整设计,在EDA工具里边,不同家对verilog有自己的独特的命名定义

  • S家
    • module:design/ref_name
    • instance:cell/leaf_cell
  • C家
    • module:cell/ref_lib_cell_name
    • instance:insts/Hinsts

基本在工作中,用上述的名词,就可以完成对verilog-like的数据进行准确的描述。

GDS-like 数据结构

对于GDS数据,由于其添加了很多的物理信息,所以这个数据结构和verilog-like相比,有其特殊性,基于常用的Calibre系列工具,它的数据命名大概类似如下:

基础元素(base element)

  • top-cell:当前GDS的顶层设计(top-design),类似verilog里的current_design
  • cell:数据库所有的设计,相当于verilog里的module,cell本层可以包含下列的实际结构,可以简单的理解为leaf-instance
    • poly/wire:指定cell下的metal 类型,可以是任何层的物理图案,会出现在最后的wafer上,PS:需要mask的支持
    • text:指定cell下的text,只是字符描述,不会出现在最后的wafer上,PS:常见的芯片logo等字符,其实是用某一层的polygon实现的
    • Via:一个完整的VIA是包含cut、upper和lower layer的,这个不是单纯的metal/text,所以在GDS里边,这个被归为cell*
  • ref:指定cell所使用的设计,
    • 如果只有名称,那么可以理解为verilog里的module
    • 如果具备了名称和物理信息,那么可以理解为verilog里的instance。
    • 支持嵌套调用
    • 不支持hierarchy design(ref)

可以看到,整个GDS的主要结构还是仿效verilog-like,但是由于都是基于实际的物理设计,所以对于instance和hierarchy做了一些简化处理。cell/ref可能灵活切换,取决于用户看数据的层级/角度。

  • Cell/ref

在这里插入图片描述

  • Poly/text

在这里插入图片描述

在这里插入图片描述

具备了上述的数据定义知识,用户就可以通过calibredrv里边提供的命令完成数据的抽取和遍历了。

注意:calibredrv命令默认返回的信息都是去重的(unique ),除非特殊声明

GDS 数据遍历

Calibre的家族可谓博大精深,根据用途,一般可以分为两类

  • 对GDS的查看(GUI)和数据遍历:calibredrv系统,启动命令:calibredrv
  • 对GDS的进行静态规则检查(DRC/LVS etc.):calibre系统,启动命令:calibre

这里,使用calibredrv -shell命令,就可以启动calibredrv的命令行模式了,这个时候并不会弹出calibre的GUI,只有一个提示符。

这个也是一个TCL命令接口(PS:这个TCL接口比较古早,不支持命令自动补全 auto-complete,可能对于用惯S家/C家的用户,还是有一些不太习惯。

加载一个GDS文件
set L [layout create BIST.gds -dt_expand] 

这里的L是GDS创建后的文件句柄,后面所有的操作,都需要借助这个句柄。

  1. 获取当前设计(top-cell)
$L topcell

在这里插入图片描述

这个GDS的顶层只有一个就是BIST,当然Calibre也支持多个top-cell的GDS数据,但是这个违背了层次化设计规则,建议所有的GDS都有且只有一个topcell

  1. 罗列出所有的cell(唯一化过的)
$L cells

在这里插入图片描述

这里的返回并没有排序,也没有上下级关系,有点类似于get_designs这类命令。

  1. 罗列出指定cell下的第一层引用(ref)

对所有当前层次(cell)下的所有leaf(包含ref)进行罗列,

在这里插入图片描述

结合下面的截图,可以看到,只有第一层的高亮ref被返回,所以,类似verilog下的get_cells命令:

在这里插入图片描述

  1. 对于指定ref,查看在当前设计(top-cell)被引用了多少次

这个例子表明了nand_4p在整个BIST设计下,被例化的16次,每次例化都有不同的物理坐标信息,尽管设计内容是一样的:

在这里插入图片描述

所以类似的,在当前top-cell下,top-cell(BIST),并没有被例化过任何一次,这个和verilog里的current_design的道理是类似的。

在这里插入图片描述

  1. 获取指定cell下的所有和具体inst和inst数量
  • 获取指定cell下的具体inst
$L iterarot ref $cell

在这里插入图片描述

这里返回的是ref以及具体的坐标等信息,这个就是上文说GDS里边例化(instance)了

具体的返回信息解释如下:

在这里插入图片描述

  • 获取指定cell的所有inst数量

    方法一: $L refcount -parent nand_4p

在这里插入图片描述

​ 方法二:llength [$L iterarot ref $cell]

在这里插入图片描述

这个命令是得到了指定cell下的所有子inst,这个和比children(只打印第一层)有如下区别:

​ - Children只输出第一层的ref,iterator则包含了所有层次的 ref

​ - Children的输出是uniq 后的ref信息

​ - Iterator 则是inst的信息

  • 获取指定cell下的所有poly
$L iterator poly $cell $layer_list range 0 n

在这里插入图片描述

返回值的说明:

在这里插入图片描述

所以,可以看到,是一个水平走线的一段metal

  • 获取指定cell下的所有text
$L iterator text $cell $layer_list range 0 n

在这里插入图片描述

返回值的说明:

在这里插入图片描述

【敲黑板划重点】

image-20240503184222477

通过上述讲解,用户基本上可以通过命令模式,遍历出GDS里边的所有类型的数据,这个对于GDS的信息抓取或者数据比对有很好的参考作用,如果加以灵活运用,对于一些之前需要在APR里边生成的信息,可以在完整的GDS里边实现了,譬如:单孔的检查,metal的面积/密度统计,layer信息的抽取等等,通过Calibre,可以给后端工程师提供更多维度的数据评判和比对。

参考资料

Mentor Calibre® DESIGNrev™ Reference Manual

相关文章:

  • Qt 收藏夹书签管理
  • 【区块链】区块链交易(Transaction)之nonce
  • 有理函数积分——分式分解时设分解式的规则
  • 前端打印计算单位 cm、mm、px
  • Java锁机制知识点
  • phpstudy 可以按照mysql 数据库
  • 实现一个AI大模型当前都无法正确实现的基础二叉树读取算法
  • 【Java--SQL】${}与#{}区别和危害
  • 【转】PostgreSql的镜像地址
  • 连点成画面积计算算法
  • 一文读懂Kubernetes(K8s)
  • 基于多径信道的分集接收技术性能优化与仿真分析
  • c++ std::initializer_list
  • 【数据标注师】关键点标注
  • ORB-SLAM + D435i提取相机位姿 + ROS发布
  • kde截图工具报错
  • 星际争霸数据集指南
  • YAML:C++配置文件如使用(socket为例)?
  • STM32[笔记]--7.MDK5调试功能
  • STM32F407控制单个张大头闭环步进电机讲解与梯形加减速(HAL库)