Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/magical-eda/MAGICAL

Machine Generated Analog IC Layout
https://github.com/magical-eda/MAGICAL

Last synced: 3 months ago
JSON representation

Machine Generated Analog IC Layout

Lists

README

        

# MAGICAL #

MAGICAL: Machine Generated Analog IC Layout

This is the top-level MAGICAL flow repository. In MAGICAL, we maintain seperate components, such as constraint generation, placement and routing, in different repository. And we integrate each component through top-level python flow.

This project is currently still under active development.

# Dependency #

- Python 3.7 and additional packages
- Refer to [Dockerfile](https://github.com/magical-eda/MAGICAL/blob/docker/Dockerfile).

- [Boost](https://www.boost.org)
- Need to install and visible for linking. Required version at least 1.62.

- [Flex](https://github.com/westes/flex)
- Need to install, required by Limbo package

- [Zlib](https://www.zlib.net)
- Required by Limbo package

- [Limbo](https://github.com/limbo018/Limbo)
- Required latest

- [LPSolve 5.5](http://lpsolve.sourceforge.net/5.5/)
- Required version 5.5

- [Lemon 1.3.1](https://lemon.cs.elte.hu/trac/lemon)
- Required version 1.3.1

# How to clone #

To clone the repository and submodules, go to the path to download the repository.
```
# clone the repository
git clone https://github.com/magical-eda/MAGICAL.git
git submodule init
git submodule update
```

# How to build #

Two options are provided for building: with and without [Docker](https://hub.docker.com). You can also build from source (NOT RECOMMENDED) resolving the required dependancies first.

## Build with Docker

You can use the Docker container to avoid building all the dependencies yourself.
1. Install Docker on [Linux](https://docs.docker.com/install/).
2. Navigate to the repository.
```
cd MAGICAL
```
3. Get the docker container with either of the following options.
- Option 1 (Recommended): pull from the cloud [jayl940712/magical](https://hub.docker.com/r/jayl940712/magical).
```
docker pull jayl940712/magical:latest
```
- Option 2: build the container.
```
docker build . --file Dockerfile --tag magical:latest
```
4. Run the docker container
```
docker run -it -v $(pwd):/MAGICAL jayl940712/magical:latest bash
```
Or if you used option 2 to build the container
```
docker run -it -v $(pwd):/MAGICAL magical:latest bash
```
# How to run #

Benchmark circuit examples are under examples/

All technology related parameters including benchmark circuit sizing are samples and not related to any proprietary PDK information.

Benchmark circuits currently includes:
1 adc, 1 comparator, 3 ota

To run the benchmark circuits
```
cd /MAGICAL/examples/BENCH/ (ex. adc1)
source run.sh
```

The output layout gdsii files: BENCH/TOP_CIRCUIT.route.gds (ex. adc1/xxx.route.gds)

Note: currently adc2 have routing issues.

# Custom layout constraint inputs #

The automatic symmetry constraint generation is currently embedded into the flow. To ensure circuit functionality it is ideal that designers provide constraints to guide the placement and routing.

A sample device and net symmetry constraint is given for adc1. These files should also be the output for the current automatic symmetry constraint generation flow.

Sample symmetry device constraint file:
examples/adc1/CTDSM_TOP.sym

Sample symmetry net constraint file:
examples/adc1/CTDSM_TOP.symnet

## Device symmetry constraints

Device symmetry constraints greatly affect the placement solution and output layout quality. Currently we only consider symmetry groups, symmetry device pairs and self-symmetric device constraints.

**Symmetry group**: A group of symmetry device pairs and self-symmetric devices that share the same symmetry axis.

**Symmetry device pair**: Two devices that are reflection symmetric with respect to a symmetry axis (usually vertical).

**Self-symmetry device**: A single device that is reflection symmetric with itself respect to a symmetry axis.

## Net symmetry constraints

Similar to device symmetry constraints, we consider symmetry net pairs and self-symmetry net constraints.

**Symmetry net pair**: Two nets that are reflection symmetric with respect to a symmetry axis (usually vertical). For a valid constraint, the corresponding pins of the two nets must be reflective symmetric with a axix.

**Self-symmetry net**: A single net that is reflection symmetric with itself respect to a symmetry axis.

# License #
[BSD 3-Clause](https://github.com/magical-eda/MAGICAL/blob/master/LICENSE)