The next-generation object-oriented script-based PCell design environment.
Explore the docs »
Report Bug
·
Request Feature
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.
- 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.
- 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.
A list of used resources that was helpful in the development of the SPiRA framework.
Love
This is an example of how you may give instructions on setting up your project locally. To get a local copy up and running follow these simple example steps.
This is an example of how to list things you need to use the software and how to install them in Fedora:
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 .For examples, please refer to the Documentation
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.pySee the open issues for a list of proposed features (and known issues). As a short overview here is the project focus over the next 12 month:
- Complete netlist extraction and device detection from a native GDSII layout.
- Add graph isomorphic checks for differences between the extracted layout netlist and that of the designed SPICE netlist.
- Implement DRC algorithms and integration support with parameter extraction engines.
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Distributed under the MIT License. See LICENSE for more information.
- Ruben van Staden - rubenvanstaden@gmail.com
- Coenrad Fourie - coenradf@gmail.com
- Kyle Jackman - kylejack1@gmail.com
- Joey Delport - joeydelp@gmail.com
- Added layout netlist extraction and viewing.
- Added electrical rule checking (ERC).
- Added filters for advanced layout manipulation.
- Updated ports for more information descriptions. Terminals can now be separated from port definitions.
- A new concept, called virtual modeling (VModel) is introduced. This allows you to create multiple, virtual versions of a single layout for either debugging or fabrication purposes.
- Routing algorithms have been updated to leverage speed improvements made in the Gdspy library.
- The GDSII parser has been updated for better code structure and faster read/write operations.
- 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.
