This repository contains benchmarks for formal co-validation of hardware and low-level software interfaces. The source code for these benchmarks was extracted from QEMU and Linux.
The RTC benchmark illustrates the hardware/software interface for a real-time clock. The focus is on Register B and the ten time/calendar and alarm bytes:
Courtesy of MC146818 data sheet
To run the experiments on the HW/SW model, execute the following command from
within the folder sw-hw/linux/rtc_x86
:
$ ./run_expt.sh [Num of Runs] [Experiment Name] [Property No. (1 to 11)]
You can also run the experiment from propery i to j once by exectuing the following command within the same folder:
$ ./run_expt_all.sh [Experiment Name] [i] [j]
Use the same command in the folder qemu-hw/rtc
to run the experiments on the
standalone HW model.
To get the total runtime and runtime spent on the decision procedure produced by the script run_expt.sh, run the command:
$ ./get_result.sh [(Relative) Path to the Data Folder]
Note: get_result.sh does not work with the script run_expt_all.sh
The I2C benchmark illustrates hardware/software interface for a temperature sensor on a serial bus. Thus, this benchmark goes beyond fixed-sized register updates as illustrated by the following waveform:
Courtesy of TMP105 data sheet
To run the experiments on the HW/SW model, execute the following command
from within the folder sw-hw/linux/tmp105_x86
:
$ ./run_expt.sh [Num of Runs] [Experiment Name] [Property No. (1 to 17)]
You can also run the experiment from propery i to j once by exectuing the following command within the same folder:
$ ./run_expt_all.sh [Experiment Name] [i] [j]
Use the same command in folder qemu-hw/tmp105
to run experiments on the
standalone HW model (property no. 1 to 8, and 10 to 20).
To get the total runtime and runtime spent on the decision procedure produced by the script run_expt.sh, run the command:
$ ./get_result.sh [(Relative) Path to the Data Folder]
Note: get_result.sh does not work with the script run_expt_all.sh
The ETHOC benchmark exemplifies a known concurrency bug in a NAPI-enabled driver for an Ethernet MAC.
The concurrent interactions of software and hardware are best clarified in the graphs showing the interleaving of software and hardware model threads. These are available in PNG and SVG format (the corresponding partial orders used by CBMC are also available in graphical form, as SVG or PDF).
Summary tables and full log files of these experiments are available at ethoc-hw for the hardware model, and ethoc-sw-hw for the combined hardware+software implementation. These tables and results were generated using our benchmarking framework. The corresponding commands are documented in the scripts ethoc-hw-experiments and ethoc-sw-hw-experiments, which were used to compute and generate all these results.
We welcome contributions of new benchmarks. See also our Wiki for useful resources.