🐡

GDSIIファイル解析① [レコードタイプ一覧]

に公開

概要

本ドキュメントは、GDSIIフォーマットを実践的に説明していきます。GDSIIフォーマットの基本構造、概念、歴史的な話は、以下のサイトで詳しく説明していますのでご覧ください。ここで、より具体的なフォーマットの理解を進めていきます。

https://zenn.dev/kenchanhichan/articles/ef8c6ffd38a197

では早速GDSIIのデータフォーマットを見ていきましょう。

レコードタイプ(Record Type)とは?

GDSIIファイルはバイナリ形式で構成されており、その形式は決まっています。

最初の2バイトは、レコード長です。バイナリ形式は数字の羅列で文章のように区切りがないため、最初にレコード長という終わりを指定しないと、どこからどこまでを一区切りとすればいいのか分かりません。次の1バイトはレコードタイプです。レコードタイプはGDSIIの規格で今回まとめる内容です。続く1バイトはデータ型で、以降は可変長です。

バイト位置 バイト数 内容 意味
0-1 2 レコード長 0x0006 このレコード全体が6バイト
2 1 レコードタイプ 0x00 HEADERレコード
3 1 データ型 0x02 INT16形式のデータ
4~ 可変 ペイロード 0x0258 実際のデータ内容

GDSIIはこのように4バイトの固定長と、以降の可変長を一つとして羅列したデータをしています。

レコードタイプは以下のような種類があります。ここで内容をまとめました。

レコードタイプ一覧

ライブラリレベルのレコード

コード 16進 ニモニック データ型 説明
0 0x00 HEADER 2バイト符号付き整数 バージョン番号。GDSIIストリームフォーマットのバージョンを示す。
1 0x01 BGNLIB 2バイト符号付き整数 ライブラリ開始。最終修正日時と最終アクセス日時を含む(年月日時分秒 × 2)。
2 0x02 LIBNAME ASCII文字列 ライブラリ名。ライブラリの識別に使用。最大44バイト。
3 0x03 UNITS 8バイト実数 ユーザー単位とデータベース単位の定義。2つの8バイト実数で構成。座標値の物理的スケーリングに使用。
4 0x04 ENDLIB データなし ライブラリ終了。GDSIIファイル全体の終了を示す。

構造(セル)レベルのレコード

コード 16進 ニモニック データ型 説明
5 0x05 BGNSTR 2バイト符号付き整数 構造定義開始。生成日時と最終修正日時を含む(年月日時分秒 × 2)。
6 0x06 STRNAME ASCII文字列 構造名。セルの識別に使用。最大32文字。A-Z、a-z、0-9、_、$、?が使用可能。
7 0x07 ENDSTR データなし 構造定義終了。構造内のすべての要素の終了を示す。

要素(エレメント)タイプ

コード 16進 ニモニック データ型 説明
8 0x08 BOUNDARY データなし ポリゴン要素開始。塗りつぶされた図形を定義する要素の開始マーカー。
9 0x09 PATH データなし パス要素開始。一定幅の線分集合を定義する要素の開始マーカー。
10 0x0A SREF データなし 単一構造参照開始。他の構造をこの位置に1度だけ配置する要素。
11 0x0B AREF データなし 構造配列参照開始。他の構造をM×N配列で規則的に配置する要素。
12 0x0C TEXT データなし テキスト要素開始。テキスト文字列を表示する要素。
21 0x15 NODE データなし ノード要素開始。電気的接続情報を格納する要素(グラフィカル表示なし)。
45 0x2D BOX データなし ボックス要素開始。枠線のみの矩形要素(塗りつぶしなし)。

属性指定レコード

コード 16進 ニモニック データ型 説明
13 0x0D LAYER 2バイト符号付き整数 レイヤー番号。製造プロセスの層を指定(0~63、または拡張で0~255)。
14 0x0E DATATYPE 2バイト符号付き整数 データ型(用途分類)。レイヤー内での細分類(0~63、または拡張で0~255)。
15 0x0F WIDTH 4バイト符号付き整数 線幅。パス要素の幅をデータベース単位で指定。負の値は絶対線幅を示す。
16 0x10 XY 4バイト符号付き整数 座標配列。複数の(x,y)座標ペア。各値はデータベース単位の整数。
22 0x16 TEXTTYPE 2バイト符号付き整数 テキスト型。テキスト要素のカテゴリー分類(0~63、または拡張で0~255)。
42 0x2A NODETYPE 2バイト符号付き整数 ノード型。ノード要素の意味分類。
46 0x2E BOXTYPE 2バイト符号付き整数 ボックス型。ボックス要素の分類。

要素終了レコード

コード 16進 ニモニック データ型 説明
17 0x11 ENDEL データなし 要素終了。BOUNDARY、PATH、SREF、AREF、TEXT、NODE、BOXなどの要素の終了を示す。

参照要素用レコード

コード 16進 ニモニック データ型 説明
18 0x12 SNAME ASCII文字列 参照構造名。SREFやAREFで参照される構造の名前を指定。
19 0x13 COLROW 2バイト符号付き整数 列数と行数。AREF用。2つの2バイト整数(列数、行数)。最大値は32,767。

変換・倍率・回転レコード

コード 16進 ニモニック データ型 説明
26 0x1A STRANS ビット配列 変換フラグ。SREF、AREF、TEXT用。ビット15:反転フラグ、ビット14:絶対倍率、ビット1:絶対角度。
27 0x1B MAG 8バイト実数 倍率(スケール)。デフォルト1.0。セルの拡大・縮小に使用。
28 0x1C ANGLE 8バイト実数 回転角度。度単位で反時計方向。デフォルト0。

テキスト関連レコード

コード 16進 ニモニック データ型 説明
23 0x17 PRESENTATION ビット配列 テキスト配置。ビット0-1:水平配置(00:左、01:中央、10:右)、ビット2-3:垂直配置(00:上、01:中央、10:下)、ビット4-5:フォント。
25 0x19 STRING ASCII文字列 テキスト内容。テキスト要素の実際の文字列。最大512文字。
33 0x21 PATHTYPE 2バイト符号付き整数 パスタイプ。PATH要素の端部形状(丸型、四角型など)。

ライブラリ管理レコード

コード 16進 ニモニック データ型 説明
31 0x1F REFLIBS ASCII文字列 参照ライブラリ名。外部ライブラリの参照。各44バイト。
32 0x20 FONTS ASCII文字列 フォント定義ファイル名。テキスト用フォントの定義。各44バイト。
34 0x22 GENERATIONS 2バイト符号付き整数 世代数。保持する旧ファイルコピーの数。
35 0x23 ATTRTABLE ASCII文字列 属性テーブル。要素プロパティと組み合わせて使用。
50 0x32 TAPENUM 2バイト符号付き整数 テープ番号。元々はテープ出力用。
51 0x33 TAPECODE 2バイト符号付き整数 テープコード。元々はテープ出力用。
54 0x36 FORMAT 2バイト符号付い整数 フォーマットタイプ。ファイルフォーマットの種類。

マスク・フォーマット関連レコード

コード 16進 ニモニック データ型 説明
55 0x37 MASK ASCII文字列 マスクレイヤーリスト。フィルタードストリームファイルで使用。
56 0x38 ENDMASKS データなし マスク記述終了。MASK レコードの最後に必ず出現。

プロパティ・フラグレコード

コード 16進 ニモニック データ型 説明
38 0x26 ELFLAGS 2バイト符号付き整数 要素フラグ。ビット15:テンプレートデータ、ビット14:外部データ。
43 0x2B PROPATTR 2バイト符号付き整数 プロパティ属性番号。カスタムプロパティの属性ID(1~127)。
44 0x2C PROPVALUE ASCII文字列 プロパティ値。PROPATTR で指定された属性の値。
47 0x2F PLEX 4バイト符号付き整数 プレックス番号。複雑な要素グループの識別。

レコードタイプの解説

レコード長は必ず偶数バイト長と決まっています。固定の4バイトはレコードヘッダーと呼び、もしも奇数バイトになった場合でもデータはヌル文字で埋められて偶数バイトに調整します。それでは順番に書くレコードの記載方法を見ていきましょう。

0 - HEADER(ファイルバージョン)

項目 内容
レコードコード 0x00
ニモニック HEADER
データ型 2バイト符号付き整数
説明 GDSIIファイルの最初に出現するレコード。ストリームフォーマットのバージョン番号を含みます。

詳細説明:

GDSIIファイルは必ずHEADERレコードで開始します。このレコードはファイルが従うGDSII仕様のバージョンを示します。

ペイロード内容:

  • バージョン番号(2バイト)
    • 0x0000 = v3.0
    • 0x0003 = v4.0
    • 0x0004 = v5.0
    • 0x0005 = v6.0
    • 0x0258 = v600(最も一般的な値)

使用例:

ファイルの先頭6バイト:
00 06 00 02 02 58

解析:
バイト0-1: 0x0006 = 6バイト(レコード全体の長さ)
バイト2:   0x00 = HEADER
バイト3:   0x02 = INT16型データ
バイト4-5: 0x0258 = バージョン v600

1 - BGNLIB(ライブラリ開始)

項目 内容
レコードコード 0x01
ニモニック BGNLIB
データ型 2バイト符号付き整数(12個)
説明 ライブラリの開始を示す。ライブラリの作成日時と最終アクセス日時を含みます。

詳細説明:

HEADERの次に出現するレコード。ライブラリセクションの開始と、そのライブラリが作成・修正された日時情報を記録します。

ペイロード内容:

順序 内容 単位 説明
1 年(最終修正) 2バイト 西暦(例:2024)
2 月(最終修正) 2バイト 1~12
3 日(最終修正) 2バイト 1~31
4 時(最終修正) 2バイト 0~23
5 分(最終修正) 2バイト 0~59
6 秒(最終修正) 2バイト 0~59
7 年(最終アクセス) 2バイト 西暦
8 月(最終アクセス) 2バイト 1~12
9 日(最終アクセス) 2バイト 1~31
10 時(最終アクセス) 2バイト 0~23
11 分(最終アクセス) 2バイト 0~59
12 秒(最終アクセス) 2バイト 0~59

合計: 24バイト(12個 × 2バイト)

レコード全体: 28バイト(ヘッダ4バイト + ペイロード24バイト)

使用例:

レコード例:
00 1C 01 02 ... (12個の2バイト整数)

解析:
バイト0-1: 0x001C = 28バイト
バイト2:   0x01 = BGNLIB
バイト3:   0x02 = INT16型データ
バイト4-5: 2024(年・最終修正)
バイト6-7: 1(月)
バイト8-9: 15(日)
...

2 - LIBNAME(ライブラリ名)

項目 内容
レコードコード 0x02
ニモニック LIBNAME
データ型 ASCII文字列
説明 ライブラリの名前を格納するレコード。UNIX ファイル命名規約に従う必要があります。

詳細説明:

ライブラリの識別名を格納します。これはファイル名と異なり、GDSIIファイル内に埋め込まれるメタデータです。

制約事項:

  • UNIX ファイル命名規約に従う必要がある
  • 拡張子を含む(通常は .sf または .db
  • 最大44バイト

使用例:

レコード例:
00 0C 02 06 47 43 44 00

解析:
バイト0-1: 0x000C = 12バイト
バイト2:   0x02 = LIBNAME
バイト3:   0x06 = ASCII文字列型
バイト4-11: "GCD" + NULL(パディング)

実際の文字列:"GCD_DESIGN.db"

3 - UNITS(座標単位定義)

項目 内容
レコードコード 0x03
ニモニック UNITS
データ型 8バイト実数(2個)
説明 ユーザー単位とデータベース単位の対応関係を定義します。座標スケーリングの基準。

詳細説明:

GDSIIファイル内のすべての座標値はデータベース単位(database units)で格納されます。UNITSレコードはこれらの座標値を物理的な寸法に変換するための定義です。

ペイロード内容:

順序 名前 データ型 説明
1 ユーザー単位のサイズ 8バイト実数 データベース単位における1ユーザー単位のサイズ
2 メートル単位での値 8バイト実数 データベース単位における実際のメートル単位での値

計算方法:

1ユーザー単位のメートル値 = 第2値 ÷ 第1値

使用例1(マイクロメートル単位):

第1値: 0.001 (1ユーザー単位 = 0.001マイクロメートル)
第2値: 1e-9  (1ユーザー単位 = 1ナノメートル)

計算: 1e-9 ÷ 0.001 = 1e-6 = 1マイクロメートル
→ 1ユーザー単位 = 1マイクロメートル

使用例2(ナノメートル単位):

第1値: 1.0 (1ユーザー単位 = 1ナノメートル)
第2値: 1e-9 (メートル単位)

計算: 1e-9 ÷ 1.0 = 1e-9 = 1ナノメートル
→ 1ユーザー単位 = 1ナノメートル

レコード全体: 20バイト(ヘッダ4バイト + ペイロード16バイト)

4 - ENDLIB(ライブラリ終了)

項目 内容
レコードコード 0x04
ニモニック ENDLIB
データ型 データなし
説明 ライブラリセクションの終了を示す。GDSIIファイルの最後を示すマーカー。

詳細説明:

GDSIIファイル全体の終了を示します。このレコード以降は通常、ファイルの内容はありません。

ペイロード内容:

  • なし(ヘッダのみ)

レコード全体: 4バイト(ヘッダのみ)

使用例:

ファイルの末尾:
00 04 04 00

解析:
バイト0-1: 0x0004 = 4バイト
バイト2:   0x04 = ENDLIB
バイト3:   0x00 = データなし

構造(セル)レベルのレコード

5 - BGNSTR(構造定義開始)

項目 内容
レコードコード 0x05
ニモニック BGNSTR
データ型 2バイト符号付き整数(12個)
説明 構造(セル)定義の開始を示す。BGNLIB と同じ形式で生成日時と修正日時を含む。

詳細説明:

構造(セル)は、複数の要素(ポリゴン、パス、参照など)をグループ化した単位です。BGNSTRはその構造の開始を示し、生成日時と修正日時を記録します。

ペイロード内容:

BGNLIBと同じ形式で、以下の12個の2バイト整数を含みます:

順序 内容 値の範囲
1-6 生成日時(年月日時分秒) 各項目参照
7-12 最終修正日時(年月日時分秒) 各項目参照

合計: 24バイト

レコード全体: 28バイト

使用例:

レコード例:
00 1C 05 02 07 E8 01 0F 0A 1E 32 07 E8 01 0F 0A 23 3C

解析:
バイト0-1: 0x001C = 28バイト
バイト2:   0x05 = BGNSTR
バイト3:   0x02 = INT16型データ
バイト4以降: 日時情報(12個の2バイト整数)

6 - STRNAME(構造名)

項目 内容
レコードコード 0x06
ニモニック STRNAME
データ型 ASCII文字列
説明 構造(セル)の名前を格納するレコード。構造の識別に使用。

詳細説明:

構造の名前をASCII文字列で格納します。この名前は、他の構造から参照する際に使用されます。

命名規則:

  • 最大32文字
  • 使用可能な文字:
    • A~Z
    • a~z
    • 0~9
    • アンダースコア (_)
    • クエスチョンマーク (?)
    • ドルサイン ($)

使用例:

有効な名前:
- INVERTER
- AND2_X1
- BUFFER_1
- cell_001

無効な名前:
- INVERTER-1(ハイフン不可)
- cell@1(@ 記号不可)
- INVERTER BUFFER(スペース不可)

レコード例:

00 0E 06 06 49 4E 56 45 52 54 45 52 00

解析:
バイト0-1: 0x000E = 14バイト
バイト2:   0x06 = STRNAME
バイト3:   0x06 = ASCII文字列型
バイト4-13: "INVERTER" + NULL(パディング)

7 - ENDSTR(構造定義終了)

項目 内容
レコードコード 0x07
ニモニック ENDSTR
データ型 データなし
説明 構造定義の終了を示す。この構造内のすべての要素定義が完了したことを示す。

詳細説明:

BGNSTRで開始した構造定義を終了します。ENDSTRの次には、別の構造定義(BGNSTR)またはENDLIBが続きます。

ペイロード内容:

  • なし(ヘッダのみ)

レコード全体: 4バイト

要素(エレメント)タイプレコード

8 - BOUNDARY(ポリゴン要素開始)

項目 内容
レコードコード 0x08
ニモニック BOUNDARY
データ型 データなし
説明 ポリゴン(塗りつぶし図形)要素の開始マーカー。

詳細説明:

BOUNDARY要素は、塗りつぶされた多角形領域を定義します。集積回路の金属配線、トランジスタゲート、拡散領域などを表現するために使用されます。

続く必須レコード:

  1. LAYER(レイヤー番号)
  2. DATATYPE(データ型)
  3. XY(座標配列)
  4. ENDEL(要素終了)

座標の制約:

  • 最小: 4つの座標ペア(四角形)
  • 最大: 200つの座標ペア
  • 最初と最後の座標は同じ(閉じた多角形)

使用例:

BOUNDARY
LAYER 1
DATATYPE 0
XY -1000 -1000  1000 -1000  1000 1000  -1000 1000  -1000 -1000
ENDEL

9 - PATH(パス要素開始)

項目 内容
レコードコード 0x09
ニモニック PATH
データ型 データなし
説明 パス(ポリライン)要素の開始マーカー。一定幅の線分集合。

詳細説明:

PATH要素は、一定の幅を持つ線分の経路を定義します。配線やVIAの描画に使用されます。

続く必須レコード:

  1. LAYER(レイヤー番号)
  2. DATATYPE(データ型)
  3. XY(座標配列)
  4. ENDEL(要素終了)

オプションレコード:

  • PATHTYPE(端部形状)
  • WIDTH(線幅)

座標の制約:

  • 最小: 2つの座標ペア(開始点と終了点)
  • 最大: 200つの座標ペア

10 - SREF(単一構造参照要素開始)

項目 内容
レコードコード 0x0A
ニモニック SREF
データ型 データなし
説明 単一構造参照要素の開始マーカー。他の構造(セル)をこの位置に1度だけ配置。

詳細説明:

SREF要素により、別の構造を参照・配置できます。これにより、設計の再利用性が向上し、ファイルサイズが削減されます。同じセルを複数の場所で使用する場合に有効です。

続く必須レコード:

  1. SNAME(参照構造の名前)
  2. XY(配置位置)
  3. ENDEL(要素終了)

オプションレコード:

  • STRANS(変換フラグ)
  • MAG(倍率)
  • ANGLE(回転角)

使用例:

SREF
SNAME "INVERTER"
STRANS 0
MAG 1.0
ANGLE 0
XY 5000 3000
ENDEL

11 - AREF(構造配列参照要素開始)

項目 内容
レコードコード 0x0B
ニモニック AREF
データ型 データなし
説明 構造配列参照要素の開始マーカー。他の構造をM×N配列で規則的に配置。

詳細説明:

AREF要素により、同じ構造を複数の行と列の配列で規則的に配置できます。メモリセルアレイなど、大量の同一要素の配置に非常に効果的です。ファイルサイズを大幅に削減できます。

続く必須レコード:

  1. SNAME(参照構造の名前)
  2. COLROW(列数と行数)
  3. XY(3つの座標ペア)
  4. ENDEL(要素終了)

オプションレコード:

  • STRANS(変換フラグ)
  • MAG(倍率)
  • ANGLE(回転角)

XY座標の意味:

  • 第1座標: 配列の原点(基準点)
  • 第2座標: 列方向の最後のセル位置
  • 第3座標: 行方向の最後のセル位置

使用例:

AREF
SNAME "BITCELL"
COLROW 64 32
XY 0 0  512000 0  0 256000
ENDEL

(64列 × 32行のセルアレイ)

12 - TEXT(テキスト要素開始)

項目 内容
レコードコード 0x0C
ニモニック TEXT
データ型 データなし
説明 テキスト要素の開始マーカー。文字列を配置するために使用。

詳細説明:

テキスト要素により、設計図面にラベルやアノテーション(注釈)を追加できます。

続く必須レコード:

  1. LAYER(レイヤー番号)
  2. TEXTTYPE(テキスト型)
  3. XY(テキスト位置・1つの座標ペアのみ)
  4. STRING(テキスト内容)
  5. ENDEL(要素終了)

オプションレコード:

  • PRESENTATION(配置・フォント指定)
  • PATHTYPE
  • WIDTH
  • STRANS(変換フラグ)
  • MAG(倍率)
  • ANGLE(回転角)

使用例:

TEXT
LAYER 100
TEXTTYPE 0
PRESENTATION 0
XY 5000 3000
STRING "Signal_A"
ENDEL

21 - NODE(ノード要素開始)

項目 内容
レコードコード 0x15
ニモニック NODE
データ型 データなし
説明 ノード要素の開始マーカー。電気的接続情報を格納(グラフィカル表示なし)。

詳細説明:

ノード要素は、レイアウト検証(LVS: Layout vs Schematic)時の接続情報を格納します。視覚的には表示されませんが、回路情報として重要です。

続く必須レコード:

  1. LAYER(レイヤー番号)
  2. NODETYPE(ノード型)
  3. XY(ノード位置・1~50つの座標ペア)
  4. ENDEL(要素終了)

45 - BOX(ボックス要素開始)

項目 内容
レコードコード 0x2D
ニモニック BOX
データ型 データなし
説明 ボックス要素の開始マーカー。枠線のみの矩形(塗りつぶしなし)。

詳細説明:

BOX要素はBOUNDARYとは異なり、枠線のみで塗りつぶされません。製造工程では出力されず、設計情報のみです。

続く必須レコード:

  1. LAYER(レイヤー番号)
  2. BOXTYPE(ボックス型)
  3. XY(5つの座標ペア・最初と最後が同じ矩形)
  4. ENDEL(要素終了)

属性指定レコード

13 - LAYER(レイヤー番号)

項目 内容
レコードコード 0x0D
ニモニック LAYER
データ型 2バイト符号付き整数
説明 要素が配置されるレイヤー番号を指定。製造プロセスの各層に対応。

詳細説明:

レイヤーは、集積回路の製造プロセスにおける各々の層を表します。例えば、Metal1層、Poly層、Via層など。

値の範囲:

  • 標準: 0~255
  • 通常は0~63が使用される

一般的なレイヤー番号:

レイヤー番号 用途 説明
0 Poly ゲート多層膜
1 Metal1 第1層配線
2 Metal2 第2層配線
10 Via1 Metal1-Metal2間のVIA
50 N-Well N型ウェル
51 P-Substrate P型基板

使用例:

BOUNDARY
LAYER 1        ← Metal1層に配置
DATATYPE 0
XY ...
ENDEL

14 - DATATYPE(データ型)

項目 内容
レコードコード 0x0E
ニモニック DATATYPE
データ型 2バイト符号付き整数
説明 レイヤー内での用途分類。同じレイヤーでも複数の用途を区別。

詳細説明:

DATATYPEにより、同じレイヤーでも異なる用途の要素を区別できます。例えば、Metal1層内でも、標準配線と特殊配線を分類できます。

値の範囲:

  • 標準: 0~255
  • 通常は0が使用される

一般的な使用例:

DATATYPE 用途
0 標準配線
1 特殊配線(シールド等)
2 配線接続部
10 マスク領域

使用例:

BOUNDARY
LAYER 1
DATATYPE 0      ← Metal1層の標準配線
XY ...
ENDEL

BOUNDARY
LAYER 1
DATATYPE 2      ← Metal1層の接続部
XY ...
ENDEL

15 - WIDTH(線幅)

項目 内容
レコードコード 0x0F
ニモニック WIDTH
データ型 4バイト符号付き整数
説明 パス要素やテキスト線の幅をデータベース単位で指定。

詳細説明:

PATH要素の線幅を指定します。負の値は特殊な意味を持ちます。

値の意味:

  • 正の値: 相対幅。倍率(MAG)の影響を受ける。
  • 負の値: 絶対幅。倍率の影響を受けない。

使用例:

PATH
LAYER 6
DATATYPE 0
WIDTH 1000        ← 線幅1000単位(通常10nm = 100nm幅)
XY ...
ENDEL

PATH
LAYER 6
DATATYPE 0
WIDTH -500        ← 絶対幅500単位(常に500単位)
XY ...
ENDEL

未指定時: 0が仮定される

16 - XY(座標配列)

項目 内容
レコードコード 0x10
ニモニック XY
データ型 4バイト符号付き整数の配列
説明 要素の座標データ。複数の(x,y)座標ペアで構成。

詳細説明:

XY座標配列は、各要素タイプごとに異なる座標ペア数が必要です。すべての座標値はデータベース単位で表現されます。

要素タイプごとの座標ペア数:

要素タイプ 座標ペア数 説明
BOUNDARY 4~200 最小4ペア(四角形)、最初と最後は同一
PATH 2~200 開始点と終了点
SREF 1 配置位置(1つの座標のみ)
AREF 3 原点、列方向最後、行方向最後
TEXT 1 テキスト位置(1つの座標のみ)
NODE 1~50 ノード位置
BOX 5 矩形(最初と最後は同一)

データ形式:

各座標ペア = X座標(4バイト整数)+ Y座標(4バイト整数)

使用例:

BOUNDARY
LAYER 1
DATATYPE 0
XY
  0       0
  10000   0
  10000   10000
  0       10000
  0       0
ENDEL

22 - TEXTTYPE(テキスト型)

項目 内容
レコードコード 0x16
ニモニック TEXTTYPE
データ型 2バイト符号付き整数
説明 テキスト要素の分類。テキストの用途を区別。

詳細説明:

TEXT要素の種類を分類します。例えば、異なるフォントやサイズが必要なテキストを区別できます。

値の範囲: 0~255

一般的な使用例:

TEXTTYPE 用途
0 ラベル
1 注釈
2 スペシャルラベル

42 - NODETYPE(ノード型)

項目 内容
レコードコード 0x2A
ニモニック NODETYPE
データ型 2バイト符号付き整数
説明 ノード要素の種類を分類。電気的接続の意味を示す。

詳細説明:

ノード要素の意味をLVS検証時に区別するために使用されます。

値の範囲: 0~255

一般的な使用例:

NODETYPE 意味
0 Power(電源)
1 Ground(グラウンド)
2 Signal(信号)

46 - BOXTYPE(ボックス型)

項目 内容
レコードコード 0x2E
ニモニック BOXTYPE
データ型 2バイト符号付き整数
説明 ボックス要素の分類。ボックスの用途を区別。

詳細説明:

ボックス要素の種類を分類します。

値の範囲: 0~255

要素終了レコード

17 - ENDEL(要素終了)

項目 内容
レコードコード 0x11
ニモニック ENDEL
データ型 データなし
説明 要素定義の終了を示すマーカー。

詳細説明:

すべての要素(BOUNDARY、PATH、SREF、AREF、TEXT、NODE、BOX)は、ENDELレコードで終了します。

ペイロード内容: なし(ヘッダのみ)

レコード全体: 4バイト

使用例:

BOUNDARY
LAYER 1
DATATYPE 0
XY ...
ENDEL       ← BOUNDARY要素の終了

PATH
LAYER 6
DATATYPE 0
WIDTH 100
XY ...
ENDEL       ← PATH要素の終了

参照要素用レコード

18 - SNAME(参照構造名)

項目 内容
レコードコード 0x12
ニモニック SNAME
データ型 ASCII文字列
説明 SREF/AREFで参照される構造の名前を指定。

詳細説明:

SREF またはAREF要素で「どの構造を参照するか」を指定します。この名前は、STRNAMEで定義された構造名と一致する必要があります。

命名規則: STRNAMEと同じ(A-Z、a-z、0-9、_、?、$、最大32文字)

使用例:

SREF
SNAME "INVERTER"     ← "INVERTER"という名前の構造を参照
XY 5000 3000
ENDEL

AREF
SNAME "BITCELL"      ← "BITCELL"という名前の構造を配列参照
COLROW 64 32
XY ...
ENDEL

19 - COLROW(列数と行数)

項目 内容
レコードコード 0x13
ニモニック COLROW
データ型 2バイト符号付き整数(2個)
説明 AREF配列の列数と行数を指定。

詳細説明:

AREF要素がM×Nの配列の場合、その配列のサイズを定義します。

ペイロード内容:

順序 内容 データ型 値の範囲
1 列数 2バイト整数 1~32,767
2 行数 2バイト整数 1~32,767

使用例:

AREF
SNAME "MEMORY_CELL"
COLROW 8 4          ← 8列 × 4行のアレイ
XY 0 0  8000 0  0 4000
ENDEL

変換・倍率・回転レコード

26 - STRANS(変換フラグ)

項目 内容
レコードコード 0x1A
ニモニック STRANS
データ型 ビット配列(2バイト)
説明 SREF、AREF、TEXTの変換操作を制御するフラグ。

詳細説明:

複数の変換操作を1バイト内の複数ビットで制御します。

ビット配置:

ビット位置 名称 説明
0(左端) 反転フラグ 設定時、X軸について反転してから回転
13 絶対倍率 設定時、倍率が親のMAGの影響を受けない
14 絶対角度 設定時、角度が親のANGLEの影響を受けない
その他 予約 将来使用予定。0にクリアすること

使用例:

SREF
SNAME "INVERTER"
STRANS 0x0001      ← ビット0が設定:X軸反転
MAG 1.0
ANGLE 45
XY 5000 5000
ENDEL

SREF
SNAME "BUFFER"
STRANS 0x6000      ← ビット13、14設定:絶対倍率・絶対角度
MAG 0.5
ANGLE 90
XY 10000 5000
ENDEL

27 - MAG(倍率)

項目 内容
レコードコード 0x1B
ニモニック MAG
データ型 8バイト実数
説明 構造またはテキストの拡大・縮小倍率。

詳細説明:

SREF、AREF、TEXT要素を拡大・縮小する際に使用します。

値の例:

説明
1.0 デフォルト(縮小・拡大なし)
2.0 2倍に拡大
0.5 半分に縮小
0.8 80%に縮小

未指定時: 1.0が仮定される

使用例:

SREF
SNAME "INVERTER"
MAG 1.5            ← 1.5倍に拡大
ANGLE 0
XY 5000 5000
ENDEL

28 - ANGLE(回転角度)

項目 内容
レコードコード 0x1C
ニモニック ANGLE
データ型 8バイト実数
説明 構造またはテキストの回転角度(度、反時計方向)。

詳細説明:

SREF、AREF、TEXT要素の回転角度を指定します。角度は反時計方向(CCW: Counter-ClockWise)で計測されます。

値の例:

説明
0 回転なし(デフォルト)
90 90度反時計方向回転
180 180度反時計方向回転
270 270度反時計方向回転(=90度時計方向)
45 45度反時計方向回転

未指定時: 0が仮定される

使用例:

SREF
SNAME "BUFFER"
STRANS 0
MAG 1.0
ANGLE 45           ← 45度反時計方向回転
XY 5000 5000
ENDEL

テキスト関連レコード

23 - PRESENTATION(テキスト配置・フォント)

項目 内容
レコードコード 0x17
ニモニック PRESENTATION
データ型 ビット配列(2バイト)
説明 テキストの配置(左右中央、上中下)とフォントを指定。

詳細説明:

テキストの表示位置とフォント選択をビットフラグで制御します。

ビット配置:

ビット範囲 名称 説明
10-11 フォント番号 00 フォント0
01 フォント1
10 フォント2
11 フォント3
12-13 垂直配置 00 上(top)
01 中央(middle)
10 下(bottom)
14-15 水平配置 00 左(left)
01 中央(center)
10 右(right)
0-9 予約 0 将来使用予定

未指定時: 左上配置、フォント0が仮定される

使用例:

TEXT
LAYER 100
TEXTTYPE 0
PRESENTATION 0x4800    ← 中央配置・下・フォント2
XY 5000 3000
STRING "Signal_A"
ENDEL

25 - STRING(テキスト内容)

項目 内容
レコードコード 0x19
ニモニック STRING
データ型 ASCII文字列
説明 テキスト要素の実際の文字列内容。

詳細説明:

TEXT要素に表示される文字列を指定します。

制約事項:

  • 最大512文字
  • ASCII文字のみ
  • 奇数文字の場合、NULL文字でパディング

使用例:

TEXT
LAYER 100
TEXTTYPE 0
XY 5000 3000
STRING "POWER_SUPPLY"
ENDEL

33 - PATHTYPE(パス端部形状)

項目 内容
レコードコード 0x21
ニモニック PATHTYPE
データ型 2バイト符号付き整数
説明 PATH要素の端部形状を指定。

詳細説明:

PATH要素の両端の形状を制御します。

値と対応する形状:

名称 説明
0 Square(デフォルト) 四角い端部。端点の座標で終わる。
1 Round 丸い端部。端点を中心とする半円。
2 Extended 拡張端部。端点から線幅の半分だけ延長。

未指定時: 0(Square)が仮定される

使用例:

PATH
LAYER 6
DATATYPE 0
PATHTYPE 1         ← 丸い端部
WIDTH 1000
XY ...
ENDEL

ライブラリ管理レコード

31 - REFLIBS(参照ライブラリ)

項目 内容
レコードコード 0x1F
ニモニック REFLIBS
データ型 ASCII文字列
説明 参照ライブラリの名前を指定。最大15個のライブラリ。

詳細説明:

このファイルから外部ライブラリを参照する場合に、その外部ライブラリの名前を指定します。

制約事項:

  • 最大15個のライブラリを指定可能
  • 各ライブラリ名は44バイト
  • ディレクトリ指定可能("/" で区切る)
  • 拡張子指定可能("." で区切る)

使用例:

REFLIBS "standard_cell.db" "analog_lib.db"

32 - FONTS(フォント定義ファイル)

項目 内容
レコードコード 0x20
ニモニック FONTS
データ型 ASCII文字列
説明 テキスト用フォント定義ファイルの名前。

詳細説明:

テキスト表示用のフォント定義ファイルを4つまで指定できます。

構成:

  • フォント0定義(44バイト)
  • フォント1定義(44バイト)
  • フォント2定義(44バイト)
  • フォント3定義(44バイト)

使用例:

FONTS "font0.def" "font1.def" "font2.def" "font3.def"

34 - GENERATIONS(世代数)

項目 内容
レコードコード 0x22
ニモニック GENERATIONS
データ型 2バイト符号付き整数
説明 削除または バックアップ構造を保持する世代数。

詳細説明:

構造を削除した際に、その削除されたコピーを何世代分保持するかを指定します。

制約事項:

  • 最小: 2
  • 最大: 99
  • 未指定時: 3が仮定される

35 - ATTRTABLE(属性定義テーブル)

項目 内容
レコードコード 0x23
ニモニック ATTRTABLE
データ型 ASCII文字列
説明 属性定義ファイルの名前。ライブラリに属性が定義されている場合のみ。

詳細説明:

要素プロパティ(カスタム属性)の定義をファイルで管理する場合に指定します。

制約事項:

  • 最大44バイト
  • ディレクトリ・拡張子指定可能

プロパティ・フラグレコード

38 - ELFLAGS(要素フラグ)

項目 内容
レコードコード 0x26
ニモニック ELFLAGS
データ型 ビット配列(2バイト)
説明 要素の特殊フラグ。テンプレート・外部データを指定。

詳細説明:

要素の属性を制御するビットフラグです。

ビット配置:

ビット位置 名称 説明
14 外部データ(External) 設定時、この要素は外部ライブラリのもの
15 テンプレートデータ 設定時、この要素はテンプレート
その他 予約 将来使用予定。0にクリア

未指定時: すべてのビットが0と仮定される

使用例:

BOUNDARY
LAYER 1
DATATYPE 0
ELFLAGS 0x8000     ← ビット15設定:テンプレートデータ
XY ...
ENDEL

43 - PROPATTR(プロパティ属性番号)

項目 内容
レコードコード 0x2B
ニモニック PROPATTR
データ型 2バイト符号付き整数
説明 カスタムプロパティの属性ID。

詳細説明:

要素に付与するカスタムプロパティの属性番号を指定します。次のPROPVALUEレコードでその値を指定します。

値の範囲: 1~127

予約番号:

  • 126, 127: Release 3.0以前の旧仕様(ユーザー整数・文字列)

使用例:

BOUNDARY
LAYER 1
DATATYPE 0
XY ...
PROPATTR 2         ← 属性ID 2
PROPVALUE "metal"  ← その値は"metal"
ENDEL

44 - PROPVALUE(プロパティ値)

項目 内容
レコードコード 0x2C
ニモニック PROPVALUE
データ型 ASCII文字列
説明 PROPATTR で指定された属性の値。

詳細説明:

PROPATTRで指定した属性番号に対応する値を文字列で指定します。

制約事項:

  • 最大126文字
  • 複数のプロパティを付与可能
  • 各プロパティは異なる属性番号である必要がある

データ量制限:

合計データサイズ = (文字列サイズ+パディング) の合計 + (属性数 × 2)

通常要素: ≤ 128バイト
SREF/AREF/NODE: ≤ 512バイト

使用例:

BOUNDARY
LAYER 1
DATATYPE 0
XY ...
PROPATTR 2
PROPVALUE "metal"      ← 合計6バイト(パディングで8バイト)
PROPATTR 10
PROPVALUE "property"   ← 合計8バイト
ENDEL

47 - PLEX(プレックス番号)

項目 内容
レコードコード 0x2F
ニモニック PLEX
データ型 4バイト符号付き整数
説明 複雑な要素グループの識別番号。関連する複数要素を1つのグループに分類。

詳細説明:

複数の要素が1つの論理的なグループを構成する場合、それらに共通のプレックス番号を付与します。

値の範囲: 正の整数(24ビット以下に収まる範囲)

特別な値:

  • ビット7を設定すると、その要素がプレックスの先頭(head)として標記される

使用例:

BOUNDARY
LAYER 1
DATATYPE 0
XY ...
PLEX 1000          ← プレックスグループID 1000
ENDEL

BOUNDARY
LAYER 2
DATATYPE 0
XY ...
PLEX 1000          ← 同じグループに属する
ENDEL

テープ・フォーマット関連レコード

50 - TAPENUM(テープ番号)

項目 内容
レコードコード 0x32
ニモニック TAPENUM
データ型 2バイト符号付き整数
説明 マルチリールテープファイルの現在のリール番号。

詳細説明:

昔のテープメディア出力の名残。マルチリール構成の場合、各リールに番号を付与します。

値の例:

  • 最初のテープ: 1
  • 2番目のテープ: 2
  • n番目のテープ: n

51 - TAPECODE(テープコード)

項目 内容
レコードコード 0x33
ニモニック TAPECODE
データ型 2バイト符号付き整数
説明 マルチリール共通のコード。正しいリール順序の検証用。

詳細説明:

マルチリール構成の全テープに共通する6整数のコードを含みます。これにより、正しい順序でリールが読み込まれているかを検証します。

フォーマット指定レコード

54 - FORMAT(ストリームフォーマットタイプ)

項目 内容
レコードコード 0x36
ニモニック FORMAT
データ型 2バイト符号付き整数
説明 ストリームファイルのフォーマットタイプ。

詳細説明:

ファイルが「アーカイブ形式」か「フィルタ形式」かを指定します。

値と対応:

フォーマット 説明
(レコード無し) Archive すべてのレイヤー・データ型を含む。デフォルト。
0 GDSII Archive GDSII形式アーカイブ
1 GDSII Filtered GDSII形式フィルタ。指定レイヤーのみ含む。
2 EDSM Archive EDSM形式アーカイブ
3 EDSM Filtered EDSM形式フィルタ

Archive形式:

  • すべてのレイヤー・データ型を含む
  • FORMATレコードの後、直接UNITSレコードが続く
  • MASKレコード不要

Filtered形式:

  • ユーザーが指定したレイヤー・データ型のみを含む
  • FORMATレコード直後に、1つ以上のMASKレコードが必須
  • MASKレコードの最後はENDMASKSで終わる
  • ENDMASKS の後にUNITSが続く

55 - MASK(フィルタレイヤー・データ型)

項目 内容
レコードコード 0x37
ニモニック MASK
データ型 ASCII文字列
説明 フィルタ対象のレイヤー・データ型を指定。Filtered形式のみ使用。

詳細説明:

Filtered形式のファイルで、どのレイヤー・データ型を含めるかを指定します。

構文:

LAYER_LIST ; DATATYPE_LIST

LAYER_LIST = 空間で区切ったレイヤー番号(範囲はハイフンで指定)
DATATYPE_LIST = 空間で区切ったデータ型番号(範囲はハイフンで指定)

使用例:

MASK "1 5-7 10 ; 0-255"

意味:
レイヤー: 1, 5, 6, 7, 10
データ型: 0~255(すべて)
MASK "1 2 ; 0 2"

意味:
レイヤー: 1, 2
データ型: 0, 2

制約事項:

  • FORMAT レコードで Filtered 形式指定後、最低1つのMASK必須
  • 複数のMASKレコード可能
  • 最後のMASKの後はENDMASKS

56 - ENDMASKS(マスク定義終了)

項目 内容
レコードコード 0x38
ニモニック ENDMASKS
データ型 データなし
説明 MASKレコード群の終了。Filtered形式のみ。

詳細説明:

最後のMASKレコードの直後に出現し、マスク定義セクション全体の終了を示します。

ペイロード内容: なし(ヘッダのみ)

レコード全体: 4バイト

Filtered形式の構造:

FORMAT
MASK ...
MASK ...
ENDMASKS      ← ここで終了
UNITS         ← その後UNITS
...

GDSIIファイル構造(BNF記法)

GDSIIファイルのレコード順序を、BNF(バッカス・ナウア記法)で示します。

BNFはプログラミング言語やファイル形式の構造を記述するための標準的な記法です。GDSIIのようにレコードの出現順序や省略可否が厳密に決まっている形式を、簡潔かつ正確に表現できます。

BNF記法の読み方

記号 意味
::= 「〜は〜として定義される」 <A> ::= B C → 「AはBの次にCが来る」
[ ] 省略可能(0回または1回) [ELFLAGS] → 「ELFLAGSはあってもなくてもよい」
{ }* 0回以上の繰り返し {<Element>}* → 「Elementが0個以上並ぶ」
| 選択(どれか1つ) (A | B) → 「AまたはBのどちらか」

GDSIIファイルのBNF定義

<GDSIIFile> ::= HEADER 
                BGNLIB 
                LIBNAME 
                UNITS 
                {<Structure>}*
                ENDLIB

<Structure> ::= BGNSTR 
                STRNAME 
                {<Element>}*
                ENDSTR

<Element> ::= (<Boundary> | <Path> | <SRef> | <ARef> | <Text> | <Node> | <Box>)
              {<Property>}*
              ENDEL

<Boundary> ::= BOUNDARY 
               [ELFLAGS] 
               [PLEX]
               LAYER 
               DATATYPE 
               XY

<Path> ::= PATH 
           [ELFLAGS] 
           [PLEX]
           LAYER 
           DATATYPE 
           [PATHTYPE] 
           [WIDTH] 
           XY

<SRef> ::= SREF 
           [ELFLAGS] 
           [PLEX]
           SNAME 
           [STRANS [MAG] [ANGLE]] 
           XY

<ARef> ::= AREF 
           [ELFLAGS] 
           [PLEX]
           SNAME 
           [STRANS [MAG] [ANGLE]] 
           COLROW 
           XY

<Text> ::= TEXT 
           [ELFLAGS] 
           [PLEX]
           LAYER 
           TEXTTYPE 
           [PRESENTATION] 
           [PATHTYPE] 
           [WIDTH] 
           [STRANS [MAG] [ANGLE]] 
           XY 
           STRING

<Node> ::= NODE 
           [ELFLAGS] 
           [PLEX]
           LAYER 
           NODETYPE 
           XY

<Box> ::= BOX 
          [ELFLAGS] 
          [PLEX]
          LAYER 
          BOXTYPE 
          XY

<Property> ::= PROPATTR 
               PROPVALUE

まとめ

用途 レコードコード ニモニック 説明
ファイル開始 0x00 HEADER バージョン情報
ライブラリ開始 0x01 BGNLIB 作成日時
ライブラリ名 0x02 LIBNAME ライブラリ識別名
座標単位 0x03 UNITS スケーリング定義
ファイル終了 0x04 ENDLIB ライブラリ終了
構造開始 0x05 BGNSTR セル生成日時
構造名 0x06 STRNAME セル識別名
構造終了 0x07 ENDSTR セル終了
ポリゴン 0x08 BOUNDARY 塗りつぶし図形
パス 0x09 PATH 線分
セル参照 0x0A SREF インスタンス配置
配列参照 0x0B AREF 配列配置
レイヤー 0x0D LAYER 層番号
データ型 0x0E DATATYPE 用途分類
座標 0x10 XY 座標データ
要素終了 0x11 ENDEL 要素終了
参照名 0x12 SNAME 参照構造名
配列サイズ 0x13 COLROW 列数・行数
テキスト 0x0C TEXT テキスト要素
文字列内容 0x19 STRING テキスト中身
倍率 0x1B MAG 拡大・縮小
回転角 0x1C ANGLE 回転度数

参考資料

https://boolean.klaasholwerda.nl/interface/bnf/gdsformat.html

Discussion