OASIS文件中的數據類型

Chapter 1  oasis文件簡介
oasis是用來表示光刻版圖的一種文件格式,上面記錄了光刻圖案。作爲gdsii文件的替代格式,和gdsii類似是一種流格式的文件。一般性的介紹可以google到。這裏就不再累述。
這篇文檔,是對參考文獻【1】的註釋和部分翻譯。第一爲了方便閱讀,對文獻【1】中的一些概念和例子進行了解讀說明;第二對文獻【1】中容易忽略和混淆的地方進行了強調,對沒有明確的但可以從其他地方推斷出來的一些內容進行了明確。
Chapter 2  oasis文件格式
是一種二進制流的文件格式。它採用變形的BNF語法來描述文件格式,BNF語法見參考文獻【1】中36.1節,oasis文件格式的描述見參考文獻【1】中36.2節。這裏不對那些內容進行重複敘述,只對文件進行部分說明強調。
1.  <magic-bytes> 按照標準是"%SEMI-OASIS<CR><NL>",但是各個廠商可能會有不同,可能廠商會加上自己的log。程序中出現了"BROA"作爲oasis文件格式的開頭字段。
2.  特別注意<geometry>、<element>和<name>字段中的大括號中的域是不能重複出現的,而<cell>和<oasis-file>中的大括號中的字段是可以重複出現的。在解析的時候要特別注意這點。
3.  注意到<oasis-file>中,除了自己的關鍵字START、CBLOCK、PAD和PROPERTY以外,還有兩個內嵌的結構,就是<cell>和<name>。其中<cell>中,第一個出現的字段是CELL,每一個<cell>中CELL會且僅會出現一次。因此可以把CELL作爲第二層解析的入口。而<name>中,由於這些關鍵字跟其他部分都不重複,而且在一個<name>中僅都只能出現一次,所以可以直接放在第一層解析。具體可以參見第五章。
Chapter 3  oasis數據類型
不同於普通的計算機編程語言的數據格式,oasis作爲一種流格式文件,有自己的數據類型表示方法。這些在參考文獻【1】中的第七章進行了說明。這裏對其中內容進行部分說明,以便方便查閱。一共有下面幾種類型的數據格式:
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。
3.1  integers類型說明
3.1.1  unsigned-integer
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。
3.1.2  signed-integer
知道了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。
3.2   real類型說明
real的數據類型是一個複合的數據類型,它由一個unsigned-integer的類型做爲開頭,後面加上若干個unsigned-integer或者1個ieee4 float或者1個ieee8 float的數據類型來組成。目前,它只定義了8種類型格式,從0到7。
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的數據格式
在參考文獻【1】中的第7.3.2節的table 4中,各個數值的計算就可以根據上表中的說明計算出來。
3.3   string類型說明
string數據類型是一個複合的數據類型,它由一個表示字符串長度的unsigned-integer類型數據做爲開頭,後面加上真正的字符串。
字符串可以分成三種:b-string(binary string), a-string(ascii string)和 n-string (name string).
3.4   delta類型說明
delta是代表幾何數據。簡單來說就是delta類型的數據中存放有長度和方向的信息。其中分成4種:1-delta, 2-delta, 3-delta和g-delta。分別進行說明
3.4.1   1- delta
1-delta是一種signed-integer的數據結構,其中signed-integer中的符號位就用來表示方向了;singed-integer中的表示數值的部分就用來表示長度。
我們舉個例子。比如二進制的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長度的一條線。
3.4.2   2- delta
2-delta是一種unsigned-integer的數據結構,其中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.4.3   3- delta
3-delta是一種unsigned-integer的數據結構,其中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)。
3.4.4   g- delta
g-delta有兩種形式,一種是用一個單一的unsigned-integer的數據來表示;第二種是用一對unsigned-integer的數據來表示。如果g-delta數據在文件中第一個出現的字節的最低位(bit0)是0,表示第一種類型的g-delta數據;如果是1,表示第二種類型的g-delta數據。
3.4.4.1   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,將這個點作爲頂點,和原來座標點相連畫一條直線)。
3.4.4.2   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軸平行的直線。
3.5   repetitions類型說明
在光刻版圖中,一個相同的圖形常常在多個位置重複出現。repetition就用來表示圖形重複出現的位置。repetitions其本質是分成三部分,第一部分表示類型,用一個unsigned-integer的數據來表示,一共有12種類型;第二部分表示維數,就是參考文獻【1】中7.6節中table6中的dimension,它表示了這個圖形重複出現的次數;第三部分是表示位置,就是各個重複出現的圖形應該出現在版圖中的哪個位置,就是參考文獻【1】中7.6節中table6中的space和displacement。
這裏先對modal variable進行說明。modal variable類似於文件中的內置的全局變量,存儲着比如element的放置位置、間隔等信息。當解析一個新的element的時候,element的相關值會存在這些變量裏面,後面的element如果不明確指定這些值,就用前面element的值來作爲自己的值。由於文件中很多數據是相同的,所以後面的記錄(record)中的參數,可能跟前面的一樣,所以它就可以省略這些參數,直接將前面record的參數作爲自己的參數,從而提高文件的壓縮性。
Table 3 repetitions類型說明
           
類型
format
位置座標
0
見文獻【1】中7.6節中table6
重複上一次repetition的數據。根據上一次repetition的類型和數據來重複本圖形的計算。比如上次是類型1的repetition,那麼現在也是類型1的repetition,並且dimension和space參數也相同
1
同上
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
同上
x-dimension=N-2,生成一個N列1行的矩陣。矩陣中每個元素表示一個重複的圖案。元素element(i)(i=0 , ... , N-1)的位置爲(i*x-space, 0)。
用來生成和x軸平行的重複圖案。
3
同上
y-dimension=M-2,生成一個1列M行的矩陣。矩陣中每個元素表示一個重複的圖案。元素element(j)(j=0 , ... , M-1)的位置爲(0, j*y-space)。
用來生成和y軸平行的重複圖案。
4
同上
x-dimension=N-2,生成一個N列1行的矩陣。矩陣中每個元素表示一個重複的圖案。元素element(i)(i=0 , ... , N-1)的位置爲(x-space0+ x-space1+...+ x-spacei, 0),其中x-space0=0。
用來生成和x軸平行的重複圖案。
5
同上
跟類型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
同上
y-dimension=M-2,生成一個1列M行的矩陣。矩陣中每個元素表示一個重複的圖案。元素element(j )(j=0 , ... , M-1)的位置爲(0, y-space0+ y-space1+...+ y-spacej),其中y-space0=0。
用來生成和y軸平行的重複圖案。
7
同上
跟類型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
同上
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
同上
dimension=P-2,生成一個P維的向量。向量中每個元素表示一個重複的圖案。元素element(k)(k=0 , ... , P-1)的位置爲(k*x-space, k*y-space),
用來生成沿對角方向的P維重複圖形的圖案。
10
同上
dimension=P-2,生成一個P維的向量。向量中每個元素表示一個重複的圖案。元素element(k)(k=0 , ... , P-1)的位置爲(x-space0+x-space1+...+x-spacek, y-space0+y-space1+...+y-spacek),
它可以用來生成沿任何方向任何位置的P維重複圖形的圖案。
11
同上
跟類型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維重複圖形的圖案。
 
 

3.6   point lists類型說明
point list數據類型是用來畫圖形的,他可以畫出邊爲直線的任意多邊形的圖形。point lists有五種類型。其結構可以分成三部分:第一部分表示類型,就是point list 類型;第二部分表示頂點的個數,用一個unsigned-integer類型表示;第三部分用delta表示多邊形的邊長度以及方向,由一串delta構成,每一個delta表示了多邊形的一條邊。
圖形的起始位置並不包含在point lists數據結構中,圖形的起始位置由POLYGON記錄和PATH記錄中的相關信息給出。
這裏不對point list五種類型的數據格式進行具體說明,可以參考參考文獻【1】中的7.7.1節中的table7。這裏只對表中特別容易混淆或者不清楚的地方進行一些說明。
(1)  表中的vertex-count並不是表示頂點的個數,而是表示後面delta類型的數據的個數。有些多邊形的邊並不需要用delta來表示,比如最後一條邊,總可以將起始頂點和最後頂點直接相連來得到。
(2)  表中所謂manhattan 就是指多邊形圖形的邊只平行x軸或者y軸方向,而不會沿其他方向。
(3)  所謂octangular是指多邊形的邊只平行x軸或者y軸方向,或者與他們形成45度角方向,而不會沿其他方向。如果不是沿45度角認爲出錯。
(4)  all-angle則表示多邊形的邊可能沿任何角度任何方向。
我們可以看幾個例子,就拿參考文獻【1】中的7.7.7中table 8和figure 6爲例子。figure 6和table8是對應的。我們拿type 3爲例,其他類似就不重複了。在Figure 6 中,(x,y)是表示畫圖的起始位置,虛線表示缺省暗示的線,不會在delta數據中體現出來。。
type3中,對應table 8中的bit pattern爲00000011,00000100,00010101,00100001,00110000, 00010011。首先第一個byte爲00000011值爲3表示類型3,對應文獻【1】中的7.7.1的table 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)。以此類推,最後一條線是缺省暗示的,將最後的一個點和起始點相連即可得到最後的一條直線(圖上的虛線)。
 
參考文檔
[1] OASISformat.pdf : SEMI P39-0304 OASIS - OPEN ARTWORK SYSTEM INTERCHANGE STANDARD,
————————————————
版權聲明:本文爲CSDN博主「內核中的洋蔥」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/uestc_huan/article/details/4074902

 

https://blog.csdn.net/uestc_huan/article/details/4074902

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章