GDSII协议标准解析

去年圣诞节翻译了OASIS协议,今年圣诞在邮轮上利用被喂养的时间,把GDSII协议翻译了一下。这篇文档基本是按照GDSII Stream Format Manual  Release 6.0版本的中文解释。这篇文档的组织结构跟原协议是一样的。因为Calma Company拥有原来协议的所有版权,所以我无法提供原协议在这里。请另外设法想办法查找下载。本文仅作兴趣研究,对其中的错误概不负责。希望能为支持国内半导体产业做点微薄贡献。为避免版权的一些问题,本文仅限非盈利场合交流使用,不限制转载,但请注明原文来自CSDN的内核中的洋葱。

目录

1 用户使用说明

2. 记录的描述

3. 数据类型的描述

4. 记录类型

5. 流格式语法

1.0 用户的使用说明(Notes to the User

流格式(Stream Format)是GDSII数据的标准输入格式。流格式是一种用OUTFORM和STREAMOUT来写, 用INFROM来读的格式。 库(Libraries)用这种格式来保存,可以很容易的传送给其他系统处理。流格式在不同的版本之间是前向兼容(Upward Compatible)。 旧版本保存的库资料用新版本总是可以打开。

下面的第二章到第四章描述的是流格式的各部分组件(Stream format components)。 第五章和第六章描述的是流语法(Stream Syntax)。 第七章提供了一个流格式的文件例子和描述。

2.0 记录的描述(Record Description

流格式的输出文件是由不同长度的记录组成。最小的记录长度是4Bytes. 记录可以无限长。记录的最开始4个字节组成了记录的头部。记录头部最开始的两个字节表示的是记录的长度(基于8 bits的Byte为单位的计数)。这个长度计数告诉了一个记录到哪里结束,以及下一个记录的开始。吓一条记录是紧接着前一条记录的最后一个字节。

记录头部的第三个字节是记录的类型。第四个字节是记录中数据的类型。第五个到最后一个字节是记录的数据。 Fig 2-1 表示了一个典型的记录的头部。

如果输入文件是写在磁带(magnetic tape)里面,那么库的记录是卸载2048 字节的物理块里面。记录可以跨越物理块的边界,一个记录不需要全部的写在一个物理块里面。

一个空字(Null Word) 包括两个连续的0字节(zero Bytes)。 空字用来填充下面的空间:

  • 一个库的最后一个记录到它所在物理块的结束位置, 或者
  • 在多卷磁带文件中,最后一个记录跟它所在物理块的结束位置。

第三章和第四章描述数据和记录的类型。第五章描述这些记录如何组织成一个GDSII文件。

3.0 数据类型的描述(Data Type Description)

表3-1列举了可能的数据类型和他们对应的值。你可以在一个记录的头部的第四个字节找到记录数据类型的值。

下面的段落将描述表3-1中列出来的数据类型。

请记住:一个字包含16个bits。 标号0 到15 分别表示从左到右的顺序。

3.1  比特数组(Bit Array, 数据类型1)

一个比特数组是一个字, 这个字用特定的某个比特或者多个比特的值来表示数据。 比特数组可以让一个字表示多个简单的信息。

3.2 两个字节的有符号整数 (Two-Byte Signed Integer, 数据类型2)

两个字节的整数 = 一个字的带符号的2进制补码表示。

(2-byte integer  =  1 word 2s-complement representation).

(译者备注:就是计算机里面带符号的16bit补码整数表示)

两个字节的有符号整型的范围是-32768到32767.

下面是一个两字节整数的表示, 其中的S是符号, M表示大小。

SMMMMMMM  MMMMMMMM

下面是一些两字节整数的例子:

00000000  00000001 = 1

00000000  00000010  = 2

00000000  10001001  = 137

11111111  11111111  =  -1

11111111  11111110  = -2

11111111  01110111  =  -137

3.3 四字节的有符号整型  (Four-Byte Signed Integer, 数据类型3)

4字节整数  =  2 字 的有符号二进制补码表示

(4-byte Integer = 2 word 2s-complement representation)

 (译者备注:就是计算机里面带符号的32bit补码整数表示)

  4字节有符号整型的范围是 -2, 147,483, 648到 2,147,483,647.

下面是4字节整数的表示, 其中S表示符号位, M表示大小。

SMMMMMMM  MMMMMMMM  MMMMMMMM  MMMMMMMM

下面是一些四字节整数的例子:

3.4 四字节实数和八字节实数(Four-Byte Real and Eight-Byte Real, 数据类型分别是4和5)

四字节实数 = 两字的浮点数表示

八字节实数 = 四字的 浮点数表示

对于所有的非零值:

  • 一个浮点数由三个部分组成: 符号位, 指数域, 和尾数(mantissa)。
  • 一个浮点数的值由下面的公式定义: (尾数) X  (16为底数,指数域的值为指数的数值)。
  • 指数域(由比特位1-7组成)是用 Excess-64 表示法表示的数。 其中指数中7个比特表示的数比实际的指数值大于64。 (译者注:这种表示法请参考https://people.cs.pitt.edu/~wiebe/courses/CS273/lecnotes15.html对浮点数的解释。简单说,如果指数部分表示的二进制数是E, 那么实际上指数部分的值就是 E' = E + 64)
  • 尾数总是一个大于等于 1/16, 并且小于1的正分数。对于4字节的实数,尾数部分是8到31比特位。对于8字节的实数,尾数是8-63比特位。
  • 二进制的小数点是在第8比特的左边。
  • 比特位8表示的值是1/2, 比特位9表示的值是1/4, 依次类推。
  • 为了使尾数的范围在1/16和1之间, 实际的数值是正则化(Normalization)以后的数据。 正则化的过程是把尾数每次左移一个16进制的数,一直到它最左边的四个比特表示一个非零的数值为止。对于每次16进制移位, 指数值减一。因为尾数每次移动4个比特, 有可能正则化尾数的最左边的三个比特是零。一个零值, 也叫做真正的零值(True Zero), 表示的是一个数所有的比特都是零。

下面是4字节和8字节的实数的表示。其中S表示符号位, E表示指数域, M表示大小。 例子里面包括4字节的实数。 正实数和负实数的表示是相同的,除了最高位的符号位是1而不是0.

在8字节的实数表示中,前面四个字节跟四字节的实数表示完全相同。最后的四个字节包含了更多的二进制数以提高解析度。

4字节的实数:
SEEEEEEE  MMMMMMMM   MMMMMMMM  MMMMMMMM

8字节的实数:
SEEEEEEE  MMMMMMMM   MMMMMMMM  MMMMMMMM

MMMMMMMM  MMMMMMMM   MMMMMMMM  MMMMMMMM

一些四字节实数的例子:

提示:在下面的第六行例子中,7比特的指数域=65, 实际的指数值是65-64=1.

3.5 ASCII字符串(ASCII string, 数据类型是6)

它是一些ASCII字符串的集合,每个字符用一个字节表示。所有奇数长度的字符串需要用一个空字符(数值编号是0)放在末尾来填充。当统计记录长度的时候,需要将这个空字符包含在内。流的读入程序,必须读入这个空字符,如果发现最后一个字符是空字符那么在生成字符串长度的时候需要减一。

4.0 记录类型(Record Types)

一个记录总是偶数字节的长度。如果一个字符串是奇数个字节长,那么它需要在末尾填充一个空字符。

下面是每种记录以及它的简单描述。下面每条记录说明中,中括号中的前两个数字是记录的类型,后面两个数字是数据的类型。所有的记录数字都是用16进制表示。

4.1 头记录 (Header)[0002]

记录类型:0.

数据类型:两个字节有符号整型

包括两个字节的数据,用来表示版本号。表4-1列举了对应的版本号(version number)和GDSII发行号(release number)。请注意在6.0的发行号中,版本号变成了三

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值