//! //! # vlsir Raw Layout //! //! Layout specified in "raw" geometric format, analogous to most custom layout systems. //! syntax = "proto3"; package vlsir.raw; import "utils.proto"; import "circuit.proto"; // # Point // An (x,y) point in Cartesian layout space. message Point { int64 x = 1; int64 y = 2; } // Distance unit enumeration enum Units { MICRO = 0; NANO = 1; ANGSTROM = 2; } // # Layer-Purpose Pair // As in many legacy layout systems, layers are described by two numbers: // * `number` describes describes a "physical layer". Example enumerated values might include "metal3", "diffusion". // * `purpose` describes an "intent" of the [Layer]. Typical enumerated values include pins, labels, and drawings. message Layer { int64 number = 1; int64 purpose = 2; } // # Rectangle Primitive message Rectangle { // Net Name string net = 1; // The lower-left corner of the rectangle. Point lower_left = 2; int64 width = 3; int64 height = 4; } // # Polygon Primitive message Polygon { // Net Name string net = 1; // List of Vertices // `Polygons` implicitly "close themselves", i.e. the first vertex-location need not be repeated as the last. // N-sided `Polygons` therefore require `N` elements in their `vertices` array. repeated Point vertices = 2; } // # Path Primitive // A single-layer, fixed-width path through a series of points message Path { // Net Name string net = 1; // Points repeated Point points = 2; // Width int64 width = 3; } // # LayerShapes // Container for Geometric Shapes on a single `Layer` message LayerShapes { Layer layer = 1; repeated Rectangle rectangles = 2; repeated Polygon polygons = 3; repeated Path paths = 4; } // # Text Annotation // // Note `TextElements` are "layer-less", i.e. they do not sit on different layers, and do not describe connectivity or generate pins. // These are purely annotations in the sense of "design notes". message TextElement { // String Value string string = 1; // Location Point loc = 2; } // # Layout-Cell Instance message Instance { // Instance Name string name = 1; // Cell Reference vlsir.utils.Reference cell = 3; // Location of the defined Cell's origin // this location holds regardless of reflection or rotation Point origin_location = 4; // Vertical reflection about x-axis, // applied *before* rotation. bool reflect_vert = 6; // Angle of rotation (degrees), // Clockwise and applied *after* reflection int32 rotation_clockwise_degrees = 7; } // # Layout Cell // // The most common element of layout re-use. // Comprises a named set of geometric elements and [Instance]s of other [Layout]s. // message Layout { // Cell Name string name = 1; // Shapes, grouped by layer repeated LayerShapes shapes = 2; // Instances of other cells repeated Instance instances = 3; // Text Annotations repeated TextElement annotations = 4; } // # Abstract Layout View // // Defines the physical interface to a [Cell], including ports and internal blockages, // omitting internal implementation details. // message Abstract { // Cell Name string name = 1; // Outline Polygon outline = 2; // Ports repeated AbstractPort ports = 4; // Blockages repeated LayerShapes blockages = 5; } // # Abstract Port // Combination of a net and set of shapes message AbstractPort { // Port Name string net = 1; // Shapes, grouped by layer repeated LayerShapes shapes = 2; } // # Cell // A multi-view representation of a piece of hardware. message Cell { // Cell Name string name = 1; // IO Interface vlsir.circuit.Interface interface = 10; // Circuit Module vlsir.circuit.Module module = 11; // Physical Abstract Abstract abstract = 12; // Physical Layout Implementation Layout layout = 13; } // # Library // A collection of cells and asssociated meta-data. message Library { // Library Name / Domain string domain = 1; // Distance Units Units units = 2; // Cell Definitions repeated Cell cells = 10; // Author Information vlsir.utils.AuthorMetadata author = 20; }