Skip to main content

CAD layout electrical connectivity checker

Project description

snarled README

Layout connectivity checker.

snarled is a python package for checking electrical connectivity in multi-layer layouts.

It is intended to be "poor-man's LVS" (layout-versus-schematic), for when poverty has deprived the man of both a schematic and a better connectivity tool.

Installation

Requirements:

  • python >= 3.10 (written and tested with 3.11)
  • numpy
  • klayout (python package only)

Install with pip:

pip install snarled

Alternatively, install from git

pip install git+https://mpxd.net/code/jan/snarled.git@release

Example

See examples/check.py (python interface) or examples/run.sh (command-line interface).

Command line:

snarled connectivity.oas connectivity.txt -m layermap.txt

Python interface:

from pprint import pformat
import logging

import snarled
from snarled.types import layer_t


logging.basicConfig()
logging.getLogger('snarled').setLevel(logging.INFO)


connectivity = [
    ((1, 0), (1, 2), (2, 0)),   # M1 to M2 (via V12)
    ((1, 0), (1, 3), (3, 0)),   # M1 to M3 (via V13)
    ((2, 0), (2, 3), (3, 0)),   # M2 to M3 (via V23)
    ]

labels_map: dict[layer_t, layer_t] = {
    (1, 0): (1, 0),
    (2, 0): (2, 0),
    (3, 0): (3, 0),
    }

filename = 'connectivity.oas'

nets = snarled.trace_layout(filename, connectivity, topcell='top', labels_map=labels_map)
result = snarled.TraceAnalysis(nets)

print('\n')
print(result)

this prints the following:

INFO:snarled.trace:Adding layer (3, 0)
INFO:snarled.trace:Adding layer (2, 3)
INFO:snarled.trace:Adding layer (1, 3)
INFO:snarled.trace:Adding layer (1, 2)
INFO:snarled.trace:Adding layer (1, 0)
INFO:snarled.trace:Adding layer (2, 0)


Trace analysis
=============
Nets
(groups of electrically connected labels)
        SignalA,SignalB
        SignalC,SignalD,SignalI
        SignalE,SignalF
        SignalG,SignalH
        SignalK
        SignalK
        SignalL

Opens
(2+ nets containing the same name)
        SignalK : 2 nets

Shorts
(2+ unique names for the same net)
        SignalA,SignalB
        SignalC,SignalD,SignalI
        SignalE,SignalF
        SignalG,SignalH
=============

Code organization

  • The primary functionality is in trace; specifically trace.trace_layout().
  • main provides a command-line interface, supported by the functions in utils.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

snarled-1.0.tar.gz (33.0 kB view hashes)

Uploaded Source

Built Distribution

snarled-1.0-py3-none-any.whl (33.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page