今回からは実際にフォトマスクの設計について学んでいきたい。
今回も@isourouさんの記事を参考にして自分の備忘録として残していく。
まず、以下のコードを実行した。
import gdstk
lib = gdstk.Library() #特に指定しなければ単位はum
topcell = lib.new_cell("Top") #Topセルを作成
subcell = lib.new_cell("subcell") #サブセルを作成
box = gdstk.rectangle((0,0), (1,2)) #左下(0,0),右上(1,2)の四角形を作成
subcell.add(box) #四角形をサブセルに追加
ref = gdstk.Reference(subcell, origin=(0,0), columns =3, rows =2, spacing = (5,5)) #サブセルへの配列リファレンスを原点(0,0)に挿入。3行2列で、間隔は(5,5)
topcell.add(ref) #サブセルへのリファレンスをTopセルに挿入。
text = gdstk.text('First GDS',2, (0,10)) #高さ2のテキストを位置(0,10)に挿入。
topcell.add(*text) #gdstk.textは1文字ずつのPolygonのリストを返すので、*textでリストをunpackしてadd()に渡す。
lib.write_gds('output.gds') #gdsファイル出力
topcell.write_svg('output.svg') #svgファイル出力
早速1行毎に追っていきたい。
import gdst
gdstkモジュールをインポートしている(おまじない)
lib = gdstk.Library()
gdstkクラスのLibraryメソッドで、libに設計ルール(寸法など)やセルを含むライブラリを作成している
class gdstk.Library(name='library', unit=1e-6, precision=1e-9)
name: ライブラリ名の文字列。
unit: ライブラリ名で用いられる長さ単位[m]。特に指定しなければ1 umになる。
precision: ライブラリ内で用いられる寸法精度[m]。リソグラフィ装置の仕様に応じて決定すること。特に指定しなければ1 nmになる。ライブラリ内部では、寸法はprecisionを1とした整数値として保存される。
topcell = lib.new_cell("Top")
libに"Top"という名前のセルを追加し、変数topcellに格納する。
subcell = lib.new_cell("subcell")
1行上と同じような内容
box = gdstk.rectangle((0,0), (1,2))
rectangleメソッドで長方形を変数boxに代入する
subcell.add(box)
セル(subsell)にジオメトリ要素を追加する
ref = gdstk.Reference(subcell, origin=(0,0), columns =3, rows =2, spacing = (5,5))
他セルへのリファレンスを出力する
セル(subcell)を基に、(0,0)の位置からx方向に5、y方向に5開けてx方向に3つ、y方向に2つ複写する
(他の引数は公式を参照してください)
text = gdstk.text('First GDS',2, (0,10))
テキストパターンを出力してtextに格納している
topcell.add(*text)
gdstk.textは1文字ずつのPolygonのリストを返すので、*textでリストをunpackしてadd()に渡す。
lib.write_gds('output.gds')
ライブラリ(lib)をgds形式で出力
topcell.write_svg('output.svg')
セル(topcell)をsvg形式で出力
殆どが参考にした記事の写しになってしまいました、、、
後々はboolean処理やPathについても説明を加えていきたいと思います。