GDSII是在80年代由Calma开拓的标准,所有权随着年代的推移从Calma转移到GE,再到Valid,终极到Cadence。版本虽然历经迭代更新,格式和语法没有实质的变革。GDSII一贯是集成电路布局的行业标准数据库。只管OASIS已经得到了很大的发展,但GDSII仍旧是常描述用于构建芯片物理布局的紧张格式。在某种程度上,GDSII的长生命周期既归因于其优雅的架构,也归因于其大略性。同时,弘大的遗留代码库可能也是导致切换到替代方案(如OASIS)变得缓慢的缘故原由之一。
本文通过示例描述,帮助读者快速理解GDSII格式,以及如何对GDS文件进行读写操作。
文件格式

GDSII文件格式清晰易懂,通过关键字定义文件库,构造,以及各种参数。本文着重先容其在CAD/CAE/EDA项目开拓中可能会碰着的内容。
文件标识
GDSII文件头始终以HEADER标识开头,参数包含了所利用的版本号。之后,BGNLIB记录了末了修正和末了访问文件的日期。LIBNAME记录了文档名称。之后是可选的文件头标识:REFLIBS,FONTS,ATTRTABLE,GENERATIONS,和FORMAT。文件头的末了一个标识必须是UNITS,记录单位与精度。在文件头之后是构造段。当所有信息定义完成后,文件以ENDLIB标识结束。
HEADER 600 BGNLIB 10/31/2023 14:28:48 10/31/2023 14:28:48 LIBNAME WelSim_FirstUNITS 0.001 1e-09 …ENDLIB
构造标识
每个构造都有两个头标识和一个尾标识,包围一个任意的元素列表。第一个构造头标识是BGNSTR,个中包含创建日期和末了修正日期。随后是STRNAME标识。然后,构造段处于打开状态,可以列出BOUNDARY, PATH, SREF, AREF, TEXT, NODE, BOX七种元素中的一种。构造的末了一个标识是ENDSTR。在它之后必须是另一个构造段或者是全体库的结束,ENDLIB。
BGNSTRSTRNAME...ENDSTR
BOUNDARY元素
边界元素定义了一个添补的多边形(Polygon)。它以BOUNDARY标识开头,包含可选标识ELFLAGS和PLEX,之后必须包含LAYER、DATATYPE和XY标识。LAYER标识用于定义此边界利用的层(从0到63编号)。DATATYPE标识包含不主要的信息,其参数应为零。XY标识包含从四对到200对坐标,用于定义多边形的轮廓。此标识中的点数由标识长度定义。值得把稳的是,由于边界必须是闭合的,以是第一个和末了一个坐标值必须相同。
BOUNDARY LAYER 0 DATATYPE 0 XY 0: 00: 10002000: 10002000: 00: 0ENDEL
PATH元素
路径是一种具有非零宽度的开放图形,常日用于放置导线。以PATH标识开始,然后是可选的ELFLAGS和PLEX标识。随后必须涌现LAYER标识,以识别所需的路径材料。此外,必须涌现一个DATATYPE标识和一个XY标识,以定义路径的坐标。路径中可以包含从两个到200个点。在路径规范的XY标识之前,有两个可选的标识PATHTYPE和WIDTH。PATHTYPE标识描述了路径段端点的性子。如果该值为0,段将具有在路径顶点终止的方形端点。值为1表示圆形端点,值为2表示方形端点,其端点宽度为其宽度的一半。路径的宽度由可选的WIDTH标识定义。如果宽度值为负数,那么它将独立于任何构造缩放。
PATH LAYER 1 DATATYPE 0 PATHTYPE 0 WIDTH 500 XY 0: 00: 1000020000: 018000: 150008000: 15000ENDEL
SREF元素
SREF标识表示构造体引用,通过许可构造引用涌如今其他构造中,从而实现层次。随后是可选的ELFLAGS和PLEX标识。之后SNAME记录命名所需的构造,XY标识包含单个坐标以放置此构造。在XY标识之前,可能存在可选的变换标识。如果须要构造变换,必须首先涌现STRANS标识。
BGNSTR 10/31/2023 14:28:48 10/31/2023 14:28:48 STRNAME SquareSREF SNAME CircleXY -10000: 5000ENDEL BOUNDARY LAYER 0 DATATYPE 0 XY -15000: 0-15000: 10000-5000: 10000-5000: 0-15000: 0ENDEL ENDSTR
AREF元素
除了用于单个构造的SREF,GDSII还有AREF(阵列引用)元素,它可以放置一维或二维构造阵列。这对许多包括存储器的集成电路布局非常有用。在可选的ELFLAGS和PLEX标识之后,接着是SNAME标识,用于标识被排列的构造。接下来,可选的变换标识STRANS、MAG和ANGLE标识供应了实例的方向。必须随后涌现COLROW标识,以指天命组中的列数和行数。末了一条标识是一个XY标识,包含三个点:角实例的坐标、列方向上末了一个实例的坐标、以及行方向上末了一个实例的坐标。
BGNSTR 10/31/2023 11:56:33 10/31/2023 11:56:34 STRNAME ARRAY_EXAREFSNAME WELSIM_RECTANGLE 10COLROW 5 3 XY 0: 020000: 00: -10000ENDELENDSTR
TEXT元素
可以通过TEXT标识包含在电路中。以关键字TEXT开头,之后是可选的ELFLAGS和PLEX标识,接着是必需的LAYER标识。然后必须涌现一个具有零参数的TEXTTYPE标识。可选的PRESENTATION标识指定字体。可选的PATHTYPE、WIDTH、STRANS、MAG和ANGLE标识可以调度文本。末了两个标识是必需的:一个XY标识,带有单个坐标以定位文本。一个STRING标识,用于表达实际文本。
TEXT LAYER 0 TEXTTYPE 2 PRESENTATION 0 XY 5000: 3000STRING WelSim labelENDEL
NODE元素
NODE标识可以指定电路信息。这个元素中的信息不是图形信息,不会影响制造的电路。而是为了供其他利用拓扑信息的CAD系统利用。这里就不赘述了。
NODELAYER 21NODETYPE 1XY 123000: 124500123000: 103500126000: 103500126000: 124500123000: 124500ENDEL
BOX元素
GDSII文件的末了一个元素是BOX。在BOX标识之后是可选的ELFLAGS和PLEX标识,接着是必需的LAYER标识,一个带有零参数的BOXTYPE标识,以及一个XY标识。XY标识必须包含五个点,描述一个封闭的矩形。与边界不同,这不是一个添补的图形。因此,它不用于描述集成电路的几何形状。
BOX 43 2 92000 -7000 106000 -7000 106000 19000 92000 19000 92000 -7000 ENDEL
GDS文件的读写操作
除了商业软件供应商外,还有许多免费的GDSII工具。这些免费工具包括编辑器、查看器、将2D布局数据转换为通用3D格式的实用程序、将二进制格式转换为可读的ASCII格式的实用程序,以及程序库。笔者经由一些测试和利用,创造
1. KLayout是一款开源的GDS文件可视化浏览与编辑器,大略好用,适宜初学者。开源的代码也适宜深入学习。支持将二进制的GDS文件转换为ASCII格式的可读文本。
2. gdstk是一款基于C++措辞的开源GDS读写包,协议非常友好,可以直接用于GDS干系的商业项目。同时拓展有Python版本。
3. 自行编写与GDSII干系的运用程序并不繁芜,还可以与其他CAD内核模块与2D/3D显示模块结合,实现更为丰富的功能。
总结
GDSII是一种语法大略的二维CAD文件格式,常用于集成电路和芯片的设计。GDS生态丰富,有大量的商业和开源软件支持,对付运用者和开拓者都极为友好。如果研发一款EDA/CAE软件,对GDSII文件的支持可能是必要的。
WelSim与作者不从属于GDSII,OASIS,Cadence,KLayout,gdstk。和GDSII,OASIS,Cadence,KLayout,gdstk的开拓团队与机构没有直接关系。这里的引用仅用作技能博客文章与软件利用的参考。