译者注: 利用2022年圣诞假期,终于解读完OASIS标准协议的文档。本翻译文档基于SEMI 草案标准 3626  (2003/04/23).  因为SEMI的原版标准草案涉及到版权的一些问题,并不是公开的。因此我并不是原文原样翻译,会加入很多我自己的理解和注释。 所以本文仅作兴趣研究,对其中的错误概不负责。希望能为支持国内半导体产业做点微薄贡献。为避免版权的一些问题,本文仅限非盈利场合交流使用,不限制转载,但请注明原文来自CSDN的内核中的洋葱。

1.  Purpose

1.1 本协议规范的目的是为了制定分层集成电路掩膜图形信息的交互和封装格式。

1.2 标准背景 – 略过。简单一句话就是克服GDSII协议标准的缺点,适应更大规模的集成电路设计制造。

2. Scope

2.1. 本规范制定的格式,最重要的目的就是用来封装分层集成电路掩膜图形 ,以便在各个EDA工具,掩膜制作,掩膜检查和修复工具之间交互。

2.2. 规范制定的格式,要求是硬件和软件之间相互独立,互不依赖。

3. Limitations

3.1 如果oasis文件使用了一些协议中规定的扩展记录(extension records), 比如XNAME, XELEMENT和XGEOMETRY, 可能会影响在不同工具之间的通用性。有些工具可能不支持这些扩展字段。因此推荐这些扩展字段只用在内部的原型设计中,如果需要对外交互,应该使用本规范正式包含的扩展字段。(备注:哪些是正式包含的扩展字段?)

4. Referenced Standards

4.1 IEEE Standards1

IEEE 754-1985 - IEEE Standard for Binary Floating-Point Arithmetic

4.2 ISO Standards2

ISO-646-IRV - “US-ASCII” Character Set ISO-3309 - Information technology—Telecommunications and information exchange between systems—High-level data link control (HDLC) procedures—Frame structure

4.3 IETF Standards3

RFC 1951 - DEFLATE Compressed Data Format Specification  version 1.3

5. Terminology

(译者:个人觉得术语这一部分还是不翻译的为好。所以这章大部分是原文copy过来了。)

5.1 简写词和首字母缩略词

5.1.1 BNF—Backus-Naur Form

5.1.2 EDA—Electronic Design Automation

5.1.3 1OASISTM—Open Artwork System Interchange Standard

5.2 术语定义

5.2.1 OASIS规范中大部分的术语定义都可以在上下文相关的段落中找到

5.2.2 Cell—a named object in a layout hierarchy, containing native geometric information, annotation information, and/or placements of other cells.   一个基本的信息单元。可以是几何图形,也可以是注解信息,或者其它单元的位置放置信息,

5.2.3 Placement—a specification by reference that a copy of a cell is to be placed within the coordinate space of another cell at a particular location, orientation, and scale. Cell placement is the fundamental mechanism which makes hierarchy within the OASIS file possible.  信息单元的位置放置信息。包括了坐标,方向,缩放等信息。

5.2.4 Geometry—a two-dimensional geometric figure such as a polygon, rectangle, trapezoid, path, circle, etc. with inherent attributes of layer and datatype.  几何信息,包括多边形,长方形,正方形,路径,圆等图形的几何坐标信息。

5.2.5 Property—an annotation element consisting of a name plus an optional list of values, supplying descriptive information about the characteristics of the file or one of its components. 属性信息。比如名字,注释,描述等信息。

5.2.6 Record—the principal data division in an OASIS file. 记录块,OASIS文件中的一个基本的数据块。

5.2.7 Text Element—an annotation element consisting of an (x,y) coordinate point and an associated string. 文本信息。包括注释信息以及放置的坐标位置。

5.3 Symbols

5.3.1 “->” — 用来标明一个参数名称和它的内容。

6. OASIS BASICS

6.1 OASIS文件时流格式的文件格式。分成一个个数据块(record). 每个数据块的长度是可以通过解析它的结构来获取的,但这个长度不是明确的。就是需要解析它才能获取这个数据块的长度。(相反的gds2的文件格式,每个数据块的长度是明确的。)

6.2 OASIS文件是用BNF语法定义的。下面是它的定义语法。(BNF语法请自行google学习.)

<oasis-file> -> <magic-bytes> START { CBLOCK | PAD | PROPERTY | <cell> | <name> }* END

<name> -> { CELLNAME | TEXTSTRING | LAYERNAME | PROPNAME | PROPSTRING | XNAME }

<cell> -> { CELL { CBLOCK | PAD | PROPERTY | XYRELATIVE | XYABSOLUTE | <element> }* }

<element> -> { <geometry> | PLACEMENT | TEXT | XELEMENT }

<geometry> -> { RECTANGLE | POLYGON | PATH | TRAPEZOID | CTRAPEZOID | CIRCLE | XGEOMETRY }

6.3 一个OASIS文件可以表示一个完整的分层线路(layout)图,或者部分线路图,或者多个分层线路图。

这些表示(是一个完整的hierachy layout,还是部分,或者是多个)并不是固定的,它取决于应用程序如何管理解读这些文件。每个OASIS文件必须是语法完整的。它必须用<magic-bytes> 字段开始,并且至少包含一个STARTEND 记录块。.

6.4  <magic-bytes> 元素是一个13个 ASCII 字符的字节流,协议规定是: “%SEMI-OASIS<CR><NL>”, 这里的<CR><NL>表示 ASCII 字符里的 0D 0A.  <magic-bytes>提供了一个可识别的签名, unix 文件可以根据这个元素用来识别文件类型。 里面的换行符则可以保证FTP程序是按照binary的模式来操作这个文件, 如果是按照non-binary模式来操作这个文件,程序遇到这个换行符则会corruption. (译者注:在这个字段,各个厂商可能会有不同,可能厂商会加上自己的log。 )

6.5 异常处理: OASIS 处理程序遇到任何无法解释的语法错误,都应该当作一个致命错误而应当退出。OASIS处理程序并不需要预先对整个文件进行检查以保证整个文件有效。如果OASIS处理程序能够并且只需要读取部分文件信息,那么只要它能正确解析自己读取的那部分信息就可以,并不需要对整个文件进行检查。

7. DATA CONSTRUCTS

不同于普通的计算机编程语言的数据格式,oasis作为一种流格式文件,有自己的数据类型表示方法。这里对其中内容进行部分说明,以便方便查阅。一共有下面几种类型的数据格式:

Table 1  oasis数据格式

类型

长度

其他说明

bytes

8bit

最低位bit放在最右边

integers

unsigned-integer

不定,N个byte,8个bits中只有7bits表示实际数据,每个byte最高一个bit表示后面是否还有数据。0表示自己是最后一个byte。

最低位byte放在oasis文件的最前面

signed-integer

不定,N个byte,8个bits中只有7bits表示实际数据,每个byte最高一个bit表示后面是否还有数据。0表示自己是最后一个byte。符号位放在最低位byte(文件中最先出现的byte)的最后一位(bit):0表示正,1表示负。

最低位byte放在oasis文件的最前面

real

不定。有8种表示方式。由一个unsigned-integer的数据来表示采用何种表达方式。

表示数据表达方式的unsigned-integer数据出现在文件的最前面。接着它后面才是实际要表达的数值。

string

由一个unsigned-integer的数据来表示string的长度

unsigned-integer数据出现在文件最前面。string可以分成b-string, a-string和n-string三类

deltas

delta是用来表示方向和长度的一种数据类型。分成4类。各类长度不一样。

在oasis文件中,这种数据的第一个出现的字节的最后几个bit是表示方向。后面具体描述。

repetitions

用来表示重复出现的各个图形的位置的一种数据类型。也分成多类,各类长度不一。

在后面具体说明

point lists

利用这个数据结构就可以画出图形。但这个数据结构本身不包括画图的起始位置信息。而在其他地方确定。是一串delta信息,用来表示各条边的长度和方向。图形的顶点越多,长度越长。

在后面具体说明。

property value

由一个unsigned-integer表示类型,加上后面的property value 值构成。

各种类型的属性,value值不一样,但都比较简单。可以参看参考文献的7.8节table9。

7.1 BYTES

7.1.1 一个Byte是固定长度的8bit数据。最低位bit放在最右边。( least significant bit (bit 0) on the

right.)

7.2 INTEGERS

OASIS文件中的整数是没有长度限制的。是长度大于0字节的一个整数。

(译者备注:虽然标准中没有整数的长度限制,但具体程序实现的时候应该使用64bits的长度来表示整数。32bits明显在EUV时代是不够的,但高于64bits也没必要。首先很多的运算库不支持长于64bits的整数,这个限制了我们可以使用的的计算精度;其次我们知道硅晶体的单个硅原子立方体长度大概是0.543nm, 如果使用64bits长度来表示坐标,如果按照硅晶体的原子长度,可以表示的长度大概是10000KM, 这个几乎是地球的直径了,所以64bits是足够使用了; 最后如果高于64bits也带了性能的影响。在实际计算中,基本都是用64bits的整数来表示整数,永远不要使用没法用64bits长整型来表示的整型数据,虽然协议本身并没有这样的限制。)

7.2.1 An unsigned-integer

低byte放在文件前面,高byte放在文件后面。

每个byte最高一个bit表示后面是否还有数据。0表示自己是最后一个byte。不定,N个byte,8个bits中只有7bits表示实际数据,每个byte最高一个bit表示后面是否还有数据。0表示自己是最后一个byte。剩下的7bits数据串在一起组成二进制数表示实际的数据。

译者注释:
unsigned-integer的长度不确定,如果数据长度有N个byte,每个byte的8个bits中只有7bits表示实际数据,最高一个bit表示后面是否还有数据。0表示自己是最后一个byte。最低位byte放在oasis文件的最前面。

举个例子就清楚了。

十进制的16383:

正常的2进制表示是:11,1111,1111,1111,一共14个1。

在oasis文件中,由于只有7位能代表实际的数,所以我们把它写成x111,1111,y111,1111。还是14个1。但中间插入了一个x和y用来表示是否后面还有数据。由于低字节优先,所以我们写成y111,1111,x111,1111。然后将y变成1,x变成0。所以最后在oasis文件中的表示是1111,1111,0111,1111。

十进制的16384:

正常的2进制表示是:100,0000,0000,0000,1后面一共14个0。

在oasis文件中,由于只有7位能代表实际的数,所以我们把它写成x000,0001,y000,0000,z000,0000。1后面还是14个0。但中间插入了一个x、y和z用来表示是否后面还有数据。由于低字节优先,所以我们写成z000,0000,y000,0000, x000,0001。然后将z变成1,y变成1,x变成1,。所以最后在oasis文件中的表示是1000,0000,1000,0000, 0000,0001。

7.2.2  signed-integer

N(N>0)个byte,8个bits中只有7bits表示实际数据,每个byte最高一个bit表示后面是否还有数据。0表示自己是最后一个byte。符号位放在最低位byte(文件中最先出现的byte)的最低一位(bit):0表示正,1表示负。+0和-0在处理的时候需要认为是相等的。

译者注释:

知道了unsigned-integer以后,再变signed-integer就简单了。还是举两个例子。

十进制的8191,

正常的2进制表示是: 1,1111,1111,1111,一共13个1。

在oasis文件中,由于第一个byte只有6位能代表实际的数,后面的byte有7位能代表实际的数。所以我们把它写成x111,1111,y111,111z。还是13个1。但中间插入了一个x和y用来表示是否后面还有数据,插入了一个z作为符号位。由于低字节优先,所以我们写成y111,111z,x111,1111。然后将y变成1,x变成0。由于是正数,所以z为0。所以最后在oasis文件中的表示是1111,1110,0111,1111。

十进制的-8192,

先表示十进制的8192,正常的2进制表示是: 10,0000,0000,0000,1后面一共13个0。

在oasis文件中,由于第一个byte只有6位能代表实际的数,后面的byte有7位能代表实际的数。所以我们把它写成m000,0001,x000,0000,y000,000z。1后面还是13个0。但中间插入了一个x和y用来表示是否后面还有数据,插入了一个z作为符号位,前面补了一个m。由于低字节优先,所以我们写成y000,000z,x000,0000,m000,0001。然后将y变成1,x变成1,m变成0。由于是负数,所以z为1。所以最后在oasis文件中的表示是1000,0001,1000,0000,0000,0001。

7.2.3 异常处理

如果有些处理器只能支持有限长度的整数,例如只能支持32bits, 如果遇到超过这个长度的整数,应该按fatal错误处理。也就是程序应该退出。

7.3 REALS

7.3.1 实数可以存放在下面的其中一种或者多种的有理数格式里面, 或者用单精度(single-precision)4bytes的(IEEE-4)或者双精度(double precision)的8bytes(IEEE-8)里面。(译者注:协议中一共列出了8种表示方法,其中前面六种是有理数的表示方法,再加上IEEE-4和IEEE-8两种。)

有理数的格式比浮点数的格式具有更高的压缩率, 而且可以具有比浮点数更高的精度。采用哪种表示方法,是由一个无符号整型来表示,这个整型在表示具体数据的实数前面。

上表 table 7-3 翻译成中文大概就是下表的含义。

Table 2  real数据类型说明

类型格式

含义

0+unsigned-integer

是一个正的整数,整数的值就等于后面unsigned-integer

1+unsigned-integer

是一个负的整数,整数的绝对值就等于后面unsigned-integer

2+unsigned-integer

是一个正的实数,实数的值就等于后面unsigned-integer的倒数。

3+unsigned-integer

是一个负的实数,实数的绝对值就等于后面unsigned-integer的倒数。

4+unsigned-integer1+ unsigned-integer2

是一个正的实数,实数的值就等于(unsigned-integer1/ unsigned-integer2)。(做除数)

5+unsigned-integer1+ unsigned-integer2

是一个负的实数,实数的绝对值等于(unsigned-integer1/ unsigned-integer2)。(做除数)

6+IEEE-4-byte-float

表示后面是IEEE-4-byte-float的数据格式

7+IEEE-8-byte-float

表示后面是IEEE-8-byte-float的数据格式

7.3.2 对于Type 0和1 , 这个实数实际是个整数,它的小数部分是0。 对于type2和type3, 表示是一个倒数。对于type 4和5表示是一个分数。 Type6和7表示是浮点数,遵循IEEE 754-1985的协议标准, 低端字节在前。

协议中给出了几个例子。见下图截图。

7.3.3 异常处理: 对于类型2-5, 如果分母是0, 应该当作fatal error 处理。 如果类型不在0-7的范围, 也应该当作fatal error处理。

译者注: 从数学角度看,这里用分数来表示有理数,确实可以表示任何一个有理数,而且由于OASIS的整数是不限制长度的,所以可以不损失精度的表示任何有理数。但从数值计算的角度考虑,计算机基本都是用浮点数表示,所以实际上最后还是转化成double型的浮点数来计算。所以从实用的角度看,用type6和type7就够了。

7.4 STRINGS

7.4.1 String 类型

string数据类型是一个复合的数据类型,它由一个表示字符串长度的unsigned-integer类型数据做为开头,后面加上真正的字符串。用BNF语法表示就是:
string -> length byte*

字符串可以分成三种:b-string(binary string), a-string(ascii string)和 n-string (name string).

b-string后面可以接任何8bits的字符编码。 a-string包括可打印的ascii字符(字符ascii的16进制编码范围0x21-0x7E)和空字符(0x20)。 n-string只包含可打印字符(ascii编码0x21-0x7E)并且长度大于0.

7.4.2 ascii编码0x21 -0x7E包含的字符有以下这些

!"#$%&’()*+,-./0123456789:;<=>?@ [21-40]

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_‘ [41-60]

abcdefghijklmnopqrstuvwxyz{|}~ [61-7E]

这些是不包括空格和tab字符以及一些控制字符。

7..4.3 异常处理:如果在a-string和n-string中出现了非法的字符(译者注:不在范围之内的字符), 应该认为是fatal error。 如果n-string长度是0也认为是fatal error。

7.5 DELTAS

7.5.1 delta数据类型表示的是几何数据。表示坐标,方向和偏移等信息。其中分成4种:1-delta, 2-delta, 3-delta和g-delta。分别进行说明。

7.5.2  1- delta

1-delta是一种signed-integer的数据结构,用来表示水平或者垂直方向的位置(displacement)。其中signed-integer中的符号位就用来表示方向了;singed-integer中的表示数值的部分就用来表示长度。最低一个byte的最低bit位: 0表示东或者北方向; 1表示西或者南方向。水平还是垂直对齐要根据具体场景来确定。

我们举个例子。比如二进制的1111,1001, 0010, 0011。其中第一个方框中的1和singed-integer的含义一样,表示后面还有数据。第二个方框中的1在signed-integer中表示正负符号,这里就表示方向,1表示向西或者向南(在正交坐标系中表示x和y轴的负方向,具体是x轴还是y轴由这个值出现的当前的场景来确定)。第三个框中的0表示这是这个signed-integer数据的最后一个byte。这个数据的长度是二进制的010,0011, 111, 100(去掉框内的数值,然后前后byte调转位置),这就是十进制的2300。因此这个数值就是表示向西(或者向南)画2300长度的一条线。

2- delta

2-delta是一种unsigned-integer的数据结构,跟1delta一样,用来表示水平或者垂直方向的位置(displacement)。 其中unsigned-integer中的最低2bits(在oasis文件中最先出现的byte中的最低2bits)用来表示方向了,其他部分表示数值的大小,数值的大小就用来表示长度。

我们举个例子。比如二进制的1001,1000, 0010, 1010。其中第一个方框中的1和unsinged-integer的含义一样,表示后面还有byte表示同一个unsigned-integer数据。第二个方框中的00这里就表示方向,00表示向东(在正交坐标系中表示x正方向,01表示向北,10表示向西,11表示向南)。第三个框中的0表示这是这个unsigned-integer数据的最后一个byte。这个数据的长度是二进制的010,1010, 001, 10(去掉框内的数值,然后前后byte调转位置),这就是十进制的1350。因此这个数值就是表示向东(就是从当前位置,向x轴正方向)画长度1350的一条线。

3- delta

3-delta是一种unsigned-integer的数据结构,用来表示水平、垂直或者45°方向的位置(displacement)。其中unsigned-integer中的最低3bits(在oasis文件中最先出现的byte中的最低3bits)用来表示方向了,其他部分表示数值的大小,数值的大小就用来表示x轴和y轴的偏移长度。

我们举个例子。比如二进制的1100,1101, 0000, 0001。其中第一个方框中的1和unsinged-integer的含义一样,表示后面还有byte表示同一个unsigned-integer数据。第二个方框中的101这里就表示方向,101表示西北方向(在正交坐标系中表示135度角的一条线,000表示向东,001向北,010表示向西,011表示向南,100表示东北方向,110表示西南方向,111表示东南方向)。第三个框中的0表示这是这个unsigned-integer数据的最后一个byte。这个数据的长度是二进制的000,0001, 100, 1(去掉框内的数值,然后前后byte调转位置),这就是十进制的25。因此这个数值就是表示向西北方向(就是从当前位置,向135度角方向)画长度为sqrt(25*25+25*25)的一条线(x轴偏移25,y轴偏移25)。

g- delta

g-delta有两种形式,一种是用一个单一的unsigned-integer的数据来表示;第二种是用一对unsigned-integer的数据来表示。如果g-delta数据在文件中第一个出现的字节的最低位(bit0)是0,表示第一种类型的g-delta数据;如果是1,表示第二种类型的g-delta数据。

g- delta 第一种类型

如果是第一种类型,只用一个unsigned-integer类型表示g-delta的类型。unsigned-integer的在文件中出现的第一个字节的倒数第2到第4个bit(bit1到bit3)一共3个bits用来表示方向,同3-delta的形式。

举个例子,二进制的1110,1100,0000,0101。其中第二个方框中的0表示这是第一种类型的g-delta格式,第一个方框中的1和unsinged-integer的含义一样,表示后面还有byte表示同一个unsigned-integer数据。划下划线的110这里就表示方向,110表示西南方向(在正交坐标系中表示135度角的一条线,000表示向东,001向北,010表示向西,011表示向南,100表示东北方向,101表示西北方向,110表示西南方向,111表示东南方向)。第三个框中的0表示这是这个unsigned-integer数据的最后一个byte。这个数据的长度是二进制的000,0101, 110(去掉打框的和加下划线的数值,然后前后byte调转位置),就是十进制的46。整个数据的含义就是沿西南方向画一条长度为sqrt(46×46+46×46)的线(也是就是将x轴坐标减少46,y坐标减少46,将这个点作为顶点,和原来坐标点相连画一条直线)。

g- delta 第二种类型

如果是第二种类型,则用两个unsigned-integer的数据来表示。第一个unsigned-integer在文件中的第一个byte的最低bit(bit0)必须为1,第一个byte的倒数第二个bit(bit1)表示x轴的方向,其它bit表示长度。第二个unsigned-integer在文件中的第一个byte的最低bit(bit0)表示y轴的方向,其它bit表示长度。因此,它能够表示任何方向的线段。只有这种数据能够表示任何方向任何角度的线段,其它delta的类型都只能表示45度或者90度方向的线段。

举个例子,二进制的1011,1011,0000,0001,1011,0111,0000,1111。

其中第二个方框中的1表示这是第二种类型的g-delta格式,第一个方框中的1和unsinged-integer的含义一样,表示后面还有byte表示同一个unsigned-integer数据。划下划线的1这里就表示方向,1表示向西(x轴负方向,0表示向东)。第三个框中的0表示这是第一个unsigned-integer数据的最后一个byte。这个数据的长度是二进制的000,0001, 011,10(去掉打框的和加下划线的数值,然后前后byte调转位置),就是十进制的46。整个数据的含义就是x轴沿负方向减少长度46,取一条和y轴平行的直线。后面y轴也取一条和x轴平行直线,两者相交得到一个点。整个delta就是从当前位置到这个点画一条直线。

第四个方框中的1和unsinged-integer的含义一样,表示后面还有byte表示同一个unsigned-integer数据。第六个框中的0表示这是第二个unsigned-integer数据的最后一个byte。第五个框中的 1就表示方向,1表示向南(y轴负方向,0表示向北)。整个数据的含义就是y轴沿负方向减少长度46,取一条和x轴平行的直线。

原协议给出了一些delta的数据的例子,放在下图中。

7.6 REPETITIONS

7.6.1  repetition 用来表示一个cell, 一个几何图形或者一串文本的重复排列方式。Repetition

PLACEMENT, <geometry>, 或者TEXT record 本身的一部分。 Repetition 由一个表示repetition类型的无符号整数,后面跟着跟repetition相关的参数组成。

译者备注:

在光刻版图中,一个相同的图形常常在多个位置重复出现。repetition就用来表示图形重复出现的位置。repetitions其本质是分成三部分,第一部分表示类型,用一个unsigned-integer的数据来表示,一共有12种类型,就是table 7-6中的type。 第二部分表示维数,就是7.6节中table 7-6中的dimension,它表示了这个图形重复出现的次数;第三部分是表示位置,就是各个重复出现的图形应该出现在版图中的哪个位置,中7.6节中table 7-6中的space和displacement。

Repetition的各种类型的说明。原协议的描述见下图。

下面这张表是译者对各种repetition进行一些注释说明。

Table 3  repetitions类型说明

类型

format

位置坐标

0

参见上面Table 7-6

重复上一次repetition的数据。根据上一次repetition的类型和数据来重复本图形的计算。比如上次是类型1的repetition,那么现在也是类型1的repetition,并且dimension和space参数也相同

1

参见上面Table 7-6

x-dimension=N-2,  y-dimension=M-2.

生成一个N列M行的矩阵,矩阵中每个元素表示一个重复的图案。元素element(i , j )(i=0 , ... , N-1, j= 0, ..., M-1)的位置为(i*x-space,  j*y-space)。

用来生成x轴和y轴平行的重复图案。

2

参见上面Table 7-6

x-dimension=N-2,生成一个N列1行的矩阵。矩阵中每个元素表示一个重复的图案。元素element(i)(i=0 , ... , N-1)的位置为(i*x-space, 0)。

用来生成和x轴平行的重复图案。

3

参见上面Table 7-6

y-dimension=M-2,生成一个1列M行的矩阵。矩阵中每个元素表示一个重复的图案。元素element(j)(j=0 , ... , M-1)的位置为(0, j*y-space)。

用来生成和y轴平行的重复图案。

4

参见上面Table 7-6

x-dimension=N-2,生成一个N列1行的矩阵。矩阵中每个元素表示一个重复的图案。元素element(i)(i=0 , ... , N-1)的位置为(x-space0+ x-space1+...+ x-spacei, 0),其中x-space0=0。

用来生成和x轴平行的重复图案。

5

参见上面Table 7-6

跟类型4类似,x-dimension=N-2,生成一个N列1行的矩阵。矩阵中每个元素表示一个重复的图案。元素element(i)(i=0 , ... , N-1)的位置为(grid*(x-space0+ x-space1+...+ x-spacei), 0),其中x-space0=0。

用来生成和x轴平行的重复图案。

6

参见上面Table 7-6

y-dimension=M-2,生成一个1列M行的矩阵。矩阵中每个元素表示一个重复的图案。元素element(j )(j=0 , ... , M-1)的位置为(0, y-space0+ y-space1+...+ y-spacej),其中y-space0=0。

用来生成和y轴平行的重复图案。

7

参见上面Table 7-6

跟类型6类似,y-dimension=M-2,生成一个1列M行的矩阵。矩阵中每个元素表示一个重复的图案。元素element(j )(j=0 , ... , M-1)的位置为(0, gird*(y-space0+ y-space1+...+ y-spacej) ),其中y-space0=0。

用来生成和y轴平行的重复图案。

8

参见上面Table 7-6

n-dimension=N-2,  m-dimension=M-2.

n-displacement(m-displacement类似这样处理)是g-delta类型的数据,含有长度和方向信息,可以把g-delta数据分成两部分nx-space和ny-space,分表表示x轴方向的偏移和y轴方向的偏移。g-delta可以表示任意角度的方向。

整个数据生成一个N列M行的矩阵,矩阵中每个元素表示一个重复的图案。元素element(i , j )(i=0 , ... , N-1, j= 0, ..., M-1)的位置为(i*nx-space+j*mx-space,  i*ny-space+j*my-space)。

用来生成沿对角方向(不一定是45度角)的重复图案。

9

参见上面Table 7-6

dimension=P-2,生成一个P维的向量。向量中每个元素表示一个重复的图案。元素element(k)(k=0 , ... , P-1)的位置为(k*x-space, k*y-space),

用来生成沿对角方向的P维重复图形的图案。

10

参见上面Table 7-6

dimension=P-2,生成一个P维的向量。向量中每个元素表示一个重复的图案。元素element(k)(k=0 , ... , P-1)的位置为(x-space0+x-space1+...+x-spacek,  y-space0+y-space1+...+y-spacek),

它可以用来生成沿任何方向任何位置的P维重复图形的图案。

11

参见上面Table 7-6

跟类型10类似,dimension=P-2,生成一个P维的向量。向量中每个元素表示一个重复的图案。元素element(k)(k=0 , ... , P-1)的位置为

(grid*(x-space0+x-space1+...+x-spacek),

grid*( y-space0+y-space1+...+y-spacek)),

它可以用来生成沿任何方向任何位置的P维重复图形的图案。

下面是各种repetition的例子说明。

7.6.14 异常处理: 如果repetition的类型不在0-11范围之内,那么因为认为是一个fatal error Type 0repetition 不应该是一个cell里面的第一个repetition类型。

7.7 POINT LISTS

7.7.1 point-list 数据类型是用来表示多边形(polygons)或者paths的几何坐标。 它有五种类型的表示方式, 由一个无符号整数来表示它的类型。它的结构是首先由一个无符号整数表示它的类型,然后接着一系列的delta数据。 一个polygon或者path的初始顶点坐标(x,y) 是在POLYGON 或者PATH record 里面指定它并不是point-list数据结构中的一部分。顶点的个数 vertex-count是一个unsigned-integer 表示的是points的个数或者deltas的个数, 这个vertex-count并不包括初始顶点,也不包括隐藏并没有明确说明的顶点。

这里列出了五种point-list的结构。

译者解读:

point list数据类型是用来画图形的,他可以画出边为直线的任意多边形的图形。point lists有五种类型。其结构可以分成三部分:第一部分表示类型,就是point list 类型;第二部分表示顶点的个数,用一个unsigned-integer类型表示;第三部分用delta表示多边形的边长度以及方向,由一串delta构成,每一个delta表示了多边形的一条边。

图形的起始位置并不包含在point lists数据结构中,图形的起始位置由POLYGON记录和PATH记录中的相关信息给出。

这里不对point list五种类型的数据格式进行具体说明,可以参考上面的table7-7 以及7.7.2到7.7.7节的说明。这里只对表中特别容易混淆或者不清楚的地方进行一些说明。

  1. 表中的vertex-count并不是表示顶点的个数,而是表示后面delta类型的数据的个数。有些多边形的边并不需要用delta来表示,比如最后一条边,总可以将起始顶点和最后顶点直接相连来得到。
  2. 表中所谓manhattan 就是指多边形图形的边只平行x轴或者y轴方向,而不会沿其他方向。
  3. 所谓octangular是指多边形的边只平行x轴或者y轴方向,或者与他们形成45度角方向,而不会沿其他方向。如果不是沿45度角认为出错。
  4. all-angle则表示多边形的边可能沿任何角度任何方向。

我们可以看几个例子,就拿上面的table 7-8和figure7-6为例子。Figure7-6和table7-8是对应的, figure7-6是根据table7-8中的数据画出来的。我们拿type 3为例,其他类似就不重复了。在Figure7- 6 中,(x,y)是表示画图的起始位置,虚线表示缺省暗示的线(这里的顶点不会统计在point-list 的vertex-count里面),不会在delta数据中体现出来。。

type3中,对应table7-8中的bit pattern为00000011,00000100,00010101,00100001,00110000, 00010011。首先第一个byte为00000011值为3表示类型3,对应table 7-7,可以看到后面是3-delta类型的数据。第二个byte为00000100值为4,表示后面有4个3-delta的数据。第三个byte为00010101,对照3-delta的数据格式,可以看到这是一个沿西北方向的线,长度为二进制的1010,也就是十进制的10。第三个byte为00010101,对照3-delta的数据格式,可以看到这是一个沿西北方向的线,这个3-delta数值大小为二进制的10,也就是十进制的2,所以线的长度为sqrt(2×2+2×2)。第四个byte为00100001,对照3-delta的数据格式,可以看到这是一个向北方向的线,这个3-delta数值大小为二进制的100,也就是十进制的4,所以线的长度为sqrt(4×4+4×4)。以此类推,最后一条线是缺省暗示的,将最后的一个点和起始点相连即可得到最后的一条直线(图上的虚线)。

7.7.8 异常处理:如果point-list的类型不在[0-5]之间,认为是fatal error.  For point-list types 0-1, successive coincident points and/or adjacent colinear edges are not permitted. A non-manhattan

implicit closing vector for a polygon using point-list type 2, or a non-octangular implicit closing vector for a polygon  using point-list type 3 should be treated as a fatal error. For polygons using point-list types 0-1, a vertex count which  is odd or less than 2 should be treated as a fatal error.

7.8 PROPERTY VALUES

7.8.1 属性值( property-value) 存放的是一个元素的属性值列表。它首先也是由一个表示类型的无符号整型开头,后面接着属性值本身或者一个引用号(reference number)。 属性值的表示有8中类型,用 Types 0-7 表示。

7.8.2 异常处理: 如果属性值不在[0-15]之间,认为是fatal error。 如果用propstring-reference-number 表示属性值,但是在同一个OASIS文件中在 PROPSTRING record中里面,并没有找到对应的引用号,那么认为是fatal error。

译者备注: 其实引用可以用引用号,也可以用element的名字来引用。但在实际中请严格使用引用号来做引用,而不要使用名称。

译者备注:

到这里,终于把OASIS标准中的数据结构讲完了。后面就讲6.2节里提到的BNF语法中提到的各个组成单元的定义了。开始之前最好重温一下6.2节的内容。

OASIS协议标准文档的解读_第一部分相关推荐

  1. OASIS协议标准文档的解读_第二部分

    8 CELL REFERENCING 8.1 跟GDSII文件一样, 在OASIS文件中, cells也是用名字来标识的.一个CELL record不仅要包括一个cell的定义,还要包括它的名字. P ...

  2. python 全栈开发,Day48(标准文档流,块级元素和行内元素,浮动,margin的用法,文本属性和字体属性)...

    昨日内容回顾 高级选择器: 后代选择 : div p 子代选择器 : div>p 并集选择器: div,p 交集选择器: div.active属性选择器: [属性~='属性值'] 伪类选择器 a ...

  3. 05-CSS 权重 盒模型 标准文档流 浮动

    一.权重问题 1.1. !important 标记 可以通过 k : v !important 来给一个属性提高权重,这个属性的权重是无穷大的. <style>.spac2{color: ...

  4. 支付宝接口程序、文档及解读(ASP.NET)

    支付宝接口程序.文档及解读(ASP.NET) 最近需要为网站加入支付宝的充值接口,而目前关于支付宝接口开发的资料比较杂乱,这里就我此次开发所用到的资料进行汇总整理,希望能够帮助需要的朋友. 开发步骤: ...

  5. 付宝接口程序、文档及解读(ASP.NET) 學習

    支付宝接口程序.文档及解读(ASP.NET) 2009-11-03 14:45 by LanceZhang, 39 visits, 网摘, 收藏, 编辑 最近需要为网站加入支付宝的充值接口,而目前关于 ...

  6. python3 chm文档下载_python3.7.0官方参考文档 最新api文档 chm_Python教程_源雷技术空间...

    资源名称:python3.7.0官方参考文档 最新api文档 chm 1.新语法特性: PEP 563, 推迟评估类型注释 2.向后不兼容语法更改: async 和 await 现在保留关键字 3.新 ...

  7. ITU-T的Recommendation和IETF的RFC标准文档的下载地址

    转载:转自https://blog.csdn.net/foolskindom/article/details/1882935,侵删 ITU-T官方网站主页: http://www.itu.int 标准 ...

  8. 做测试一定要知道的——软件测试流程和测试规范标准文档

    目录 1.目的 2.工作范围 3.工作职责 4.测试的流程 5.测试准备阶段 6.测试方法制定阶段 7.测试执行阶段 8.bug管理 9.标准文档 总结感谢每一个认真阅读我文章的人!!! 重点:配套学 ...

  9. 网站项目标准文档格式模版---网站项目建设流程概述(转)

     网站项目标准文档格式模版---网站项目建设流程概述(转) 一.概念 网站项目管理就是根据特定的规范.在预算范围内.按时完成的网站开发任务. 二.需求分析 项目立项 我们接到客户的业务咨询,经过双 ...

最新文章

  1. 华为王成录:把安卓最核心部分换得差不多了 手机升级鸿蒙OS 2.0水到渠成
  2. 补8.python之面相对象part.7(类相关函数的补充)
  3. Python之try except异常处理工作机制和案例解析
  4. websocket实现单聊
  5. asp.net Login控件基本属性及事件说明
  6. Python小白的数学建模课-B3. 新冠疫情 SIS模型
  7. 《精通Matlab数字图像处理与识别》一第6章 频率域图像增强
  8. 【BZOJ1500】[NOI2005]维修数列
  9. 深度学习——day8 读论文(2022 硕士毕业论文)大规模车辆路径问题的深度强化学习算法研究
  10. MATLAB五子棋游戏(双人对战,可悔棋)
  11. 风声日期时间选择器的一些小小的使用心得
  12. 信息系统项目管理师考试重点和难点分析
  13. 手机相机好坏测试软件,专业相机测试 画质表现均为中上等_手机评测-中关村在线...
  14. 互联网时代/数据分析时代,一张思维导图带你学习数据分析的思路
  15. 读书百客:《感遇·江南有丹橘》赏析
  16. 一键修复wpcap.dll文件丢失或出错
  17. 数独游戏(回溯算法)
  18. 【Spring教程】框架体系介绍
  19. 差分进化算法_基于状态估计反馈的策略自适应差分进化算法
  20. CP1202官方串口驱动

热门文章

  1. 易飞9安装和授权视频
  2. CSS选择器(id选择器,包含选择器,标签名选择器,类选择器,属性选择器,通配符选择器,伪类选择器,相邻选择器,选择器的优先级,子选择器)
  3. 【填坑】ImportError: no module named zbar
  4. 蓝桥杯单片机决赛(国赛)第十一届题目加代码
  5. 网络攻防技术(2021期末考试)
  6. 详解 Android 系统启动流程
  7. 项目二--Time类
  8. 选择4G工业路由器需要注意的细节
  9. staircase nim 经典组合游戏
  10. js-页面需展示大量图片时,采用lyz.delayLoading.min.js,图片在屏幕时加载显示