pdkmaster.design

pdkmaster.design.circuit

class pdkmaster.design.circuit.CircuitFactory(*, tech: pdkmaster.technology.technology_.Technology)[source]

Bases: object

The user facing class for creating circuits. This class is also a base class on which own factory classes can be built with specific extensions.

Parameters:

tech – the technology for which to create circuits. Created circuits may only contain instances from primitives from this technology.

API Notes

The contract for making subclasses has not been finaziled. Backwards

incompatible changes are still expected for subclasses of this class.

new_circuit(*, name: str)[source]

Create a circuit.

This method is the user facing API to generate circuits. Returns a _Circuit object; see docs for that class on user facing API for that class.

pdkmaster.design.layout

The pdkmaster.design.layout module provides classes to represent layout shapes in a PDKMaster technology. These classes are designed to only allow to create layout that conform to the technology definition. In order to detect design shorts as fast as possible shapes are put on nets.

A LayoutFactory class is provided to generate layouts for a certain technology and it’s primitives.

Internally the klayout API is used to represent the shapes and perform manipulations on them.

class pdkmaster.design.layout.MaskShapesSubLayout(*, net: Optional[pdkmaster.technology.net.Net], shapes: pdkmaster.technology.geometry.MaskShapes)[source]

Bases: pdkmaster.design.layout._SubLayout

Object representing the sublayout of a net consisting of geometry._Shape objects.

Parameters:
  • net – The net of the SubLayout None value represents no net for the shapes.

  • shapes – The maskshapes on the net.

property net
property shapes
property polygons
add_shape(*, shape: pdkmaster.technology.geometry.MaskShape)[source]
move(*, dxy: pdkmaster.technology.geometry.Point, move_context: Optional[pdkmaster.technology.geometry.MoveContext] = None) → None[source]
moved(*, dxy: pdkmaster.technology.geometry.Point, move_context: Optional[pdkmaster.technology.geometry.MoveContext] = None) → pdkmaster.design.layout.MaskShapesSubLayout[source]
rotate(*, rotation: pdkmaster.technology.geometry.Rotation, rot_context: Optional[pdkmaster.technology.geometry.RotationContext] = None) → None[source]
rotated(*, rotation: pdkmaster.technology.geometry.Rotation, rot_context: Optional[pdkmaster.technology.geometry.RotationContext] = None) → pdkmaster.design.layout.MaskShapesSubLayout[source]
dup() → pdkmaster.design.layout.MaskShapesSubLayout[source]
class pdkmaster.design.layout.SubLayouts(iterable: Union[T, Iterable[T]] = ())[source]

Bases: pdkmaster._util.TypedList

Internal _Layout support class

dup() → pdkmaster.design.layout.SubLayouts[source]
class pdkmaster.design.layout.LayoutFactory(*, tech: pdkmaster.technology.technology_.Technology)[source]

Bases: object

The user facing class for creating layouts. This class is also a base class on which own factory classes can be built with specific extensions.

Parameters:

tech – the technology for which to create circuits. Created layout may only contain shapes on masks defined by the technology.

API Notes

The contract for making subclasses has not been finaziled. Backwards

incompatible changes are still expected for subclasses of this class.

new_layout(*, sublayouts: Union[pdkmaster.design.layout._SubLayout, pdkmaster.design.layout.SubLayouts, None] = None, boundary: Optional[pdkmaster.technology.geometry._Rectangular] = None)[source]

Create a new layout.

Parameters:
  • sublayouts – optional list of sublayouts to add to this new layout

  • boundary – optional boundary of the new layout

layout_primitive(prim: pdkmaster.technology.primitive._Primitive, **prim_params) → pdkmaster.design.layout._Layout[source]

Create the layout of a _Primitive object.

This will generate a default layout for a given primitive with the provided paramters. This is a default layout

Parameters:
  • prim – the primitive to create a layout for

  • prim_params – the parameters for the primitive

API Notes

User code can’t depend on the exact layout generated for a certain

primitive. Future improvements to the layout generation code may change the resulting layout.

new_circuitlayouter(*, circuit: pdkmaster.design.circuit._Circuit, boundary: Optional[pdkmaster.technology.geometry._Rectangular]) → pdkmaster.design.layout._CircuitLayouter[source]

Helper class to generate layout corresponding to a given _Circuit. The returned layouter will start with an empty layout with optionally a provided boundary. The layouter API can then be used to build up the layout for the circuit.

Parameters:
  • circuit – the circuit for which to create a layouter

  • boundary – optional boundary of the created layout

API Notes

The API of the returned layouter is not fixed yet and backwards incompatible changes are still expected.

pdkmaster.design.library

class pdkmaster.design.library.RoutingGauge(*, tech: pdkmaster.technology.technology_.Technology, bottom: pdkmaster.technology.primitive.MetalWire, bottom_direction: str, top: pdkmaster.technology.primitive.MetalWire, pitches: Dict[pdkmaster.technology.primitive.MetalWire, Union[int, float]] = {}, offsets: Dict[pdkmaster.technology.primitive.MetalWire, Union[int, float]] = {})[source]

Bases: object

API Notes

API for RoutingGause is not fixed. Backwards incompatible changes may still be

expected.

see: https://gitlab.com/Chips4Makers/PDKMaster/-/issues/36

code likely to be moved to c4m-flexcell in the future

directions = frozenset({'horizontal', 'vertical'})
class pdkmaster.design.library.Library(*, name: str, tech: pdkmaster.technology.technology_.Technology, cktfab: Optional[ckt.CircuitFactory] = None, layoutfab: Optional[lay.LayoutFactory] = None, global_nets: Union[T, Iterable[T], None] = None)[source]

Bases: object

API Notes

API with global_nets not None is not fully clear yet. Libraries with

global_nets not None may get backwards incompatible changes in the future.

new_cell(*, name: str) → pdkmaster.design.library._Cell[pdkmaster.design.library.Library][pdkmaster.design.library.Library][source]
property sorted_cells
class pdkmaster.design.library.StdCellLibrary(*, name: str, tech: pdkmaster.technology.technology_.Technology, cktfab: Optional[ckt.CircuitFactory] = None, layoutfab: Optional[lay.LayoutFactory] = None, global_nets: Union[T, Iterable[T], None] = None, routinggauge: Union[T, Iterable[T]], pingrid_pitch: Union[int, float], row_height: Union[int, float])[source]

Bases: pdkmaster.design.library.Library

API Notes

API for StdCellLibrary is not fixed. Backwards incompatible changes may still be

expected.

see: https://gitlab.com/Chips4Makers/PDKMaster/-/issues/36

code likely to be moved to c4m-flexcell in the future

property sorted_cells