Skip to main content

NeoH to SystemVerilog transpiler

Project description

neoh

NeoH (or NeoHDL) is a declarative HDL, proficient in creating extremely fast and secure testbenches, with complete support for SystemVerilog, as it transpiles into said HDL.

Features

• Modular "blocks", improves on "modules" in SystemVerilog:

block Example(in a, in b, out c) logic {
    ret tempassign c [always 7:0] <= a + b;
}
// NOTE tempassign assign a value to a variable for only that block. The [always MSB:LSB] identifier can be assigned to either the result, or expression.

• Improves on "interfaces":

piece ExampleBus {
    in addr, in data, out ready
}
pieced block Example(ExampleBus <= bus){}

• Improved hierarchy support:

block top(in x, in y, out z) logic {
    n1 passparams example(x,y,z);
    ret z <= n1;
}

• Easier macros with "known":

known macro1 <= clk, rst;
// pass into block
block macroeater(in clk, in rst) {} 

• Testbenches are easier now:

testbench random target(RandomBlock){
    getvars(signal1, signal2, !signal3, clk, rst);
// "!" before a var (in getvars) indicates it should never be included, if, for example, "*" is passed as an argument (which means "all")
    when(BEGIN){
        put signal1 <= 1;
        /10 expect(signal2 == 1);
        pulse len(clk), gap(rst);
        /50 watchfor req <= ack & /100 out(status);
       writefile(mode vcd, file output.vcd); 
    }
}

• Along with "testgroups":

testgroup ExampleGroup {
    do tb_random;
    same {
        tb1
        tb2
    } // "same" = synchronous running;
}

• Typing "always_ff" is easier now 🙃:

aff posedge(clk) or negedge(rst) {}

In Conclusion...

• It provides a more declarative way to write testbenches.

• No more boilerplate code with complex hierarchies.

• And more modular syntax.

Installation

Ensure you have Rust/Cargo installed.

cargo install neoh

Quick Start

Create a file called simple.neoh:

// simple.neoh

block Example(in a, in b, out c) logic {
    ret c <= a + b;
}

testbench Verification target(Example) {
    getvars(a, b, c);
    when(BEGIN) {
        put a <= 1;
        put b <= 2;
        /100 out("Hello Neo!");
    }
}

Compile it:

neoh simple.neoh
# Generates simple.sv

Contributing

We welcome contributions! Please fork the repository and submit a pull request.

  1. Run cargo test to ensure changes pass.

  2. Add tests for new features in /tests.

RELEASES

• v1.0.0-beta on Github • v0.3.2 on crates.io

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

neoh-0.1.0.tar.gz (16.8 kB view details)

Uploaded Source

Built Distribution

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

neoh-0.1.0-py3-none-any.whl (15.5 kB view details)

Uploaded Python 3

File details

Details for the file neoh-0.1.0.tar.gz.

File metadata

  • Download URL: neoh-0.1.0.tar.gz
  • Upload date:
  • Size: 16.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for neoh-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6a0c4d3afcc0399dd398564d0fc14d09c5d433301a5f40a7df3673ca6afb7d72
MD5 c2d7821d173ec557b46e191a472055ae
BLAKE2b-256 34b6a96b0b62031054a3209ab925354021cf3996e9c1f88a4aaddc2cc676898a

See more details on using hashes here.

File details

Details for the file neoh-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: neoh-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for neoh-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f1612f534b68eb454fe770cc4d7a04a75943a2eabac7744107574b5306bc4613
MD5 1d40c82566377cdd3b4e2d133340afde
BLAKE2b-256 f239c9a2955237df414f44da1092d4534b16224fd6fde97c7f3a89f23386c619

See more details on using hashes here.

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