WAL enables programmable waveform analysis.

Related tags

Data Analysiswal
Overview

This repro introcudes the Waveform Analysis Language (WAL). The initial paper on WAL will appear at ASPDAC'22 and can be downloaded here: https://www.ics.jku.at/files/2022ASPDAC_WAL.pdf. The examples from the paper can be found in the examples folder.

If you like WAL you can cite our paper as follows:

@InProceedings{KG:2022,
  author        = {Lucas Klemmer and Daniel Gro{\ss}e},
  title         = {{WAL:} A Novel Waveform Analysis Language for Advanced Design Understanding and Debugging},
  booktitle     = {ASP Design Automation Conf.},
  year          = 2022
}

Comments
  • WAL fails to load FST

    WAL fails to load FST

    I'm trying to load an FST but get the following error:

    >-> (load "sim_no_pfb_match.fst" "waves")
    'utf-8' codec can't decode byte 0x83 in position 14: invalid start byte
    (load "sim_no_pfb_match.fst" "waves")
    

    The FST loads into gtkwave without issue so is there anything I can do to help debug this?

    opened by shareefj 10
  • [Question] Is WAL able to load Synopsys .vpd files?

    [Question] Is WAL able to load Synopsys .vpd files?

    I am playing around with the tool and wanted to do some analysis of my simulations of the BOOM core. I simulated the core using Chipyard and Synopsys VCS and get the according vpd files, which I can't load into WAL (throwing following error message)

    'utf-8' codec can't decode byte 0xd5 in position 21: invalid continuation byte

    It is possible to convert it to a vcd file by using vpd2vcd but since it is less compressed the vcd files become really large(e.g. 27 MB converted to 2.2 GB)

    Is there a possibility to use vpd files without converting to vcd?

    Best regards, Alex

    opened by WezelA 5
  • [wawk] using 2-digit number in sliced_symbol leads to error

    [wawk] using 2-digit number in sliced_symbol leads to error

    When I try to access a sliced part of a 32bit signal (e.g. inst[11:7]) I get the following error:

    Traceback (most recent call last):
      File "/home/eyck/tmp/wal/.wal/bin/wawk", line 33, in <module>
        sys.exit(load_entry_point('wal-lang', 'console_scripts', 'wawk')())
      File "/home/eyck/git/wal/wawk/wawk.py", line 70, in run
        wal.eval(statement.action)
      File "/home/eyck/git/wal/wal/core.py", line 43, in eval
        return self.eval_context.eval(sexpr)
      File "/home/eyck/git/wal/wal/eval.py", line 93, in eval
        res = self.eval_dispatch(head, tail)
      File "/home/eyck/git/wal/wal/eval.py", line 44, in eval_dispatch
        return self.dispatch.get(oprtr.value, lambda a, b: NotImplementedError())(self, args)
      File "/home/eyck/git/wal/wal/implementation/core.py", line 290, in op_do
        return seval.eval_args(args)[-1]
      File "/home/eyck/git/wal/wal/eval.py", line 40, in eval_args
        return list(map(self.eval, args))
      File "/home/eyck/git/wal/wal/eval.py", line 93, in eval
        res = self.eval_dispatch(head, tail)
      File "/home/eyck/git/wal/wal/eval.py", line 44, in eval_dispatch
        return self.dispatch.get(oprtr.value, lambda a, b: NotImplementedError())(self, args)
      File "/home/eyck/git/wal/wal/implementation/core.py", line 239, in op_if
        return seval.eval(args[1])
      File "/home/eyck/git/wal/wal/eval.py", line 93, in eval
        res = self.eval_dispatch(head, tail)
      File "/home/eyck/git/wal/wal/eval.py", line 44, in eval_dispatch
        return self.dispatch.get(oprtr.value, lambda a, b: NotImplementedError())(self, args)
      File "/home/eyck/git/wal/wal/implementation/core.py", line 290, in op_do
        return seval.eval_args(args)[-1]
      File "/home/eyck/git/wal/wal/eval.py", line 40, in eval_args
        return list(map(self.eval, args))
      File "/home/eyck/git/wal/wal/eval.py", line 93, in eval
        res = self.eval_dispatch(head, tail)
      File "/home/eyck/git/wal/wal/eval.py", line 44, in eval_dispatch
        return self.dispatch.get(oprtr.value, lambda a, b: NotImplementedError())(self, args)
      File "/home/eyck/git/wal/wal/implementation/core.py", line 194, in op_set
        res = seval.eval(arg[1])
      File "/home/eyck/git/wal/wal/eval.py", line 93, in eval
        res = self.eval_dispatch(head, tail)
      File "/home/eyck/git/wal/wal/eval.py", line 44, in eval_dispatch
        return self.dispatch.get(oprtr.value, lambda a, b: NotImplementedError())(self, args)
      File "/home/eyck/git/wal/wal/implementation/core.py", line 91, in op_neq
        evaluated = seval.eval_args(args)
      File "/home/eyck/git/wal/wal/eval.py", line 40, in eval_args
        return list(map(self.eval, args))
      File "/home/eyck/git/wal/wal/eval.py", line 93, in eval
        res = self.eval_dispatch(head, tail)
      File "/home/eyck/git/wal/wal/eval.py", line 44, in eval_dispatch
        return self.dispatch.get(oprtr.value, lambda a, b: NotImplementedError())(self, args)
      File "/home/eyck/git/wal/wal/implementation/core.py", line 609, in op_slice
        return (evaluated[0] & (((1 << (upper - lower + 1)) - 1) << lower)) >> lower
    ValueError: negative shift count
    
    opened by eyck 2
  • [wawk] output is not reliable

    [wawk] output is not reliable

    When running the following script

    BEGIN: {
        // import python file for access to riscvmodel lib
        import(extern);
        icnt=0;
        lastclkcnt=0;
        clkcnt=0;
        printed=0;
        ilen = 0;
        // create some aliases for shorter signal names
        alias(clk, tb.adapter.core.TGC_C.clk);
        alias(reset, tb.adapter.core.TGC_C.reset);
        alias(trap, tb.adapter.core.TGC_C.core_trace_exc_o);
        alias(valid, tb.adapter.core.TGC_C.core_trace_valid_o);
        alias(instr, tb.adapter.core.TGC_C.core_trace_instr_o);
        alias(pc, tb.adapter.core.TGC_C.core_trace_pc_o);
        alias(reg_addr, tb.adapter.core.TGC_C.core_trace_reg_addr_o);
        alias(reg_val, tb.adapter.core.TGC_C.core_trace_reg_val_o);
        alias(reg_wr, tb.adapter.core.TGC_C.core_trace_reg_wr_o);
    }
    clk, valid: {
        if(printed==0) {
            icnt=icnt+1;
            delay=(clkcnt-lastclkcnt)/2;
            lastclkcnt=clkcnt;
            op = call(extern.decode, instr);
            shifted = instr/128;
            was_call = shifted[4:0]!=0 && (op == "jal" || op == "jalr");
            ilen = 2;
            if (instr[1:0]==3)
              ilen = 4;
            printf("0x%x, %d, %d, %d, 0x%x, %s\n", pc, delay, ilen, was_call, instr, op);
            printed = 1;
        } else
            printed = 0;
    }
    clk, !reset: {
        clkcnt=clkcnt+1;
    }
    END: {
        printf("%f (%d/%d)\n", icnt/clkcnt, icnt, clkcnt);
    }
    

    on a vcd file I get in 2 consecutive runs

    (.wal) eyck$:~/tmp/wal$ wawk cpi.wawk ../vtgc_tb_xlevel.vcd
    0x20, 3, 4, 1, 0x297, auipc
    0x24, 1, 4, 1, 0xc028293, addi
    0x28, 1, 4, 0, 0x30529073, csrrw
    0x2c, 1, 4, 1, 0x2a00093, addi
    0x30, 1, 4, 1, 0x2a00113, addi
    0x34, 1, 4, 1, 0x2a00193, addi
    0x38, 1, 4, 1, 0x200513, addi
    0x3a, 1, 4, 1, 0x300a13, addi
    0x3e, 1, 4, 1, 0x700f93, addi
    0x40, 1, 4, 0, 0x43507b, 4411515
    0.000000 (10/28)
    (.wal) eyck$:~/tmp/wal$ wawk cpi.wawk ../vtgc_tb_xlevel.vcd
    0x20, 3, 4, 0, 0x297, auipc
    0x24, 1, 4, 0, 0xc028293, addi
    0x28, 1, 4, 0, 0x30529073, csrrw
    0x2c, 1, 4, 0, 0x2a00093, addi
    0x30, 1, 4, 0, 0x2a00113, addi
    0x34, 1, 4, 0, 0x2a00193, addi
    0x38, 1, 4, 0, 0x200513, addi
    0x3a, 1, 4, 0, 0x300a13, addi
    0x3e, 1, 4, 0, 0x700f93, addi
    0x40, 1, 4, 0, 0x43507b, 4411515
    0.000000 (10/28)
    
    bug 
    opened by eyck 1
  • Changed wawk semicolon behaviour slightly

    Changed wawk semicolon behaviour slightly

    Updated the wawk grammar in a way where semicolon usage is now more consistent:

    • there are no longer weird cases where some "{" blocks "}" require a semicolon after them, while others do not: now none of them require semicolons, but they (as well as other statements) can have as many semicolons after them as they like
    • BREAKING CHANGE: if/else statements that DO NOT use blocks but one-line statements instead, now require semicolons for each statement, and not just the last one.
    opened by FRoith 0
  • ACTUALLY fixed the precedence rules this time

    ACTUALLY fixed the precedence rules this time

    Addresses #2, where a non-precise grammar caused non-deterministic (and incorrect) parsing behavior.

    Previous pull request was thought to fix the issue due to faulty tests, but this time it actually fixed the issue correctly as far as I can tell.

    opened by FRoith 0
  • Package does not declare all dependencies

    Package does not declare all dependencies

    When installing wal using pip on a CentOS7 OS and runnign wawk I get:

    Traceback (most recent call last):
    File "/home/xxx/git/TGC-UVM/riscv-dv-venv/bin/wawk", line 5, in <module>
    from wawk.wawk import run
    File "/home/xxx/git/TGC-UVM/riscv-dv-venv/lib64/python3.6/site-packages/wawk/[wawk.py](http://wawk.py/)", line 6, in <module>
    from wal.core import Wal
    File "/home/xxx/git/TGC-UVM/riscv-dv-venv/lib64/python3.6/site-packages/wal/[core.py](http://core.py/)", line 7, in <module>
    from wal.eval import SEval
    File "/home/xxx/git/TGC-UVM/riscv-dv-venv/lib64/python3.6/site-packages/wal/[eval.py](http://eval.py/)", line 2, in <module>
    from wal.ast_defs import Operator, Symbol, ExpandGroup
    File "/home/xxx/git/TGC-UVM/riscv-dv-venv/lib64/python3.6/site-packages/wal/ast_[defs.py](http://defs.py/)", line 2, in <module>
    from dataclasses import dataclass
    ModuleNotFoundError: No module named 'dataclasses'
    

    After running pip3 install dataclasses everything works fine.

    opened by eyck 0
  • Upgrade version of vcdvcd

    Upgrade version of vcdvcd

    Hi,

    you seem to be depending on a broken version of vcdvcd.py. After pip installing wal-lang, I get the following error:

    (.venv) [email protected]:~/git/wal$ wal
    Traceback (most recent call last):
      File "/home/shareefj/git/wal/.venv/bin/wal", line 5, in <module>
        from wal.wal import run
      File "/home/shareefj/git/wal/.venv/lib/python3.10/site-packages/wal/wal.py", line 7, in <module>
        from wal.core import Wal
      File "/home/shareefj/git/wal/.venv/lib/python3.10/site-packages/wal/core.py", line 6, in <module>
        from wal.trace import TraceContainer
      File "/home/shareefj/git/wal/.venv/lib/python3.10/site-packages/wal/trace.py", line 5, in <module>
        from vcdvcd import VCDVCD, StreamParserCallbacks
      File "/home/shareefj/git/wal/.venv/lib/python3.10/site-packages/vcdvcd/__init__.py", line 1, in <module>
        from .vcdvcd import *
      File "/home/shareefj/git/wal/.venv/lib/python3.10/site-packages/vcdvcd/vcdvcd.py", line 355, in <module>
        class Scope(collections.MutableMapping):
    AttributeError: module 'collections' has no attribute 'MutableMapping'
    

    and it looks like at some point they've tried to fix this: https://github.com/cirosantilli/vcdvcd/commit/9c9b7c1aaa7a6bcc4e254e3557cc00a9ec1c7bd0

    opened by shareefj 1
Releases(v0.6.3-beta.2)
Owner
Institute for Complex Systems (ICS), Johannes Kepler University Linz
ICS conducts research in EDA with focus on verification, debugging, and synthesis; abstraction levels: SystemC virtual prototypes, RTL downto gate-level.
Institute for Complex Systems (ICS), Johannes Kepler University Linz
Catalogue data - A Python Scripts to prepare catalogue data

catalogue_data Scripts to prepare catalogue data. Setup Clone this repo. Install

BigScience Workshop 3 Mar 03, 2022
An easy-to-use feature store

A feature store is a data storage system for data science and machine-learning. It can store raw data and also transformed features, which can be fed straight into an ML model or training script.

ByteHub AI 48 Dec 09, 2022
MapReader: A computer vision pipeline for the semantic exploration of maps at scale

MapReader A computer vision pipeline for the semantic exploration of maps at scale MapReader is an end-to-end computer vision (CV) pipeline designed b

Living with Machines 25 Dec 26, 2022
DefAP is a program developed to facilitate the exploration of a material's defect chemistry

DefAP is a program developed to facilitate the exploration of a material's defect chemistry. A large number of features are provided and rapid exploration is supported through the use of autoplotting

6 Oct 25, 2022
X-news - Pipeline data use scrapy, kafka, spark streaming, spark ML and elasticsearch, Kibana

X-news - Pipeline data use scrapy, kafka, spark streaming, spark ML and elasticsearch, Kibana

Nguyễn Quang Huy 5 Sep 28, 2022
Python package to transfer data in a fast, reliable, and packetized form.

pySerialTransfer Python package to transfer data in a fast, reliable, and packetized form.

PB2 101 Dec 07, 2022
Port of dplyr and other related R packages in python, using pipda.

Unlike other similar packages in python that just mimic the piping syntax, datar follows the API designs from the original packages as much as possible, and is tested thoroughly with the cases from t

179 Dec 21, 2022
Efficient matrix representations for working with tabular data

Efficient matrix representations for working with tabular data

QuantCo 70 Dec 14, 2022
A Python package for the mathematical modeling of infectious diseases via compartmental models

A Python package for the mathematical modeling of infectious diseases via compartmental models. Originally designed for epidemiologists, epispot can be adapted for almost any type of modeling scenari

epispot 12 Dec 28, 2022
Fast, flexible and easy to use probabilistic modelling in Python.

Please consider citing the JMLR-MLOSS Manuscript if you've used pomegranate in your academic work! pomegranate is a package for building probabilistic

Jacob Schreiber 3k Jan 02, 2023
Validated, scalable, community developed variant calling, RNA-seq and small RNA analysis

Validated, scalable, community developed variant calling, RNA-seq and small RNA analysis. You write a high level configuration file specifying your in

Blue Collar Bioinformatics 917 Jan 03, 2023
Very basic but functional Kakuro solver written in Python.

kakuro.py Very basic but functional Kakuro solver written in Python. It uses a reduction to exact set cover and Ali Assaf's elegant implementation of

Louis Abraham 4 Jan 15, 2022
Karate Club: An API Oriented Open-source Python Framework for Unsupervised Learning on Graphs (CIKM 2020)

Karate Club is an unsupervised machine learning extension library for NetworkX. Please look at the Documentation, relevant Paper, Promo Video, and Ext

Benedek Rozemberczki 1.8k Jan 09, 2023
DaDRA (day-druh) is a Python library for Data-Driven Reachability Analysis.

DaDRA (day-druh) is a Python library for Data-Driven Reachability Analysis. The main goal of the package is to accelerate the process of computing estimates of forward reachable sets for nonlinear dy

2 Nov 08, 2021
Tkinter Izhikevich Neuron Model With Python

TKINTER IZHIKEVICH NEURON MODEL WITH PYTHON Hodgkin-Huxley Model It is a mathematical model for the generation and transmission of action potentials i

Rabia KOÇ 8 Jul 16, 2022
Probabilistic reasoning and statistical analysis in TensorFlow

TensorFlow Probability TensorFlow Probability is a library for probabilistic reasoning and statistical analysis in TensorFlow. As part of the TensorFl

3.8k Jan 05, 2023
This is a tool for speculation of ancestral allel, calculation of sfs and drawing its bar plot.

superSFS This is a tool for speculation of ancestral allel, calculation of sfs and drawing its bar plot. It is easy-to-use and runing fast. What you s

3 Dec 16, 2022
Implementation in Python of the reliability measures such as Omega.

OmegaPy Summary Simple implementation in Python of the reliability measures: Omega Total, Omega Hierarchical and Omega Hierarchical Total. Name Link O

Rafael Valero Fernández 2 Apr 27, 2022
peptides.py is a pure-Python package to compute common descriptors for protein sequences

peptides.py Physicochemical properties and indices for amino-acid sequences. 🗺️ Overview peptides.py is a pure-Python package to compute common descr

Martin Larralde 32 Dec 31, 2022
Finds, downloads, parses, and standardizes public bikeshare data into a standard pandas dataframe format

Finds, downloads, parses, and standardizes public bikeshare data into a standard pandas dataframe format.

Brady Law 2 Dec 01, 2021