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 gmsh
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 .
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.py
For the more advanced example with their own defined Rule Deck Database, as explained here.
python spira/technologies/default/circuits/ytron_circuit.py
See 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
ref
parameter toreference
inSRef
.
- Added first version of documentation.
- Renamed
Fields
toParameters
to overcome confusion. - Renamed
elemental
toelements
, sincespira.Cell
does not inherit fromgdspy.Cell
anymore. - Added parameter restrictions and preprocessing capabilities.
- Updated parameters to accept an extra restriction argument.
- Introduces
Vector
,Line
, andCoord
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.
- 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
term
which is a vertical connection port. - Routes are defined as a Shape with two connected terminal ports.
- Initial release.