OASIS Format

Open Artwork System Interchange Standard (OASIS) is a modern IC layout format designed to be more compact and efficient than GDSII.

Overview

OASIS format characteristics:

  • Compact binary encoding: Variable-length integers
  • Modern design: Optimized for file size
  • Primitive shapes: Rectangles, trapezoids, circles
  • Name tables: String compression
  • IEEE 754 floats: Standard floating point
  • File extension: .oas

Main Types

OASISFile

The root structure:

#![allow(unused)]
fn main() {
pub struct OASISFile {
    pub version: String,
    pub unit: f64,
    pub names: NameTable,
    pub cells: Vec<OASISCell>,
}
}

OASISCell

Cell/structure in the design:

#![allow(unused)]
fn main() {
pub struct OASISCell {
    pub name: String,
    pub elements: Vec<OASISElement>,
}
}

OASISElement

Enum of OASIS elements:

#![allow(unused)]
fn main() {
pub enum OASISElement {
    Rectangle(Rectangle),
    Polygon(Polygon),
    Path(OPath),
    Trapezoid(Trapezoid),
    CTrapezoid(CTrapezoid),
    Circle(Circle),
    Text(OText),
    Placement(Placement),
}
}

Supported Elements

ElementDescriptionStatus
RectangleAxis-aligned rectangle✅ Full support
PolygonGeneral polygon✅ Full support
PathWire with extensions✅ Full support
TrapezoidTrapezoidal shape✅ Full support
CTrapezoidConstrained trapezoid✅ Full support
CircleCircle primitive✅ Full support
TextText label✅ Full support
PlacementCell instance✅ Full support

Name Tables

OASIS uses name tables for efficient string storage:

#![allow(unused)]
fn main() {
pub struct NameTable {
    pub cell_names: HashMap<u32, String>,
    pub text_strings: HashMap<u32, String>,
    pub prop_names: HashMap<u32, String>,
}
}

Binary Format

Variable-Length Integers

Unsigned integers use 7 bits per byte:

0xxxxxxx = 0-127
1xxxxxxx 0yyyyyyy = 128-16383
...

Zigzag Encoding

Signed integers use zigzag encoding:

0 → 0
-1 → 1
1 → 2
-2 → 3

Next Steps