Crate gds21

Source
Expand description

§Gds21 Integrated Circuit Layout Parser & Writer

GDSII is the IC industry’s de facto standard for storing and sharing layout data. Gds21 is a library for reading and creating GDSII data, similar to and largely inspired by libraries such as gdstk and its predecessor gdspy. Gds21 differs in being designed primarily as an interface layer to GDSII for the larger Layout21 library. Reading and generating GDSII-format data are primary goals; offering ease-of-use functionality for more elaborate manipulations of GDS data is not. (Although these manipulations can be performed on Gds21’s data structures). Gds21 accordingly stores layout data on GDSII’s terms, using GDSII’s idioms, naming conventions, and datatypes.

Layout data is represented in three primary forms:

  • A short tree with three layers:
    • The root is a GdsLibrary, which primarily consists of a set of cells (GdsStructs), and secondarily a set of metadata. Each GdsLibrary is a universe unto itself, in that it has no mechanisms for comprehending layout cells or data defined outside itself. On-disk each GdsLibrary is typically paired one-to-one with a .gds file.
    • Libraries consist of cell definitions AKA GdsStructs, which define each layout cell (or module, or “struct” in GDSII terms).
    • Cells consist of GdsElements, an enumeration which includes individual polygons (GdsBoundary), instances of other layout cells (GdsStructRef), text (GdsTextElem), and a few other geometric elements.
  • For storage on disk, the GdsLibrary tree is flattened to a series of GdsRecords. These records indicate the beginning, end, and content of each tree-node. Detailed descriptions of these records comprise the majority of the GDSII spec.
  • Records are stored on-disk in binary form as detailed in the GDSII spec. Each includes a record-type header, datatype, length field, and optional additional content. These raw-bytes are never stored by Gds21, only generated and consumed on their way into and out of Read and Write objects (typically Files).

§Usage

Loading a GdsLibrary from disk:

let lib = GdsLibrary::load("sample.gds")?;

Creating a new and empty GdsLibrary, and adding a GdsStruct cell-definition:

use gds21::{GdsLibrary, GdsStruct};
let mut lib = GdsLibrary::new("mylib");
lib.structs.push(GdsStruct::new("mycell"));

Saving a GdsLibrary to disk:

lib.save("mylib.gds");

§Serialization

Each element in Gds21’s GdsLibrary tree is serde-serializable. GDSII data can be straightforwardly serialized in any serde-supported format. Examples:

let lib = gds21::GdsLibrary::new("mylib");
let json = serde_json::to_string(&lib);
let yaml = serde_yaml::to_string(&lib);
let toml = toml::to_string(&lib);

Gds21 includes built-in support for a subset of serde-formats via its SerializationFormat enumeration, and support for directly reading and writing files in each format via its accompanying SerdeFile trait. Example using SerializationFormat::Yaml:

use gds21::SerializationFormat::Yaml;
let lib = gds21::GdsLibrary::new("mylib");

// Write to YAML-format file
Yaml.save(&lib, "mylib.gds.yaml")?;
// And read back from file
let lib2: gds21::GdsLibrary = Yaml.open("mylib.gds.yaml")?;  

Note these text-based representations will generally be substantially larger than binary GDSII data.

Structs§

GdsArrayRef
Gds Array Reference
GdsBoundary
Gds Boundary Element
GdsBox
Gds Box Element
GdsDateTimes
Gds Modification Dates & Times
GdsElemFlags
Gds Element Flags
GdsFloat64
GDSII’s Home-Grown Floating-Point Format
GdsLayerSpec
Gds Layer Spec
GdsLibrary
Gds Library
GdsNode
Gds Node Element
GdsPath
Gds Path Element
GdsPlex
Gds Plex
GdsPoint
Gds Spatial Point
GdsPresentation
Gds Text-Presentation Flags
GdsProperty
Gds Property
GdsRecordHeader
Gds Record Header
GdsStats
Gds Summary Stats
GdsStrans
Gds Translation Settings
GdsStruct
Gds Struct (Cell) Definition
GdsStructRef
Gds Struct Reference (Cell Instance)
GdsTextElem
Gds Text Element
GdsUnits
Gds Library Units
Unsupported
Unsupported (But Spec-Valid) Features

Enums§

GdsContext
Enumeration of each context in which a record can be parsed, primarily for error reporting
GdsDataType
Gds DataType Enumeration
GdsElement
Gds Element Enumeration
GdsError
Gds Error Enumeration
GdsFormatType
Gds Mask-Format Enumeration
GdsRecord
Gds Record Enumeration
GdsRecordType
Gds Record Types
SerializationFormat
Enumerated, Supported Serialization Formats

Traits§

HasLayer
Has-Layer Trait
SerdeFile
Serialization to & from file trait

Type Aliases§

GdsResult
GdsResult Type-Alias