Dieser Artikel ist eine Fortsetzung von Umgang mit dem GDSII-Format in Python. Angenommen, die gdspy-Bibliothek wurde installiert, erstellen wir die erste GDS-Datei. Erstens ist zum Zeitpunkt der Erstellung des Manuskripts (16. Februar 2020) die neueste Version von gdspy 1.5.2. Es scheint, dass sich das Designkonzept von 1.5 stark geändert hat und das in der vorherigen Version erstellte Skript nicht so funktioniert, wie es ist. Sogar das Skript im offiziellen gdspy funktioniert derzeit nicht ordnungsgemäß. Daher ist unten nur die Version aufgeführt, mit der es schnell funktioniert hat ..
import gdspy
# The GDSII file is called a library, which contains multiple cells.
lib = gdspy.GdsLibrary()
# Geometry must be placed in cells.
cell = lib.new_cell('FIRST')
# Create the geometry (a single rectangle) and add it to the cell.
rect = gdspy.Rectangle((0, 0), (2, 1))
cell.add(rect)
# Save the library in a file called 'first.gds'.
lib.write_gds('first.gds')
# Optionally, save an image of the cell as SVG.
cell.write_svg('first.svg')
# Display all cells using the internal viewer.
gdspy.LayoutViewer (lib)
<-Nur eine Zeile hier wurde von [Official] geändert (https://gdspy.readthedocs.io/en/stable/gettingstarted.html#first-gdsii)
Einzelheiten zu GDS-Dateien (GDS II-Format) finden Sie auf der Referenzseite [^ 1] [^ 2], aber grob gesagt. Bibliothek ├ Zelle ├ Geometrie Es ist konfiguriert als. Eine Bibliothek bezieht sich auf eine gesamte GDS-Datei. Geometrie ist eine einzelne Figur (Polygon, Kreis usw. usw. usw.), und eine Zelle ist eine Sammlung von Geometrie. Normalerweise hat GDS eine Zelle mit dem Namen Top, die die gesamte Bibliothek beschreibt. Die obere Zelle enthält einen Verweis auf die Bibliothek oder andere Zellen (sogenannte Unterzellen). Mit anderen Worten, Zellen dürfen eine hierarchische Struktur haben, und wenn sie richtig verwendet werden können, führt dies zu einer effizienteren Dateigröße. ,
Bis 1.4 wurde die zu behandelnde GDS-Bibliothek als globale Klasse behandelt [^ 1], nach 1.5 wird sie jedoch eindeutig als lokale Klasse lib = gdspy.GdsLibrary ()
behandelt. Daneben gibt es viele Codes, die nicht so funktionieren, wie sie sind, einschließlich der offiziellen Dokumente. Natürlich muss es geändert werden, wenn es an eine Unterroutine (Funktion) übergeben wird, und die Verwendung von CellReference usw. hat sich erheblich geändert.
Updates für gdspy 2.0 sind in Zukunft geplant, und es wird erwartet, dass die Änderungen weiter zunehmen. Weitere Informationen finden Sie in der Quelle unter GitHub ~~ (Das war's) ~~.
Im vorherigen Abschnitt haben wir erwähnt, dass "lib = gdspy.GdsLibrary ()" als lokale Klasse behandelt wird, aber es gibt zum Zeitpunkt des Schreibens des Manuskripts viele Probleme. Erstens scheint gdspy.GdsLibrary einen Konstruktor, aber keinen Destruktor zu haben. Mit anderen Worten, wenn Sie "lib = gdspy.GdsLibrary ()" mehrmals in einer for-Schleife ausführen, tritt ein Fehler auf, da der vorherige Verlauf erhalten bleibt. Um diesen Fehler zu vermeiden, führen Sie gdspy.GdsLibrary () bei der Ausführung in Spyder nur einmal im Python-Skript aus und führen Sie bei jeder Ausführung des Skripts den Kernel "console" -> "aus. Sie sollten "neu starten" [^ 4].
Recommended Posts