SystemC Intermediate Verification Language Project

For feedback and bug reports: sissi@informatik.uni-bremen.de

This project provides a parser and subsequent semantic analysis checks for the SystemC Intermediate Verification Language (IVL) which has been proposed in the paper titled "Verifying SystemC using an Intermediate Verification Language and Symbolic Simulation" (DAC'13). The IVL enables the independent development of front-ends and back-ends for SystemC formal verification. It is compact, intuitive, readable but expressive enough to capture the behavior of SystemC designs. Additionally, the project also includes a simple simulator that can execute a subset of the IVL.

Overview

All source files are stored in the src folder. Basically there are five different packages:

Example IVL descriptions are available in the folder test:

Dependencies

This version is developed using python 2.7.4. The list of library dependencies (with their exact version number) is available in the file dependencies. They can be installed using pip (issued from the top level folder of this project):

pip install -r dependencies

We recommend to use virtualenv (and its bundled pip) to install the all libraries locally using the following commands:

curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.9.1.tar.gz
tar xzf virtualenv-1.9.1.tar.gz
python virtualenv-1.9.1/virtualenv.py ivl-VE
source ivl-VE/bin/activate
pip install -r dependencies

To use a specific python version (e.g. 2.7) with virtualenv replace the command:

python virtualenv-1.9.1/virtualenv.py ivl-VE

with:

python virtualenv-1.9.1/virtualenv.py -p /usr/bin/python2.7 ivl-VE

This might be useful if python3 is used by default in your environment.

Write a custom simulator

An example simulator that can execute a subset of the IVL is available in the file src/ivl/vm/example/interpreter.py. Its purpose is to demonstrate how to develop back-ends for the IVL based on the provided parser. The example simulator can handle all arithmetic and Boolean operators, arrays, functions and pointer operations (except pointer arithmetic). It supports threads and event handling, but only considers a single scheduling sequence. Symbolic values are not supported and will be replaced with random values at runtime. Therefore this simple simulator is unable to detect all errors.

Run the examples

The scripts in the bin folder can be used once the dependencies are satisfied. Basically they just call the above mentioned loader module with different parameters. The script bin/ivl-check will just parse and check the given input file whereas the script bin/ivl-sim will additionally use our example simulator to execute the file.