Crate gds

Crate gds 

Source
Expand description

A library for parsing and writing GDSII files.

GDSII is the IC industry’s de facto standard for storing and sharing layout data. gds is a crate for reading and creating GDSII data based on Gds21 and similar to libraries such as gdstk and its predecessor gdspy. Reading and generating GDSII-format data are primary goals; offering ease-of-use functionality for more elaborate manipulations of GDS data is not.

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 gds::{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 = gds::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 gds::SerializationFormat::Yaml;
let lib = gds::GdsLibrary::new("mylib");

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

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

Structs§

GdsArrayRef
A GDS array reference.
GdsBoundary
A GDS boundary element.
GdsBox
A GDS box element.
GdsDateTimes
GDS modification dates and times.
GdsElemFlags
GDS element flags.
GdsFloat64
A namespace for encoding and decoding GDSII floats to and from the IEEE754 double-precision format.
GdsLayerSpec
A GDS layer spec.
GdsLibrary
A GDS library.
GdsNode
GDS node element
GdsPath
A GDS path element.
GdsPlex
A GDS plex record.
GdsPoint
A GDS spatial point.
GdsPresentation
GDS text presentation flags.
GdsProperty
A GDS property specification.
GdsRecordHeader
A GDS record header.
GdsStats
GDS summary stats.
GdsStrans
A GDS translation setting.
GdsStruct
A GDS struct (cell) definition
GdsStructRef
A GDS struct reference (cell instance).
GdsTextElem
A GDS text element.
GdsUnits
An encoding of GDS units.
Unsupported
A marker type for unsupported features.

Enums§

GdsContext
An enumeration of each context in which a record can be parsed, primarily for error reporting.
GdsDataType
An enumeration of GDS data types.
GdsElement
An enumeration of GDS elements.
GdsError
An enumeration of GDS errors.
GdsFormatType
An enumeration of GDS mask formats.
GdsRecord
An enumeration of GDS record types.
GdsRecordType
An enumeration of GDS record types.
SerializationFormat
An enumeration of first-class supported serialization formats.

Traits§

HasLayer
An object that has a corresponding GDS layer.
SerdeFile
A trait for serializing/deserializing files.

Functions§

roundtrip
Check lib matches across a write-read round-trip cycle

Type Aliases§

GdsResult
A result type alias.