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
MoRecon - A tool for reconstructing missing frames in motion capture data.

MoRecon - A tool for reconstructing missing frames in motion capture data.

Yuki Nishidate 38 Dec 03, 2022
A library to create multi-page Streamlit applications with ease.

A library to create multi-page Streamlit applications with ease.

Jackson Storm 107 Jan 04, 2023
PySpark Structured Streaming ROS Kafka ApacheSpark Cassandra

PySpark-Structured-Streaming-ROS-Kafka-ApacheSpark-Cassandra The purpose of this project is to demonstrate a structured streaming pipeline with Apache

Zekeriyya Demirci 5 Nov 13, 2022
🧪 Panel-Chemistry - exploratory data analysis and build powerful data and viz tools within the domain of Chemistry using Python and HoloViz Panel.

🧪📈 🐍. The purpose of the panel-chemistry project is to make it really easy for you to do DATA ANALYSIS and build powerful DATA AND VIZ APPLICATIONS within the domain of Chemistry using using Python a

Marc Skov Madsen 97 Dec 08, 2022
Python tools for querying and manipulating BIDS datasets.

PyBIDS is a Python library to centralize interactions with datasets conforming BIDS (Brain Imaging Data Structure) format.

Brain Imaging Data Structure 180 Dec 18, 2022
Stock Analysis dashboard Using Streamlit and Python

StDashApp Stock Analysis Dashboard Using Streamlit and Python If you found the content useful and want to support my work, you can buy me a coffee! Th

StreamAlpha 27 Dec 09, 2022
Orchest is a browser based IDE for Data Science.

Orchest is a browser based IDE for Data Science. It integrates your favorite Data Science tools out of the box, so you don’t have to. The application is easy to use and can run on your laptop as well

Orchest 3.6k Jan 09, 2023
Common bioinformatics database construction

biodb Common bioinformatics database construction 1.taxonomy (Substance classification database) Download the database wget -c https://ftp.ncbi.nlm.ni

sy520 2 Jan 04, 2022
VevestaX is an open source Python package for ML Engineers and Data Scientists.

VevestaX Track failed and successful experiments as well as features. VevestaX is an open source Python package for ML Engineers and Data Scientists.

Vevesta 24 Dec 14, 2022
Efficient matrix representations for working with tabular data

Efficient matrix representations for working with tabular data

QuantCo 70 Dec 14, 2022
Spectacular AI SDK fuses data from cameras and IMU sensors and outputs an accurate 6-degree-of-freedom pose of a device.

Spectacular AI SDK examples Spectacular AI SDK fuses data from cameras and IMU sensors (accelerometer and gyroscope) and outputs an accurate 6-degree-

Spectacular AI 94 Jan 04, 2023
Average time per match by division

HW_02 Unzip matches.rar to access .json files for matches. Get an API key to access their data at: https://developer.riotgames.com/ Average time per m

11 Jan 07, 2022
Python script to automate the plotting and analysis of percentage depth dose and dose profile simulations in TOPAS.

topas-create-graphs A script to automatically plot the results of a topas simulation Works for percentage depth dose (pdd) and dose profiles (dp). Dep

Sebastian Schäfer 10 Dec 08, 2022
CPSPEC is an astrophysical data reduction software for timing

CPSPEC manual Introduction CPSPEC is an astrophysical data reduction software for timing. Various timing properties, such as power spectra and cross s

Tenyo Kawamura 1 Oct 20, 2021
Python dataset creator to construct datasets composed of OpenFace extracted features and Shimmer3 GSR+ Sensor datas

Python dataset creator to construct datasets composed of OpenFace extracted features and Shimmer3 GSR+ Sensor datas

Gabriele 3 Jul 05, 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
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
Galvanalyser is a system for automatically storing data generated by battery cycling machines in a database

Galvanalyser is a system for automatically storing data generated by battery cycling machines in a database, using a set of "harvesters", whose job it

Battery Intelligence Lab 20 Sep 28, 2022
Methylation/modified base calling separated from basecalling.

Remora Methylation/modified base calling separated from basecalling. Remora primarily provides an API to call modified bases for basecaller programs s

Oxford Nanopore Technologies 72 Jan 05, 2023
Tablexplore is an application for data analysis and plotting built in Python using the PySide2/Qt toolkit.

Tablexplore is an application for data analysis and plotting built in Python using the PySide2/Qt toolkit.

Damien Farrell 81 Dec 26, 2022