Skip to main content
https://img.shields.io/pypi/v/spydrnet.svg https://img.shields.io/pypi/pyversions/spydrnet.svg https://app.travis-ci.com/byuccl/spydrnet.svg?branch=master

A flexible framework for analyzing and transforming netlists. Built to fill an important gap in FPGA research and reliability. Currently available as a pure Python package.

Simple Examples

SpyDrNet can be used to create netlists from scratch. Because it is a low-level framework, manual netlist creation can be tedious (much like writting a high level application in assembly). To assist in rapid productivity, parsers and composers are provided for common netlist formats. Currently EDIF and structural Verilog are supported, but the roadmap also includes structural VHDL, Verilog Quartus Mapping Files (Intel’s VQM), and JSON.

Loading Example Netlists

Several example netlists are included in the repository to introduce the framework, its features, and functionality. To list and load these netlists, see the using_example_netlists page and then run the following:

>>> import spydrnet as sdn
>>> sdn.example_netlist_names
['4bitadder', '8051', ... , 'zpu4']
>>> netlist = sdn.load_example_netlist_by_name('4bitadder')

Parsing a Netlist

>>> netlist = sdn.parse('<netlist_filename>.edf')

View Data Associated with any Netlist Element

>>> netlist.data
{'.NAME': 'adder', 'EDIF.identifier': 'Z4bitadder', ... }

List Libraries in a Netlist

>>> list(library.name for library in netlist.libraries)
['VIRTEX', 'UNILIB', 'work']

List Definitions in a Library

>>> library = netlist.libraries[2]
>>> list(definition.name for definition in library.definitions)
['adder']

List Ports, Cables, and Instances in a Definition

>>> definition = library.definitions[0]
>>> list(port.name for port in definition.ports)
['data1(3:0)', 'data2(3:0)', 'answer(3:0)', 'clk', 'reset', 'enable']
>>> list(cable.name for cable in definition.cables)
['answer_1(0)', 'answer_1(1)', 'answer_1_(2)', 'answer_1(3)', ... ]
>>> list(instance.name for instance in definition.children)
['un3_answer1_axbxc3', 'un2_answer2_axbxc3', 'reset_c_i', ... ]

Compose a Netlist

This example exports a netlist into an EDIF formatted netlist file by the given name.

>>> sdn.compose(netlist, '<filename>.edf')

The following equivalent code may also be used.

>>> netlist.compose('<filename>.edf')

Additional Examples

Additional examples are available in the documentation for netlist creation, analysis, and transformation.

Install

The stable release of SpyDrNet can be installed using pip:

> pip install spydrnet

To install from PyPI with all optional dependicies use:

> pip install spydrnet[all]

For more installation instruction, see INSTALL.rst.

Bugs

Bugs can be reported on the issues page or they can be fixed through a fork / pull request. All changes are welcome. Discussion of ideas for new features is available on the mailing list.

A Brief History

The BYU Configurable Computing Lab actively maintains the BYU EDIF Tools - a Java API for creating, modifying, or analyzing EDIF netlists. These tools are tied to the EDIF netlist format and provide JEDIF tools capable of flattening a circuit (by removing hierarchical organization) and applying fault-tolerance techniques such as triple modular redundancy (TMR). Development of SpyDrNet began back in 2016 with the idea of creating an accessible, format independent, tool for netlist analysis and transformation. The underlying intermediate data structure is designed preserve proper netlist relationship as a generic netlist while allowing for the preservation of format specific constructs. A language agnostic prototype was developed and this prototype soon became useful in the lab for netlist analysis and reliability transformation studies. A more mature (though still having room for growth) tool is presented here.

Design Notes

We have tried to build this tool around the principles of expandability and modularity. Care has been taken to separate different parts of the program in an organized fashion.

How to contribute

If this tool has been useful to you, or have new feature ideas that you would like to implement, feel free to make a pull request, or take a look at the issues to see how to contribute. New ideas, bug fixes and suggestions are also welcome (See CONTRIBUTING.rst).

Special Thanks

Special thanks is given to NetworkX - “a python package for the creation, manipulation, and study of the structure, dynamics and functions of complex networks.” This mature project has been used as a template for much of SpyDrNet’s documentation and code structure. It also has saved enormous effort in heavy graph analysis as a robust and complete library used to analyze the relationships between circuit nodes.

License

Released under the BSD 3-Clause License (see LICENSE):

Copyright (C) 2019, Brigham Young University
All rights reserved.

Release files for spydrnet 1.13.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for spydrnet 1.13.0
File Size Uploaded
spydrnet-1.13.0.tar.gz 937.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for spydrnet 1.13.0
File Interpreter ABI Platform
spydrnet-1.13.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.9 MB

Release files / spydrnet-1.13.0.tar.gz

Download URL spydrnet-1.13.0.tar.gz
Size 937.5 kB
Tags Source
SHA-256 checksum
How to use checksums
e5bd1cf33f11c3f27d0d3a26603dcfbfe1bbe22386e254018e418c7ae6b5c53a
BLAKE2b-256 checksum
How to use checksums
52d90ccd43942bd4ee31255d7ca858307083edc3944817120c0d83041bb13071
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.8.10

Release files / spydrnet-1.13.0-py3-none-any.whl

Download URL spydrnet-1.13.0-py3-none-any.whl
Size 1.0 MB
Tags Python 3
SHA-256 checksum
How to use checksums
f4c6375ab679ee37a41749fa22ebf9e404d3d01d81d93239c2f11fb2f2747100
BLAKE2b-256 checksum
How to use checksums
03b1f14e94d56eb8f0aeb6a38eafc526470c30e898966e00cc6b099f106f8026
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.8.10

Release history Release notifications | RSS feed

This release

1.13.0 This release

2 release files

1.12.2

2 release files

1.11.1

2 release files

1.11.0

2 release files

1.10.0

2 release files

1.9.0

2 release files

1.8.3

2 release files

1.8.2

2 release files

1.8.1

2 release files

1.8.0

2 release files

1.7.0

2 release files

1.6.0

2 release files

1.5.0

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page