Skip to main content

SHDL (Simple Hardware Description Language) is a minimal HDL designed for creating digital circuits and easily simulating them. It compiles directly to C for maximum performance and portability. PySHDL is the Python interface for SHDL.

Project description

SHDL - Simple Hardware Description Language

PyPI Downloads

A lightweight hardware description language and Python driver for digital circuit simulation using exclusively logic gates! SHDL provides an intuitive syntax for defining digital circuits and a clean Python API for interacting with them (PySHDL).

Features

  • 🚀 Simple Syntax - Easy-to-learn hardware description language
  • 🐍 Python Integration - Seamless Python API for circuit simulation
  • C Backend - Compiles to optimized C code for fast simulation and portability
  • 🔧 Command Line Tools - Built-in compiler and utilities
  • 📦 Component Reuse - Import and compose reusable circuit components
  • 🔢 Constants Support - Use named constants for parameterizable designs

Installation

We recommend using uv for using PySHDL. If you don't have it installed, you can install it via pip:

pip install PySHDL

Quick Start

1. Define a Circuit (SHDL)

Create a file fullAdder.shdl:

component FullAdder(A, B, Cin) -> (Sum, Cout) {

    x1: XOR; a1: AND;
    x2: XOR; a2: AND;
    o1: OR;

    connect {
        A -> x1.A; B -> x1.B;
        A -> a1.A; B -> a1.B;

        x1.O -> x2.A; Cin -> x2.B;
        x1.O -> a2.A; Cin -> a2.B;
        a1.O -> o1.A; a2.O -> o1.B;

        x2.O -> Sum; o1.O -> Cout;
    }
}

2. Use in Python

from SHDL import Circuit

# Load and compile the circuit
with Circuit("fullAdder.shdl") as c:
    # Set input values
    c.poke("A", 1)
    c.poke("B", 1)
    c.poke("Cin", 1)
    # Run simulation
    c.step(10)
    # Read output
    result = c.peek("Sum")
print(f"Result: {result}")  # Output: Result: 60

3. Compile from Command Line

# Compile SHDL to C
shdlc adder.shdl -o adder.c

# Compile and build executable
shdlc adder.shdl --optimize 3

CLI Options

shdlc [options] <input.shdl>

Options:
  -o, --output FILE       Output C file (default: <input>.c)
  -I, --include DIR       Add directory to component search path
  -c, --compile-only      Generate C code only, do not compile to binary
  -O, --optimize LEVEL    GCC optimization level 0-3 (default: 3)

Python API

Circuit Class

Circuit(shdl_file, search_paths=None)

Create a new circuit instance from a SHDL file.

Methods:

  • poke(port_name, value) - Set an input port value
  • peek(port_name) - Read an output port value
  • step(cycles) - Advance simulation by N cycles
  • reset() - Reset circuit to initial state

Examples

See the examples/ directory for more complete examples:

  • interacting.py - Basic circuit interaction
  • SHDL_components/ - Reusable component library

Documentation

For comprehensive documentation, visit our Documentation Site.

GitHub repository: rafa-rrayes/SHDL

Requirements

  • Python >= 3.10
  • GCC or compatible C compiler (for circuit compilation)

📝 Feedback & Contributions Welcome

SHDL is still early-stage, and real-world feedback is incredibly valuable. If you try the library—whether for a small experiment, a class assignment, or a personal project—I would love to hear how it went.

Please consider sharing: • What worked well • What felt confusing or missing • Any bugs you hit • Feature ideas • Example circuits you built

You can give feedback in any of the following ways: • Open an Issue: 👉 https://github.com/rafa-rrayes/SHDL/issues • Start a Discussion: 👉 https://github.com/rafa-rrayes/SHDL/discussions • Submit a Pull Request: Improvements, examples, docs, and tests are all welcome. • Send me a message! 👉 rafa@rayes.com.br is my email.

Even a short comment like “Tried it — worked for me” helps guide development. Thank you for trying SHDL!

Author

Rafa Rayes
Email: rafa@rayes.com.br GitHub: rafa-rrayes

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

pyshdl-0.2.2.tar.gz (519.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyshdl-0.2.2-py3-none-any.whl (116.7 kB view details)

Uploaded Python 3

File details

Details for the file pyshdl-0.2.2.tar.gz.

File metadata

  • Download URL: pyshdl-0.2.2.tar.gz
  • Upload date:
  • Size: 519.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyshdl-0.2.2.tar.gz
Algorithm Hash digest
SHA256 8e7d2e503877c37f5dcd09b75c5b6b61ed1ba634f38dfc21eacd1dfb78928f2f
MD5 6e429db9c0ddd6f71f152fca2965fd0e
BLAKE2b-256 641697bbabf50920c7ca0432b02e0e55f14d3589af498c748b60eb0bf4808e0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyshdl-0.2.2.tar.gz:

Publisher: publish.yml on rafa-rrayes/SHDL

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyshdl-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: pyshdl-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 116.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyshdl-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ba5e091e086a0aee43b613633973df9ac37b5d8206ee8e582f28d2b5f31a55bf
MD5 1b86881845e348d7a2c40c9e97560d0b
BLAKE2b-256 eb23aa32d547f29f8a009f34e74dc946ef617b94281a6a4b8f037088d9a16358

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyshdl-0.2.2-py3-none-any.whl:

Publisher: publish.yml on rafa-rrayes/SHDL

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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