Skip to main content

Event-driven Verilog-A Simulator with a Python compatibility engine and optional evas-rust backend

Project description

EVAS — Event-driven Verilog-A Simulator

PyPI CI Docs License: MIT

A lightweight behavioral simulator for digital/mixed-signal Verilog-A models. EVAS ships with a Python compatibility engine by default and an optional evas-rust backend 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:

  1. A .va file — your behavioral model (comparator, DAC, SAR logic, DWA controller, …)
  2. A .scs testbench netlist — voltage sources, ahdl_include, and a tran statement
  3. Run evas simulate — get tran.csv waveforms 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 evas-rust explicitly, build the Rust backend first and pass --engine evas-rust, set EVAS_ENGINE=evas-rust, or add simulatorOptions options evas_engine=evas-rust to the testbench. The legacy evas2 and rust2 selectors remain accepted as compatibility aliases.

Simulating your own design

evas simulate path/to/tb.scs -o output/mydesign
evas simulate path/to/tb.scs -o output/mydesign --engine evas-rust

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 runtime
  • balanced: 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

evas_sim-0.4.6.tar.gz (361.2 kB view details)

Uploaded Source

Built Distribution

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

evas_sim-0.4.6-py3-none-any.whl (303.7 kB view details)

Uploaded Python 3

File details

Details for the file evas_sim-0.4.6.tar.gz.

File metadata

  • Download URL: evas_sim-0.4.6.tar.gz
  • Upload date:
  • Size: 361.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for evas_sim-0.4.6.tar.gz
Algorithm Hash digest
SHA256 2d961419ee8c13ccad540578fc1ddd1eccb78882eb1755b3e11ab935e70d7eb3
MD5 f28bdfc3cb00227e1717f2dc7cc169f7
BLAKE2b-256 4e92e2afea151566988ec1db0f923f21f016bc3f814cb33b825f37e6de03c2b7

See more details on using hashes here.

Provenance

The following attestation bundles were made for evas_sim-0.4.6.tar.gz:

Publisher: publish.yml on Arcadia-1/EVAS

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

File details

Details for the file evas_sim-0.4.6-py3-none-any.whl.

File metadata

  • Download URL: evas_sim-0.4.6-py3-none-any.whl
  • Upload date:
  • Size: 303.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for evas_sim-0.4.6-py3-none-any.whl
Algorithm Hash digest
SHA256 eb8c654d604e449f3eaddec08932d7ae6b8a903c2b33d85551f80911572d0fa7
MD5 86a72c960bdeee00227deaa6e74ea9c3
BLAKE2b-256 09a2c4a5ba8e4af17dc75dd31c3ccf1a6ff0550fdd54f0653514a883e9ce8a77

See more details on using hashes here.

Provenance

The following attestation bundles were made for evas_sim-0.4.6-py3-none-any.whl:

Publisher: publish.yml on Arcadia-1/EVAS

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