Event-driven Verilog-A Simulator with a Python compatibility engine and optional Rust EVAS2 backend
Project description
EVAS — Event-driven Verilog-A Simulator
A lightweight behavioral simulator for digital/mixed-signal Verilog-A models. EVAS ships with a Python compatibility engine by default and an optional Rust-backed EVAS2 path for supported event-driven designs. No ngspice, no KCL/KVL solver.
Docs: evas.tokenzhang.com
What EVAS does
EVAS simulates voltage-mode, event-driven Verilog-A behavioral models. You provide:
- A
.vafile — your behavioral model (comparator, DAC, SAR logic, DWA controller, …) - A
.scstestbench netlist — voltage sources,ahdl_include, and atranstatement - Run
evas simulate— gettran.csvwaveforms and optional plots
The bundled examples are a compact smoke-test set. For your own design, copy the
closest example directory, swap in your .va, adjust the stimulus sources and
save list, and run. The larger verification example library belongs with the
agent workflow in veriloga-skills/evas-sim.
Installation
pip install evas-sim
evas list # verify install — prints bundled example groups
If evas is not on PATH, use python -m evas.
The packaged default uses the Python engine so examples and user netlists run
from PyPI or a fresh source checkout. To request EVAS2 explicitly, build the
Rust backend first and pass --engine evas2, set EVAS_ENGINE=evas2, or add
simulatorOptions options evas_engine=evas2 to the testbench.
Simulating your own design
evas simulate path/to/tb.scs -o output/mydesign
evas simulate path/to/tb.scs -o output/mydesign --engine evas2
Output in -o dir: tran.csv (waveforms), strobe.txt (log messages), .png plots.
Minimal testbench template (.scs):
simulator lang=spectre
global 0
ahdl_include "my_module.va"
Vvdd (vdd 0) vsource type=dc dc=1.8
Vclk (clk 0) vsource type=pulse val0=0 val1=1.8 period=10n rise=0.1n fall=0.1n width=4.9n
IDUT (clk vdd out) my_module vdd=1.8
tran tran stop=200n maxstep=0.1n
save clk:2e out:6f
Testbench structure reference
The bundled examples contain five small groups and their testbenches. They are the in-package reference for common wiring patterns:
| Pattern needed | Look at |
|---|---|
| Clocked digital logic | clk_div, digital_basics |
| Comparator with feedback | comparator/cmp_offset_search |
| ADC + sample-hold | adc_dac_ideal_4b |
| Noise / random stimulus | noise_gen |
| Multi-cycle edge timing | comparator/cmp_delay, edge_interval_timer |
Supported Verilog-A
| Feature | Status |
|---|---|
V(node) <+, V(a,b) differential |
✅ |
@(cross(...)), @(above(...)), @(initial_step) |
✅ |
cross(expr, dir, time_tol, expr_tol) event tolerances |
✅ (behavioral approximation) |
@(timer(period)), @(final_step) |
✅ |
transition() with delay / rise / fall |
✅ |
slew(x, maxrise, maxfall) transient limiter |
✅ (behavioral approximation) |
for, if/else, case/endcase, begin/end |
✅ |
| arrays, parameters (real / integer / string) | ✅ |
`include, `define, `default_transition |
✅ |
SI suffixes, math: sin cos exp ln log pow floor ceil … |
✅ |
$temperature, $vt, $abstime |
✅ |
$bound_step() |
✅ |
$fopen(), $fclose(), $fstrobe(), $fwrite(), $fdisplay() |
✅ |
$display, $strobe, $random, $dist_uniform(), $rdist_normal() |
✅ |
last_crossing(expr, dir, time_tol, expr_tol) |
✅ (most-recent event-time approximation) |
I() <+, ddt(), idt(), q() <+ |
not supported by design |
| AC/DC analysis, transistors | not supported by design |
Spectre subckt hierarchy |
not yet implemented |
Accuracy Profiles
You can set simulatorOptions options evas_profile=<mode> in .scs:
fast: lower refinement (refine_factor=8,refine_steps=4) for faster runtimebalanced: default EVAS behavior (16,8)precision: higher refinement (32,16) for tighter event/cross timing
errpreset=conservative/liberal is still respected; evas_profile applies an explicit EVAS-side override when set.
Practical correspondence: fast ≈ liberal, balanced ≈ moderate, precision ≈ conservative (guidance only, not solver-equivalence claim).
CSV output format
The save statement accepts per-signal format hints:
save vin:10e vout:6f clk:2e dout:d
| Suffix | Example |
|---|---|
:6e (default) |
4.500000e-01 |
:Nf |
fixed-point, N decimal places |
:d |
integer (for digital buses) |
Bundled examples (reference only)
Five groups ship with the PyPI package for install verification, CLI sanity
checks, and small starting templates. The full workflow-oriented example set is
maintained outside this simulator package in veriloga-skills/evas-sim.
| Group | Verilog-A modules | Notes |
|---|---|---|
clk_div |
clk_div |
|
digital_basics |
and_gate, or_gate, not_gate, dff_rst, inverter |
|
noise_gen |
noise_gen |
|
adc_dac_ideal_4b |
adc_ideal_4b, dac_ideal_4b, sh_ideal |
3 stimuli: ramp / sine / 1000-pt sine |
comparator |
cmp_ideal, cmp_strongarm, cmp_offset_search, cmp_delay, edge_interval_timer |
4 sub-examples |
Contributing
git clone https://github.com/Arcadia-1/EVAS.git
cd EVAS
pip install -e ".[dev]"
pytest tests/ -v
License
MIT — see LICENSE.
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 evas_sim-0.4.4.tar.gz.
File metadata
- Download URL: evas_sim-0.4.4.tar.gz
- Upload date:
- Size: 348.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98ccf05cc1e3edf7e2a0ac28d7e162826efa2413d59a8d39006b2f9877b8e7ed
|
|
| MD5 |
09f886c4008873a37a86a5c22f5d7105
|
|
| BLAKE2b-256 |
fc220cdeb859c6048e78bd1b1cc2d0acc33ed42ff99d25853e0b15c6f1a87abb
|
Provenance
The following attestation bundles were made for evas_sim-0.4.4.tar.gz:
Publisher:
publish.yml on Arcadia-1/EVAS
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
evas_sim-0.4.4.tar.gz -
Subject digest:
98ccf05cc1e3edf7e2a0ac28d7e162826efa2413d59a8d39006b2f9877b8e7ed - Sigstore transparency entry: 1754735243
- Sigstore integration time:
-
Permalink:
Arcadia-1/EVAS@4af9826ee0773102b2f8cfdbb2c306b3bc69082d -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/Arcadia-1
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4af9826ee0773102b2f8cfdbb2c306b3bc69082d -
Trigger Event:
push
-
Statement type:
File details
Details for the file evas_sim-0.4.4-py3-none-any.whl.
File metadata
- Download URL: evas_sim-0.4.4-py3-none-any.whl
- Upload date:
- Size: 298.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cddf69c9246becd9f646ee8ae840b11f626be199ed49b592024c9e8d1ba58615
|
|
| MD5 |
fa661402788ca04a1295efd1b3917625
|
|
| BLAKE2b-256 |
1ee0273cb54dbb73613a01c6b45b1b700a09a69c1cf3c8d3d50e32fe89ebd52d
|
Provenance
The following attestation bundles were made for evas_sim-0.4.4-py3-none-any.whl:
Publisher:
publish.yml on Arcadia-1/EVAS
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
evas_sim-0.4.4-py3-none-any.whl -
Subject digest:
cddf69c9246becd9f646ee8ae840b11f626be199ed49b592024c9e8d1ba58615 - Sigstore transparency entry: 1754735276
- Sigstore integration time:
-
Permalink:
Arcadia-1/EVAS@4af9826ee0773102b2f8cfdbb2c306b3bc69082d -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/Arcadia-1
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4af9826ee0773102b2f8cfdbb2c306b3bc69082d -
Trigger Event:
push
-
Statement type: