Skip to content

Parameterized verification framework (PCells, DRC, LVS) for Superconducting and Quantum Electronics.

License

Notifications You must be signed in to change notification settings

JCoetzee123/spira

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

133 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SPiRA

SPiRA is the next-generation object-oriented script-based PCell design environment. The framework leverages the Python programming language to effectively generate circuit layouts, while simultaneously checking for design violations, through a novel methodology called validate-by-design. Creating PCells and extracting a model from a layout requires data from the fabrication process. A new PDK scheme is introduced, called the Rule Deck Database (RDD), that effectively connects process data to the SPiRA framework. The design of the RDD revolves around the principle that a PDK cannot be created, but rather that it evolves as our understanding of physical layout design evolves.

Benefits of using SPiRA:

  • Create a PCell framework that is easy to use by designers with the focus falling on Superconducting and Quantum Integrated Circuits.
  • Effectively connect process data to layout elements in a generic process-independent fashion.
  • No specific programming knowledge is required.
  • Easily share designs between colleagues.
  • Created PCells can easily be included in a hand-designed layout.

Features:

  • Define layout elements in a templated environment.
  • Ability to leverage object-oriented inheritance to simply complex designs.
  • Comprehensive set of commands for shape generation.
  • Use port objects to connect different layout elements.
  • Use routing algorithms to generate polygonal paths between devices.
  • Meticulously define a technology process using Python.

Depenencies

On Fedora install the following:

sudo dnf install redhat-rpm-config
sudo dnf install gcc-c++
sudo dnf install python3-devel
sudo dnf install tkinter
sudo dnf install gmsh

Installation

You can install SPiRA directly from the Python package manager pip using and remember to create a virtual environment:

python3 -m venv env
source env/bin/activate

# Install requirements
pip install -r requirements.txt

# Normal install
pip install .

# Developer install
pip install -e .

Documentation

The framework documentation will get you started. For more examples please contact rubenvanstaden@gmail.com.

Running Examples

All examples can be ran from the environment directory, which is the home directory of your spira folder. For the basic tutorial samples:

python tutorials/basic/_9_stretch_1.py

For the more advanced example with their own defined Rule Deck Database, as explained here.

python spira/technologies/default/circuits/ytron_circuit.py

Known Issues

  • Documentation for Advanced Tutorials are not completely finished.
  • Documentation for Reference have not been implemented.
  • There are some issues with reflection transformations.

Future Changes

  • Implement automatic netlist extraction.
  • Implement post-layout design rule checking.
  • Integrate with JoSIM and InductEx for parameter extraction.

History of changes

Version 0.1.1 (July 16, 2019)

  • Updated the advanced tutorial documentation.
  • Added developers documentations.
  • Updated the expand transform algorithms, which fixes a lot of known issues.
  • Updated the GDSII input parser to use new transformation parameters.
  • Changed the ref parameter to reference in SRef.

Version 0.1.0 (July 10, 2019)

  • Added first version of documentation.
  • Renamed Fields to Parameters to overcome confusion.
  • Renamed elemental to elements, since spira.Cell does not inherit from gdspy.Cell anymore.
  • Added parameter restrictions and preprocessing capabilities.
  • Updated parameters to accept an extra restriction argument.
  • Introduces Vector, Line, and Coord classes.
  • Depricated locked ports. Instead different port purposes can now be defined.
  • Introduces process and purpose parameters to layer elements.
  • Introduces derived layers to allow for layer boolean operations. This makes the RDD more flexible for future technology changes.
  • Updated the edge generation algorithms to include both an outside and inside edge.
  • Updated the routing algorithms to use new gdspy features.
  • Added stretching operations.
  • Extended the RDD to include display resources.
  • Fix issues with writing to a GDSII file.
  • Added snap to grid functionality.
  • Implemented parameters caching.
  • Added port alignment operations.
  • Added PortList class for special port filtering functionality.
  • Created layer mappers.
  • Changed the default coordinate system to improve port transformations.
  • Updates shapes and polygons to only include single polygons. Multiple polygons are now moved to the PolygonGroup class.
  • Updated ports to extend from the Vector.
  • Added a custom LayerList class that compares already added layers.
  • Updated mixins to a single MixinBowl meta-configuration.
  • Updated the datatype parameter of ports that represents primitive connects.
  • Added NumberParameter which supports 'int' and 'float' parameters.
  • Added ComplexParameter which supports 'int', 'float' and 'complex' parameters.
  • Added automatic docstring generation.

Version 0.0.3 (March 12, 2019)

  • Added Dummy ports for crossing nodes in netlist.
  • Automatically generate terminal edges for metal polygons.
  • Added shape for yTron.
  • Added path routing between two terminals.
  • Define a route using a list of terminals.
  • Device cell detection (Junction, Via, etc).
  • Basic LVS implementation.

Version 0.0.2 (Jan 11, 2019)

  • Implemented Manhattan routing between terminals.
  • Integrated circleci.
  • Started adding unit tests using pytest.
  • Updated auto doc generation for classes.
  • Added MidPointField for port and terminal midpoints.
  • Introduces the Shape class that allows for complex point manipulations.
  • Introduces term which is a vertical connection port.
  • Routes are defined as a Shape with two connected terminal ports.

Version 0.0.1 (Dec 01, 2018)

  • Initial release.

About

Parameterized verification framework (PCells, DRC, LVS) for Superconducting and Quantum Electronics.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%