当前位置: 首页 > 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

http://www.lryc.cn/news/576599.html

相关文章:

  • Note2.4 机器学习:Batch Normalization Introduction
  • 【go】初学者入门环境配置,GOPATH,GOROOT,GOCACHE,以及GoLand使用配置注意
  • LNA设计
  • 【安卓Sensor框架-1】SensorService 的启动流程
  • iOS 使用 SceneKit 实现全景图
  • MCPA2APPT:基于 A2A+MCP+ADK 的多智能体流式并发高质量 PPT 智能生成系统
  • 微处理原理与应用篇---STM32寄存器控制GPIO
  • Unity2D 街机风太空射击游戏 学习记录 #16 道具父类提取 旋涡道具
  • FPGA内部资源介绍
  • Python爬虫实战:研究sanitize库相关技术
  • 笔记07:网表的输出与导入
  • SQL关键字三分钟入门:RANK() —— 窗口函数
  • Java AI 新纪元:Spring AI 与 Spring AI Alibaba 的崛起
  • JavaScript正则表达式之正向先行断言(Positive Lookahead)深度解析
  • 第8章-财务数据
  • 某音Web端消息体ProtoBuf结构解析
  • TCP 在高速网络下的大数据量传输优化:拥塞控制、效率保障与协议演进​
  • Linux更改国内镜像源
  • InnoDB的undo日志涉及的页结构
  • C语言二级指针与多级指针
  • 国内公司把数据湖做成了数据库
  • uni-app项目实战笔记27--uniapp搜索页面的实现
  • 手势-handpose的pipeline介绍
  • nt!IoSynchronousPageWrite函数分析之atapi!IdeReadWrite----非常重要
  • 视频序列中的帧间匹配技术 FrameMatcher 详解
  • 智能制造——56页2025 智慧工厂解决方案【附全文阅读】
  • zookeeper Curator(3):Watch事件监听
  • 从单体架构到微服务:微服务架构演进与实践
  • 从台式电脑硬件架构看前后端分离开发模式
  • Spring Boot 3 多数据源改造全流程:Druid、HikariCP 与 dynamic-datasource 实战总结