Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
132 commits
Select commit Hold shift + click to select a range
9e1c7cc
Updated LPE
Jan 21, 2019
9b60692
Basic, hacking level net extraction algorithm.
Jan 21, 2019
86a77c6
Added nets to cell.
Jan 21, 2019
f09cad4
Added device layer for pinlabel merging.
Jan 22, 2019
25e7859
Introduced module 'mask' that contains merged ply objects.
Jan 22, 2019
afed723
Added Net class. Updated Mesh and Geometry.
Jan 23, 2019
a43ae92
Updated structure to use mask objects.
Jan 23, 2019
c20c325
Updated LVS algo
Jan 25, 2019
f23d813
Netlist extraction working for JJ and JTL circuits.
Jan 26, 2019
cfca73c
Added create_routes class method.
Jan 29, 2019
0af471f
Added create_boxes class method.
Feb 6, 2019
131c783
Sync PCell LVS and Layout LVS.
Feb 7, 2019
49a3728
Fixed an issue with the cell name generator.
Feb 8, 2019
c31056d
Added Jtl_Via example and fixed a few routing issues.
Feb 8, 2019
446f9a7
Updated io issue when auto-centering cells.
Feb 11, 2019
39229a7
Major changes to the LVS implementation.
Feb 12, 2019
8020d7f
Fixed terminal detection issue with layout cells.
Feb 12, 2019
4af55d3
Updated the port and terminal classes.
Feb 16, 2019
8e3c768
Fixed a transformation issue with Terminals.
Feb 17, 2019
ce012f9
Major LVS updates.
Feb 20, 2019
81fd205
Busy updating the LVS method for multiple-hierarchies.
Feb 21, 2019
6457ef9
"Major LVS updates"
Feb 21, 2019
d66941d
Added route-to-device connection detection using ports.
Feb 26, 2019
b3405c9
Route to structure connects.
Mar 2, 2019
3ce075c
Huge update.
Mar 7, 2019
13f6976
Route code base update.
Mar 9, 2019
9deee27
Added LVS and updated PCell generation.
Mar 12, 2019
eb6f2b5
Version bump.
Mar 12, 2019
3b17197
Version bump.
Mar 12, 2019
71a6fc9
Updated readme.
Mar 12, 2019
c4d3eda
Updated readme.
Mar 12, 2019
898af1b
Updated readme.
Mar 12, 2019
11707b0
Updated future changes in readme
Mar 13, 2019
0e22b78
Implemented locked parameters and updated parameter restrictions.
Mar 15, 2019
5fd0cd2
Added PurposeField.
Mar 15, 2019
e3fc811
Basic functioning JJ fully parameterized.
Mar 16, 2019
c6cfd8b
Basic width DRC tested.
Mar 17, 2019
101c694
Update code structure.
Mar 30, 2019
943795f
Added alias parameter to cell.
Mar 30, 2019
1192e1b
Added MITLL devices.
Apr 1, 2019
6739f9b
Added MITLL circuits.
Apr 1, 2019
2ac0020
Started updating transformation algorithms.
Apr 7, 2019
9dbf7e0
Started with refactoring.
Apr 11, 2019
ddab97a
Updated imports
Apr 12, 2019
b61e8bd
Updated imports
Apr 15, 2019
93a1620
Testing transforms
Apr 18, 2019
3d563b5
Started with netlist updates.
Apr 19, 2019
52ace57
Updating routes for new transforms.
Apr 22, 2019
8e129af
Updated move SREF method for new parameterized transforms.
Apr 25, 2019
9ac95dd
Updating transforms.
Apr 30, 2019
f32641a
Updated the input parsing of a layout with new transforms.
May 3, 2019
2734c4c
Updated the input parsing of a layout with new transforms.
May 4, 2019
5e14f95
Updated some examples issues.
May 13, 2019
e079273
Updated the GDSII output method.
May 22, 2019
723a844
Added cell and sref stretching.
May 24, 2019
dd4d7c0
Updated the sample test structure.
May 24, 2019
1423e76
Started updating the ports, labels and polygons.
May 27, 2019
5be49c1
Starting implementing virtual models and simulation geometry.
Jun 3, 2019
fded49e
Introduced net filters.
Jun 5, 2019
c929f7c
Implemented polygon nets recursively.
Jun 6, 2019
c81bdfc
Updating the net filtering methods.
Jun 7, 2019
562fe6d
Updating the net filtering methods.
Jun 11, 2019
c3cb41c
Busy updating the electrical connection algorithm.
Jun 16, 2019
5fc824a
Added ElectricalConnection and Edges.
Jun 17, 2019
7e655dc
Added filters to RDD, and cleaned some of the samples.
Jun 18, 2019
2b4dfaf
Update the electrical connection algorithm
Jun 19, 2019
783cfab
Testing gdsii writing.
Jun 21, 2019
fdc899a
Updated the routing algorithms.
Jun 23, 2019
9027d6c
Minor changes.
Jun 24, 2019
0a09cfd
Got the new ERC algorithm working.
Jun 25, 2019
ec66c4d
Minor changes.
Jun 25, 2019
185a45c
Updated the circuit PCells exmaples and port connectinos.
Jun 26, 2019
02155d2
Added port and center alignments to SRef.
Jun 28, 2019
e8e87df
Started updating the docs and readme.
Jun 30, 2019
acfcf7e
Fixed bug with ports not getting re-calculated when transformation ch…
Jul 1, 2019
374ec83
Updated the basic tutorial docs and fixed a few issues with ports.
Jul 4, 2019
a4e5d1a
Fixed issues with stretching port to port.
Jul 8, 2019
b2d9e73
Started with the advanced tutorial documentation.
Jul 9, 2019
6aa9714
Updated the advanced docs.
Jul 10, 2019
5058e77
Updated version
Jul 10, 2019
54ec18b
Updated packages.
Jul 10, 2019
c89627f
Updated readme.
Jul 10, 2019
555a7cd
Updated readme and docs.
Jul 10, 2019
d35d2c9
Removed circleci unit testing.
Jul 10, 2019
9ab7304
Updated docs.
Jul 11, 2019
743c77f
Fixed issues with expand transforms and flattening. Also added suppor…
Jul 12, 2019
46b7b3a
Updated the expand transform implementation, which solves a lot of is…
Jul 15, 2019
9edf0c0
Updated `ref` parameter to `reference` in SRef.
Jul 15, 2019
6d48f8a
Updated the input parser, updated advanced docs.
Jul 16, 2019
afad761
Doc rendering.
Jul 16, 2019
b37571e
Updated the setup.py
Jul 16, 2019
dae08fe
Added edge adapters.
Jul 17, 2019
5abb590
Updated the edge measurement algorithms in vmodel.
Jul 17, 2019
3c9182e
Updated the netlist filtering algos, and added edge support for trans…
Jul 18, 2019
c89fbe3
Fixed a few issues with transformation edge measurements.
Jul 18, 2019
f5137d3
Fixed an ERC issue by always snapping transformed shapes to grid.
Jul 20, 2019
c23efd4
Fixed an ERC issue by always snapping transformed shapes to grid.
Jul 23, 2019
422768d
Stash
Jul 24, 2019
91557bc
Netlist extraction algorithm seems to be working.
Jul 24, 2019
55f9540
Started testing the new io methods.
Jul 28, 2019
01cf1ac
Fixed issues with the new output gdsii method.
Jul 28, 2019
64d4bf4
Fixed issues with the new output gdsii method.
Jul 30, 2019
ca2523b
Updated the input class. Included layer mapping.
Jul 30, 2019
ffa6a73
Updated the edge adapter and added a few more filters.
Jul 31, 2019
86cee75
Added port to polygon filters.
Aug 1, 2019
efd0395
Fixed an issue with ERC by reversing shape points and removing straig…
Aug 1, 2019
82b609c
Refactoring the vmodel code base.
Aug 1, 2019
e45e6f0
Added PinAttachFilter.
Aug 3, 2019
c5705d7
Updated filter in RDD.
Aug 3, 2019
0c8283f
Create .travis.yml
JCoetzee123 Aug 6, 2019
58e6178
Basic netlist extraction working for pcells.
Aug 7, 2019
75cf956
Update .travis.yml
JCoetzee123 Aug 7, 2019
a4f40f7
Update requirements.txt
JCoetzee123 Aug 7, 2019
fe4aba7
Updating the edge ports.
Aug 9, 2019
2f728da
Added a few examples.
Aug 9, 2019
15a5ec2
Added tint and shade to color. Updated the plotly graph viewer.
Aug 10, 2019
731eb56
Fix issues with the netlist extraction algorithms.
Aug 10, 2019
fdf2b44
Fixed an issue with a stretching example.
Aug 10, 2019
b5f104e
Updated output and port filters.
Aug 11, 2019
075939f
Updated stretching examples
Aug 11, 2019
e0a123d
Updated the toplevel netlist.
Sep 11, 2019
7673e20
Fix an issues with the port_alignment algorithm.
Sep 15, 2019
cd89d4f
Added device detection for parsed layouts.
Sep 18, 2019
5f7201d
Added documentation for netlist extraction, fixed a few issues, and u…
Oct 3, 2019
cc323b4
Updated MITLL examples to be more descriptive and intuitive.
Oct 4, 2019
7bc69b2
Updated the docs and readme.
Oct 6, 2019
0162291
Added version changes to readme.
Oct 6, 2019
4b69957
Version bump
Oct 6, 2019
7bfc789
Fixed issue with readme link.
Oct 6, 2019
6209bea
Merge branch 'master' of https://github.com/rubenvanstaden/spira
Oct 6, 2019
714add3
Merged next-netlist branch.
Oct 6, 2019
6d1d1ee
Fixed readme issues.
Oct 7, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
20 changes: 0 additions & 20 deletions .circleci/config.yml

This file was deleted.

2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
build/
dist/
env/
mit/
aist/
.vscode/
debug/
.eggs/
Expand Down
9 changes: 9 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
language: python
python:
- "3.7-dev" # 3.7 development branch
# command to install dependencies
install:
- pip install -r requirements.txt
# command to run tests
script:
- pytest tests/geo_test.py
273 changes: 256 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,108 @@
# SPiRA
<!-- PROJECT SHIELDS -->
<!--
*** I'm using markdown "reference style" links for readability.
*** Reference links are enclosed in brackets [ ] instead of parentheses ( ).
*** See the bottom of this document for the declaration of the reference variables
*** for contributors-url, forks-url, etc. This is an optional, concise syntax you may use.
*** https://www.markdownguide.org/basic-syntax/#reference-style-links
-->
[![Version][version-shield]][version-url]
[![Contributors][contributors-shield]][contributors-url]
<!-- [![Forks][forks-shield]][forks-url] -->
<!-- [![Issues][issues-shield]][issues-url] -->
[![MIT License][license-shield]][license-url]

The goal of SPiRA is develop a framework for IC designers to create and verify cicuit layouts. The framework uses a parameterized methodology that allows designers to generate PCells, apply rule checking, and LVS verification. The framework allows the following, though some parts are still under active development:

* **RDD**: The newly proposed Python-based PDK schema, called Rule Deck Database. This schema allows connecting directly to Python object trees for advance data manipulation.
* **PCells**: Layout generators can be created using basic Python. The framework focusses on reducing native Python boiler-plate code to improve design efficiency.
* **DRC** (experimental): Rule checking are done by placing parameter rescritions, and connecting to a Template Cell created defined in the RDD.
* **LVS** (experimental): A graph network can be extracted using a mesh-to-graph methodology.

## Depenencies
<!-- PROJECT LOGO -->
<br />
<p align="center">
<a href="https://github.com/rubenvanstaden/spira">
<img src="docs/_figures/spira_logo.png" alt="Logo" width="200" height="280">
</a>

On Fedora install the following:
<h3 align="center">Quantum Layout Design Environment</h3>

<p align="center">
The next-generation object-oriented script-based PCell design environment.
<br />
<a href="https://spira.readthedocs.io/en/latest/"><strong>Explore the docs »</strong></a>
<br />
<br />
<a href="https://github.com/rubenvanstaden/spira/issues">Report Bug</a>
·
<a href="https://github.com/rubenvanstaden/spira/issues">Request Feature</a>
</p>
</p>



<!-- TABLE OF CONTENTS -->
## Table of Contents

* [About the Project](#about-the-project)
* [Built With](#built-with)
* [Getting Started](#getting-started)
* [Prerequisites](#prerequisites)
* [Installation](#installation)
* [Usage](#usage)
* [Roadmap](#roadmap)
* [Contribute](#contribute)
* [License](#license)
* [Contact](#contact)
* [Acknowledgements](#acknowledgements)



<!-- ABOUT THE PROJECT -->
## About The Project

<!-- [![Product Name Screen Shot][product-screenshot]](https://example.com) -->
<!-- [![Product Name Screen Shot][product-screenshot]](docs/_figures/spira_logo.png) -->
![phidl example image](https://github.com/rubenvanstaden/spira/blob/master/docs/_figures/_adv_jtl_false.png)

**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.

A list of used resources that was helpful in the development of the SPiRA framework.

### Built With

Love



<!-- GETTING STARTED -->
## Getting Started

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.

### Prerequisites

This is an example of how to list things you need to use the software and how to install them in Fedora:

```bash
sudo dnf install redhat-rpm-config
Expand All @@ -19,12 +112,9 @@ sudo dnf install tkinter
sudo dnf install gmsh
```

Documentation for other Linux systems can be found in [installation](https://spira.readthedocs.io/en/latest/installation.html)

## Installation
### Installation

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

```bash
python3 -m venv env
Expand All @@ -40,15 +130,137 @@ pip install .
pip install -e .
```

## Documentation

The complete framework [documentation](https://spira.readthedocs.io/en/latest/overview.html) explains the basics of the RDD and PCell API. Note that the DRC and LVS modules are still being developed.
Examples of using the PCell implementation is given in [examples](https://github.com/rubenvanstaden/spira/tree/master/demo).
<!-- Examples of using the PCell implementation is given in [examples](https://spira.readthedocs.io/en/latest/pcell_examples.html). -->

<!-- USAGE EXAMPLES -->
## Usage

_For examples, please refer to the [Documentation](https://spira.readthedocs.io/en/latest/)_

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

```python
python tutorials/basic/_9_stretch_1.py
```

For the more advanced example with their own defined Rule Deck Database, as
explained [here](https://spira.readthedocs.io/en/latest/).

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


<!-- ROADMAP -->
## Roadmap

See the [open issues](https://github.com/rubenvanstaden/spira/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.


<!-- CONTRIBUTING -->
## Contribute

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**.

1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the Branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request



<!-- LICENSE -->
## License

Distributed under the MIT License. See `LICENSE` for more information.



<!-- CONTACT -->
## Contact

* Ruben van Staden - rubenvanstaden@gmail.com
* Coenrad Fourie - coenradf@gmail.com
* Kyle Jackman - kylejack1@gmail.com
* Joey Delport - joeydelp@gmail.com



<!-- ACKNOWLEDGEMENTS -->
## Acknowledgements

* [Gdspy](https://github.com/heitzmann/gdspy)
* [Phidl](https://github.com/amccaugh/phidl)
* [Clippers](http://www.angusj.com/delphi/clipper.php)



<!-- HISTORY OF CHANGES -->
## History of changes

### Version 0.2.0 (October 4, 2019)
* 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.

### 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.
Expand All @@ -61,3 +273,30 @@ Examples of using the PCell implementation is given in [examples](https://github

### Version 0.0.1 (Dec 01, 2018)
* Initial release.



<!-- MARKDOWN LINKS & IMAGES -->
<!-- https://www.markdownguide.org/basic-syntax/#reference-style-links -->
[version-shield]: https://img.shields.io/badge/version-0.2.0-blue
[version-url]: https://github.com/rubenvanstaden/spira/blob/master/spira/settings.py
[contributors-shield]: https://img.shields.io/github/contributors/othneildrew/Best-README-Template.svg?style=flat-square
[contributors-url]: https://github.com/rubenvanstaden/spira/graphs/contributors
[forks-shield]: https://img.shields.io/github/forks/othneildrew/Best-README-Template.svg?style=flat-square
[forks-url]: https://github.com/rubenvanstaden/spira/network/members
[issues-shield]: https://img.shields.io/github/issues/othneildrew/Best-README-Template.svg?style=flat-square
[issues-url]: https://github.com/rubenvanstaden/spira/issues`
[license-shield]: https://img.shields.io/github/license/othneildrew/Best-README-Template.svg?style=flat-square
[license-url]: https://github.com/rubenvanstaden/spira/blob/master/LICENSE
[product-screenshot]: images/screenshot.png


<!-- [contributors-shield]: https://img.shields.io/github/contributors/othneildrew/Best-README-Template.svg?style=flat-square
[contributors-url]: https://github.com/othneildrew/Best-README-Template/graphs/contributors
[forks-shield]: https://img.shields.io/github/forks/othneildrew/Best-README-Template.svg?style=flat-square
[forks-url]: https://github.com/othneildrew/Best-README-Template/network/members
[issues-shield]: https://img.shields.io/github/issues/othneildrew/Best-README-Template.svg?style=flat-square
[issues-url]: https://github.com/othneildrew/Best-README-Template/issues
[license-shield]: https://img.shields.io/github/license/othneildrew/Best-README-Template.svg?style=flat-square
[license-url]: https://github.com/othneildrew/Best-README-Template/blob/master/LICENSE.txt
[product-screenshot]: images/screenshot.png -->
Loading