Cet article est une suite de Gestion du format GDSII en Python. En supposant que la bibliothèque gdspy a été installée, créons le premier fichier GDS. Premièrement, au moment de la rédaction du manuscrit (16 février 2020), la dernière version de gdspy est la 1.5.2. Il semble que le concept de conception a beaucoup changé ** depuis la version 1.5, et le script créé dans la version précédente ** ne fonctionne pas tel quel **. Même le script dans le gdspy officiel ne fonctionne pas correctement pour le moment, donc seule la version qui l'a fait fonctionner rapidement est répertoriée ci-dessous. ..
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)
<-Une seule ligne ici a été modifiée depuis Officiel
Pour plus de détails sur les fichiers GDS (format GDS II), veuillez consulter le site de référence [^ 1] [^ 2], mais en gros. Bibliothèque ├ Cellule ├ Géométrie Il est configuré comme. Une bibliothèque fait référence à un fichier GDS entier. La géométrie est une figure individuelle (polygone, cercle, etc, etc, ...), et une cellule est une collection de géométrie. Normalement, GDS a une cellule nommée Top, qui est la cellule qui décrit la bibliothèque entière. La cellule Top contient une référence à la bibliothèque ou à d'autres cellules (appelées sous-cellules). En d'autres termes, les cellules peuvent avoir une structure hiérarchique, et si elles peuvent être utilisées correctement, cela conduira à une taille de fichier plus efficace. ,
Jusqu'en 1.4, la bibliothèque GDS à gérer était traitée comme une classe globale [^ 1], mais après 1.5, elle est clairement traitée comme une classe locale lib = gdspy.GdsLibrary ()
. Parallèlement à cela, il existe de nombreux codes qui ne fonctionnent pas tels quels, y compris les documents officiels. Bien sûr, il est nécessaire de le changer lors du passage à un sous-programme (fonction), et l'utilisation de CellReference etc. a changé de manière significative.
Des mises à jour de gdspy 2.0 sont prévues dans le futur et les changements devraient encore augmenter. Pour plus d'informations, veuillez consulter la source sur GitHub ~~ (C'est tout) ~~.
Dans la section précédente, nous avons mentionné que lib = gdspy.GdsLibrary ()
est traité comme une classe locale, mais il y a de nombreux problèmes au moment de la rédaction du manuscrit. Premièrement, gdspy.GdsLibrary semble avoir un constructeur mais pas de destructeur.
En d'autres termes, si vous exécutez lib = gdspy.GdsLibrary ()
plusieurs fois dans une boucle for, une erreur se produira car l'historique précédent est conservé. Pour éviter cette erreur, lors de l'exécution dans Spyder, exécutez gdspy.GdsLibrary () une seule fois dans le script Python et exécutez le noyau "console" -> "chaque fois que le script est exécuté. Vous devez "redémarrer" [^ 4].
Recommended Posts