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.
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 gmshYou 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 .The framework documentation will get you started. For more examples please contact rubenvanstaden@gmail.com.
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.pyFor the more advanced example with their own defined Rule Deck Database, as explained here.
python spira/technologies/default/circuits/ytron_circuit.py- Documentation for Advanced Tutorials are not completely finished.
- Documentation for Reference have not been implemented.
- There are some issues with reflection transformations.
- Implement automatic netlist extraction.
- Implement post-layout design rule checking.
- Integrate with JoSIM and InductEx for parameter extraction.
- 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
refparameter toreferenceinSRef.
- Added first version of documentation.
- Renamed
FieldstoParametersto overcome confusion. - Renamed
elementaltoelements, sincespira.Celldoes not inherit fromgdspy.Cellanymore. - Added parameter restrictions and preprocessing capabilities.
- Updated parameters to accept an extra restriction argument.
- Introduces
Vector,Line, andCoordclasses. - 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
gdspyfeatures. - 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
PortListclass 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
PolygonGroupclass. - Updated ports to extend from the
Vector. - Added a custom
LayerListclass that compares already added layers. - Updated mixins to a single
MixinBowlmeta-configuration. - Updated the datatype parameter of ports that represents primitive connects.
- Added
NumberParameterwhich supports 'int' and 'float' parameters. - Added
ComplexParameterwhich supports 'int', 'float' and 'complex' parameters. - Added automatic docstring generation.
- 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.
- 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
termwhich is a vertical connection port. - Routes are defined as a Shape with two connected terminal ports.
- Initial release.