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.
-
Run
cargo testto ensure changes pass. -
Add tests for new features in
/tests.
RELEASES
• v1.0.0-beta on Github • v0.3.2 on crates.io
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a0c4d3afcc0399dd398564d0fc14d09c5d433301a5f40a7df3673ca6afb7d72
|
|
| MD5 |
c2d7821d173ec557b46e191a472055ae
|
|
| BLAKE2b-256 |
34b6a96b0b62031054a3209ab925354021cf3996e9c1f88a4aaddc2cc676898a
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f1612f534b68eb454fe770cc4d7a04a75943a2eabac7744107574b5306bc4613
|
|
| MD5 |
1d40c82566377cdd3b4e2d133340afde
|
|
| BLAKE2b-256 |
f239c9a2955237df414f44da1092d4534b16224fd6fde97c7f3a89f23386c619
|