All Projects → byuccl → spydrnet

byuccl / spydrnet

Licence: BSD-3-Clause license
A flexible framework for analyzing and transforming FPGA netlists. Official repository.

Programming Languages

python
139335 projects - #7 most used programming language
tcl
693 projects

Projects that are alternatives of or similar to spydrnet

xeda
Cross EDA Abstraction and Automation
Stars: ✭ 25 (-48.98%)
Mutual labels:  fpga, hardware, eda
Kactus2dev
Kactus2 is a graphical EDA tool based on the IP-XACT standard.
Stars: ✭ 82 (+67.35%)
Mutual labels:  fpga, hardware, eda
Vtr Verilog To Routing
Verilog to Routing -- Open Source CAD Flow for FPGA Research
Stars: ✭ 466 (+851.02%)
Mutual labels:  fpga, eda, cad
Space Invaders Vhdl
Space Invaders game implemented with VHDL
Stars: ✭ 142 (+189.8%)
Mutual labels:  fpga, hardware
Connectal
Connectal is a framework for software-driven hardware development.
Stars: ✭ 117 (+138.78%)
Mutual labels:  fpga, hardware
Open Register Design Tool
Tool to generate register RTL, models, and docs using SystemRDL or JSpec input
Stars: ✭ 126 (+157.14%)
Mutual labels:  fpga, eda
Systemrdl Compiler
SystemRDL 2.0 language compiler front-end
Stars: ✭ 95 (+93.88%)
Mutual labels:  fpga, eda
Axi
AXI SystemVerilog synthesizable IP modules and verification infrastructure for high-performance on-chip communication
Stars: ✭ 227 (+363.27%)
Mutual labels:  fpga, hardware
Echomods
Open source ultrasound processing modules and building blocks
Stars: ✭ 200 (+308.16%)
Mutual labels:  fpga, hardware
awesome-hwd-tools
A curated list of awesome open source hardware design tools
Stars: ✭ 42 (-14.29%)
Mutual labels:  fpga, hardware
tapasco
The Task Parallel System Composer (TaPaSCo)
Stars: ✭ 66 (+34.69%)
Mutual labels:  fpga, hardware
dot
distributed data sync with operational transformation/transforms
Stars: ✭ 73 (+48.98%)
Mutual labels:  transformations, transformation
Neorv32
A small and customizable full-scale 32-bit RISC-V soft-core CPU and SoC written in platform-independent VHDL.
Stars: ✭ 106 (+116.33%)
Mutual labels:  fpga, hardware
Glasgow
Scots Army Knife for electronics
Stars: ✭ 1,374 (+2704.08%)
Mutual labels:  fpga, hardware
Openfpgaduino
All open source file and project for OpenFPGAduino project
Stars: ✭ 137 (+179.59%)
Mutual labels:  fpga, hardware
Nyuziprocessor
GPGPU microprocessor architecture
Stars: ✭ 1,351 (+2657.14%)
Mutual labels:  fpga, hardware
Hastlayer Sdk
Turning .NET assemblies into FPGA hardware for faster execution and lower power usage. See the Readme and https://hastlayer.com.
Stars: ✭ 226 (+361.22%)
Mutual labels:  fpga, hardware
Haddoc2
Caffe to VHDL
Stars: ✭ 57 (+16.33%)
Mutual labels:  fpga, hardware
icebreaker-amaranth-examples
This repository contains iCEBreaker examples for Amaranth HDL.
Stars: ✭ 26 (-46.94%)
Mutual labels:  fpga, hardware
basic-ecp5-pcb
Reference design for Lattice ECP5 FPGA. Featuring Raspberry Pi interface and 6 PMODs
Stars: ✭ 71 (+44.9%)
Mutual labels:  fpga, hardware

Welcome to SpyDrNet!

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 with the package to introduce the framework, its features, and functionality. To list and load these netlists, modify the following example:

>>> 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 :ref:`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 :ref:`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 :ref:`LICENSE`):

Copyright (C) 2019, Brigham Young University
All rights reserved.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].