Skip to content

Navigation Menu

Sign in
Appearance settings
Sign up
Appearance settings
Open more actions menu

Latest commit

 

History

118 Commits
118 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

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.

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.