Crate atoll

source ·
Expand description

Atoll: Automatic transformation of logical layout.

§Grid structure

Atoll assumes that you have a set of metal layers M0, M1, M2, ..., where each metal layer can be connected to the layer immediately above or below. Atoll also assumes that each metal layer has a preferred direction, and that horizontal and vertical metals alternate.

Suppose that P(i) is the pitch of the i-th routing layer. Each ATOLL tile must pick an integer X such that:

  • A complete block can be assembled from layers M0, M1, ..., MX
  • In particular, tiles contain no routing layers above MX.
  • The width of all tiles is an integer multiple of LCM { P(0), P(2), ... }, assuming M0 is vertical.
  • The height of all tiles is an integer multiple of LCM { P(1), P(3), ... }, assuming M0 is vertical (and therefore that M1 is horizontal).

The line and space widths must each be even integers, so that the center of any track or space is also an integer.

For symmetry guarantees, each routing layer can declare having no offset or a half-pitch offset. Half-pitch offset routing layers have one more track available as tiles may not use tracks that straddle ATOLL tile boundaries. These tracks may be used by encompassing tiles, however.

§Track numbering

Track coordinates have the form (layer, x, y). Each track coordinate references an intersection point between a track on layer and a track on layer + 1. If layer runs horizontally, x indexes the (vertical) tracks on layer + 1 and y indexes the horizontal tracks on layer. The origin is the lower-left corner of the tile.

§Routing

Each routing layer can only travel in one direction. Therefore, we can assume that if two adjacent coordinates are of the same net are adjacent in the routing direction, they are connected. In the perpendicular direction, they are not connected.

Endcaps may be specified, but should not cause DRC violations if there is a cut between tracks. These only affect how track coordinates are converted to physical rectangles by ATOLL’s APIs.

§Post layout hooks

ATOLL should have a way of passing layout information such as instantiations of “primitive” tiles to the plugin in an un-typed manner such that the plugin can run post-processing on the layout before actually drawing it to GDS.

§Filler cells

Filler cells (e.g. tap and decap cells) must have a width equal to the GCD of the widths of all device cells. Note that this GCD must be an integer multiple of the LCMs of track pitches over all vertical running routing layers. A similar requirement holds for filler cell height.

§Power strapping

Atoll can be configured to insert power straps on tracks available after routing.

Modules§

  • Generate abstract views of layout cells.
  • Uniform routing grids and layer stacks.
  • Routing interfaces and implementations.
  • ATOLL strap routing APIs.

Structs§

  • A drawn ATOLL instance.
  • An ATOLL instance representing both a schematic and layout instance.
  • A builder for an ATOLL tile’s IOs.
  • Identifies nets in a routing solver.
  • The layer indicating the outline of an ATOLL tile.
  • An ATOLL instance with typed components stripped out.
  • A builder for ATOLL tiles.
  • A wrapper of a block implementing Tile that can be instantiated in Substrate schematics and layouts.
  • Virtual layers for use in ATOLL.

Enums§

Traits§

  • A tile that can be instantiated in ATOLL.