gds 格式文档
gds 格式介绍
Record Description
流式格式输出文件由可变长度的 record 组成。 record 的最小长度为四个字节。 record 可以是无限长的。 record 的前四个字节是头部。头部的前两个字节包含一个计数(一个字节 8 bit),表示 record 的总长度。该计数指示一个 record 的结束位置以及下一个 record 的开始位置。下一个 record 紧接着计数中最后一个字节开始。
头部的第三个字节是 record 类型。头部的第四个字节描述 record 中包含的数据类型。 record 的第五个字节到最后一个字节是数据。
如果输出文件是磁带,那么库的 record 将以2048字节的物理块写出。 record 可能会跨越物理块边界; record 不要求完全包含在单一的物理块中。(现在应该用不到了)
空字(null word)由两个连续的零字节组成。使用空字来填充以下空间:
- 库的最后一条 record 和其物理块的末尾之间的空间,或
- 多卷磁带流式文件中最后一条 record 和其物理块的末尾之间的空间。
Data Type Description
可能的数据类型及其值。可以在 record 的第四个字节中找到数据类型的值:
| 数据类型 | Value |
|---|---|
| No Data Present | 0 |
| Bit Array | 1 |
| Two-Byte Signed Integer | 2 |
| Four-Byte Signed Integer | 3 |
| Four-Byte Real | 4 |
| Eight-Byte Real | 5 |
| ASCII String | 6 |
注意: 一个字(word)由16位组成,编号从0到15,按从左到右的顺序排列。
Bit Array
位数组是一个字,其中使用某个位或一组位的值来表示数据。位数组允许一个字表示多个简单的信息单元。
Two-Byte Signed Integer
二进制补码表示法是一种在计算机中表示整数的方法,特别是用于表示有符号整数。它的主要优点是可以简化加减法运算,且能够避免零的多个表示。以下是其原理和如何计算的解释:
-
正数的补码
正数的补码和它的原码相同。
例如,8位二进制的 +5 的补码表示:原码:0000 0101 补码:0000 0101 -
负数的补码
负数的补码由两部分组成:- 原码:直接表示负数的绝对值。
- 补码:对原码取反,然后加1。
2字节整数 = 1字,2进制补码表示
两字节带符号整数的范围是 -32,768 到 32,767。
以下是两字节整数的表示方式,其中 S 是符号位,M 是大小(magnitude)。
SMMMMMMM MMMMMMMM
以下是两字节整数的示例:
00000000 00000001 = 1
00000000 00000010 = 2
00000000 10001001 = 137
11111111 11111111 = -1
11111111 11111110 = -2
11111111 01110111 = -137
Four-Byte Signed Integer
4字节整数 = 2字,2进制补码表示
四字节带符号整数的范围是 -2,147,483,648 到 2,147,483,647。
以下是四字节整数的表示方式,其中 S 是符号位,M 是大小(magnitude)。
SMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM
四字节整数的示例:
00000000 00000000 00000000 00000001 = 1
00000000 00000000 00000000 00000010 = 2
00000000 00000000 00000000 10001001 = 137
11111111 11111111 11111111 11111111 = -1
11111111 11111111 11111111 11111110 = -2
11111111 11111111 11111111 01110111 = -137
Four-Byte Real and Eight-Byte Real
- 4字节实数 = 2字,浮点数表示
- 8字节实数 = 4字,浮点数表示
对于所有非零值:
-
浮点数由三部分组成:符号位、指数位和尾数。
-
浮点数的值定义为:尾数 × (16 的指数部分的实际值)
-
指数部分(第1-7位)采用 Excess-64 表示法,7位字段表示的数字比实际指数大64。
-
尾数始终是一个大于或等于 1/16 且小于 1 的正分数。对于 4字节实数,尾数是第8到第31位。对于 8字节实数,尾数是第8到第63位。
-
二进制小数点位于第8位的左边。
-
第8位代表值 1/2,第9位代表 1/4,以此类推。
-
为了保持尾数在 1/16 到 1 的范围内,浮点数运算的结果会进行归一化。归一化是一个过程,其中尾数会每次向左移动一个十六进制位,直到其最左边的四个位代表一个非零值。每次移动一个十六进制位,指数会减少 1。由于尾数每次移动四个位,所以归一化后的尾数的最左边三个位可能是零。零值(也称为真零)由所有位都为零的数字表示。
以下是 4 字节和 8 字节实数的表示方式,其中 S 是符号位,E 是指数,M 是尾数。包含了 4 字节实数的示例。实数的负值表示方式与正值完全相同,只不过最高位是 1,而不是 0。
在 8 字节实数表示法中,前四个字节与 4 字节实数表示法完全相同。后四个字节包含额外的二进制位,以提供更高的精度。
4 字节实数:
SMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM
8 字节实数:
SMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM
MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM
4 字节实数示例:
注意:以下示例中,前六行的 7 位指数字段为 65。实际指数为 65 - 64 = 1。
01000001 00010000 00000000 00000000 = 1
01000001 00100000 00000000 00000000 = 2
01000001 00110000 00000000 00000000 = 3
11000001 00010000 00000000 00000000 = -1
11000001 00100000 00000000 00000000 = -2
11000001 00110000 00000000 00000000 = -3
01000000 10000000 00000000 00000000 = 0.5
01000000 10011001 10011001 10011001 = 0.6
01000000 10110011 00110011 00110011 = 0.1
01000001 00011000 00000000 00000000 = 1.5
01000001 00011001 10011001 10011001 = 1.6
01000001 00011011 00110011 00110011 = 1.1
00000000 00000000 00000000 00000000 = 0
01000001 00010000 00000000 00000000 = 1
01000001 10100000 00000000 00000000 = 10
01000010 01100100 00000000 00000000 = 100
01000011 00111110 10000000 00000000 = 1000
01000100 00100111 00010000 00000000 = 10000
01000101 00011000 01101010 00000000 = 100000
ASCII 字符串
一组 ASCII 字符,每个字符由一个字节表示。所有奇数长度的字符串必须使用一个空字符(数字零)进行填充,并且包含 ASCII 字符串的 record 的字节计数必须包括此空字符。流式读取程序必须查找空字符,并在空字符存在时将字符串长度减 1。
Record Types
以下是 record 及其简要描述,其中方括号中的前两个数字表示 record 类型,最后两个数字表示数据类型。所有 record 号均以十六进制表示。
0 HEADER
[0002] 两字节有符号整数
包含两字节的数据,表示版本号。表 4-1 列出了相应的版本号和 GDSII 发布版本号。请注意,在 6.0 版本中,版本号变为三位数。
表 4-1. GDSII 发布和版本号
| 发布版本 | 版本号 |
|---|---|
| 3.0 之前 | 0 |
| 3.0 | 3 |
| 4.0 | 4 |
| 5.0 | 5 |
| 6.0 | 600 (258 十六进制) |
简要说明:
- record 总是由偶数个字节组成,若字符字符串的长度是奇数,会自动在末尾填充一个空字符。
- HEADER record 的内容是一个 两字节有符号整数,用于表示 GDSII 文件的版本号,表格列出了各个版本的对应关系。
1 BGNLIB
[0102] 两字节有符号整数
包含库的最后修改时间(年份、月份、日期、小时、分钟和秒,每项占两字节),以及最后访问时间(格式相同)。该 record 标记着库的开始

2 LIBNAME
[0206] ASCII 字符串
包含一个字符串,即库的名称。库名称必须遵循 CDOS 文件名的长度和有效字符约定。库名称可以包括文件扩展名(在大多数情况下为 .DB)。
3 UNITS
[0305] 八字节实数
包含两个 8 字节实数。第一个表示 user unit 中的 database unit的大小,第二个表示 database unit 在米中的大小。例如,如果您的库是使用默认单位创建的( user unit = 1 微米,每个 user unit有 1000 个 database unit),那么第一个数字将是 .001,第二个数字将是 1E-9。通常,第一个数字小于 1,因为每个 user unit 有多个 database unit。
要计算 user unit的大小(以米为单位),可以将第二个数字除以第一个数字。
4 ENDLIB
[0400] 无数据
标志着库的结束。
5 BGNSTR
[0502] 两字节有符号整数
包含结构的创建时间和最后修改时间(格式与 BGNLIB record 相同),并标志着结构的开始。
6 STRNAME
[0606]
7 ENDSTR
[0700]
8 BOUNDARY
[0800]
Marks the beginning of a boundary element.
9 PATH
[0900]
10 SREF
[OAOO]
11 AREF
[OBOO]
Marks the beginning of an AREF (array reference)
element.
12 TEXT
[OCOO]
Marks the beginning of a text element.
13 LAYER
[OD02]
Contains 2 bytes which specify the layer. The value of the layer must be in the range of a to 63.
14 DATATYPE
[OE02]
Contains 2 bytes which specify datatype. The value of the datatype must be in the range of a to 63.
15 WIDTH
[0F03]
包含四个字节,指定路径或文本线条的宽度,以数据库单位表示。宽度的负值表示宽度是绝对的,即不受任何父引用的放大因子影响。如果省略,则默认为零。
16 XY
[1003]
包含一个XY坐标数组,单位为数据库单位。每个X或Y坐标占四个字节。路径和边界元素最多可以有200对坐标。路径必须至少有2对坐标,边界必须至少有4对坐标。边界的第一个点和最后一个点必须重合。文本或SREF元素只能有一对坐标。
AREF有恰好三对坐标,用于指定正交阵列格。AREF中的第一个点是阵列参考点。第二个点表示从参考点偏移的位置,偏移量是列间距乘以列数。第三个点表示从参考点偏移的位置,偏移量是行间距乘以行数。
一个节点可以有1到50对坐标。
一个矩形必须有五对坐标,且第一个点和最后一个点必须重合。
17 ENDEL
[1100]
Marks the end of an element.
18 SNAME
[1206]
19 COLROW
[1302]
包含4个字节。前两个字节包含阵列的列数。第三和第四个字节包含行数。列数和行数都不能超过32,767(十进制),且必须为正数。
20 TEXTNODE
[1400]
Marks the beginning of a text node. (Not currently used.)
21 NODE
[1500]
Marks the beginning of a node.
22 TEXTTYPE
[1602]
Contains 2 bytes representing texttype. The value of the texttype must be in the range 0 to 63
23 PRESENTATION
[1701]
24 SPACING
Discontinued
25 STRING
[1906]
26 STRANS
[lA01]
包含两个字节的位标志,用于 SREF、AREF 和文本变换。第0位(最左边的位)指定是否反射。如果该位被设置,则在角度旋转之前应用关于X轴的反射。对于AREF,整个阵列格都会被反射,且每个阵列元素会被刚性地附着。第13位标志绝对放大。第14位标志绝对角度。第15位(最右边的位)以及所有剩余的位保留供将来使用,必须清空。如果省略此记录,则假定元素没有反射,且其放大和角度被假定为非绝对的。
27 MAG
[1B05]
包含一个双精度实数(8 字节),表示放大倍率。
如果省略,则默认放大倍率为 1。
28 ANGLE
[1C05]
包含一个双精度实数(8 字节),表示角度旋转因子,单位为度,旋转方向为逆时针。
对于 AREF,ANGLE 会绕数组参考点旋转整个数组格(各个数组元素保持刚性连接)。
如果省略此记录,则默认角度为零度。
UINTEGER
用户整数数据仅在 2.0 版本中使用。
如果将任何来自 2.0 版本的 Stream 格式文件读入当前软件,Stream 格式的输入程序 INFORM 会将用户整数数据转换为属性编号为 126 的属性数据。
另见 PROP ATTR 和 PROPVALUE。
USTRING
用户字符串数据,之前称为字符字符串数据(CSD),曾在 1.0 和 2.0 版本中使用。
如果将这些版本的任何 Stream 格式文件读入当前软件,Stream 格式的输入程序 INFORM 会将用户字符串数据转换为属性编号为 127 的属性数据。
如果该记录不存在,则视为空字符串。
另见 PROPATTR 和 PROPVALUE。
31 REFLIBS
[lF06]
包含参考库的名称。
如果当前库绑定了任何参考库,则此记录必须存在。
第一个参考库的名称从第 0 字节开始,第二个参考库的名称从第 45(十进制)字节开始。
参考库名称可以包含目录说明符(用“:”分隔)和扩展名(用“.”分隔)。
如果任一库未命名,则该位置用空字符填充。
32 FONTS
[2006]
包含文本字体定义文件的名称。
如果4种字体中有任何一种对应有文本字体定义文件,则此记录必须存在。
如果所有字体均无文本字体定义文件,则此记录不得存在。
记录以字体0的名称开始,随后依次是其余3种字体的名称。
每个名称长度为44字节,如果没有对应的文本字体定义,则名称为空(null)。
如果名称长度不足44字节,则用空字符填充。
文本字体定义文件名称可以包含目录说明符(用“:”分隔)和扩展名(用“.”分隔)。
33 PATHTYPE
[2102]
此记录包含以下数值:
- 0 表示端点与路径结束处齐平的方头路径,
- 1 表示圆头路径,
- 2 表示端点超出半个宽度的方头路径。
Pathtype 4(仅适用于 CustomPlus 产品)表示具有可变方头延伸的路径(参见记录48和49)。
如果未指定,则默认 Pathtype 为 0。
Pathtype 0 produces a square-ended path, ending flush with the digitized end points. This is the default pathtype if none is specified.
Pathtype 1 produces a round-ended path. The two ends are semicircular with center at the digitized endpoints. Path type 1 is a view feature only;
Pathtype 2 produces a square-ended path.
The ends of the path extend beyond the digitized endpoint by one-half the path width.
For long paths, the viewing system may show joint segments such as the one in the figure to the left.
34 GENERATIONS
[2202]
此记录包含要保留的已删除或备份结构副本的正整数数量。
该数量必须至少为 2,且不超过 99。
如果没有 GENERATIONS 记录,则默认值为 3。
35 ATTRTABLE
[2306]
包含属性定义文件的名称。
只有当库绑定了属性定义文件时,此记录才存在。
属性定义文件名称可以包含目录说明符(用“:”分隔)和扩展名(用“.”分隔)。
最大长度为44字节。
36 STYPTABLE
[2406]
未发布功能
37 STRTYPE
[2502]
未发布功能
38 ELFLAGS
[2601]
包含 2 字节的位标志。
第 15 位(最右边的位)指定模板数据。
第 14 位指定外部数据(也称为外部数据)。
其他所有位当前未使用,必须清零。
如果省略此记录,则默认所有位均为 0。
关于模板数据的更多信息,请参见 GDSII 参考手册。
关于外部数据的更多信息,请参见 CustomPlus 用户手册。
39 ELKEY
[2703]
Unreleased feature
40 LINKTYPE
[28]
Unreleased feature
41 LINKKEYS
[29]
Unreleased feature
42 NODETYPE
[2A02]
包含 2 字节,用于指定节点类型。
节点类型的取值范围必须在 0 到 63 之间。
43 PROPATTR
[2B02]
包含 2 字节,用于指定属性编号。
属性编号为 1 到 127 之间的整数。
属性编号 126 和 127 保留给用户整数和用户字符串(CSD)属性,这些属性存在于 3.0 版本之前。(之前版本中的用户字符串和用户整数数据会被 Stream 格式输入程序 INFORM 转换为属性编号分别为 127 和 126 的属性数据。)
44 PROPVALUE
[2C06]
包含与前一条 PROP ATTR 记录中指定的属性名相关联的字符串值。
最大长度为 126 个字符。
任何元素关联的属性-值对必须具有不同的属性编号。
此外,任何元素所关联的属性数据总量有限制:所有字符串的总长度,加上属性-值对数量的两倍,不得超过 128(如果元素是 SREF、AREF 或节点,则限制为 512)。
例如,如果一个边界元素使用属性编号 2,属性值为 "metal",以及属性编号 10,属性值为 "property",
那么属性数据总量为 18 字节:
"metal" 占 6 字节(奇数长度字符串需以空字符填充),
"property" 占 8 字节,
加上两个属性编号各占 2 字节,总共 4 字节,
合计 6 + 8 + 4 = 18 字节。
45 BOX
[2DOO]
Marks the beginning of a box element.
46 BOXTYPE
[2E02]
Contains 2 bytes which specify boxtype. The value
of the boxtype must be in the range of 0 to 63.
47 PLEX
[2F03]
这是一个唯一的正整数,所有属于同一 plex 的元素都共享该数字。
plex 的头元素通过设置第七位标志来标识;因此,plex 号码应足够小,仅占用最右侧的 24 位。
如果省略此记录,则该元素不是 plex 成员。
48 BGNEXTN
[3003]
四字节有符号整数。(此记录类型仅出现在 CustomPlus 中。)
适用于 Pathtype 4。包含四个字节,指定路径轮廓超出路径第一个点的延伸长度,单位为数据库单位。
该值可以为负数。
49 ENDEXTN
[3103]
四字节有符号整数。(此记录类型仅出现在 CustomPlus 中。)
适用于 Pathtype 4。包含四个字节,指定路径轮廓超出路径最后一个点的延伸长度,单位为数据库单位。
该值可以为负数。
50 TAPENUM
[3202]
包含两个字节,用于指定多卷磁带 Stream 文件中当前磁带卷号。
第一卷磁带的 TAPENUM 为 1;第二卷为 2;依此类推。
51 TAPECODE
[3302]
这是一个唯一的由 6 个整数构成的代码,所有多卷磁带 Stream 文件的各卷共享该代码。
用于验证所读取的磁带卷是否正确。
52 STRCLASS
[3401]
两个字节的位数组。(仅供 Calma 内部与 CustomPlus 结构使用。)
如果 Stream 磁带由非 Calma 程序生成,则此记录应省略或清零。
53 RESERVED
[3503]
四字节有符号整数。(预留供将来使用。)
此记录类型曾用于 NUMTYPES,但并非必需。
浙公网安备 33010602011771号