Commit 1afde57f authored by Stefan Tauner's avatar Stefan Tauner
Browse files

Update README and

parent dc77c35c
......@@ -2,54 +2,96 @@
## Synopsis
FIJI is a fault injection tool for FPGA designs at netlist level.
FIJI is a fault injection tool to instrument selected nets of FPGA designs at netlist level and then manipulate them at run-time.
## Code Example
## Features
`$ perl fiji.cfg`
There are a number of advantages and features in FIJI that (as of today) are not united together in any other fault injection framework.
`$ perl --help`
- Run-time Control
`$ perl --help`
The injected faults can be precisely controlled at runtime via FIJI's UART-based control protocol.
- HDL Independence
`$ perl fiji.cfg fiji_test.cfg`
FIJI does not interact with the HDL description of the design but processes an easily acquirable (Verilog) netlist representation.
- Resource Efficiency
## Motivation
FIJI incorporates only a tiny control logic into the DUT logic that might even be left in the production design.
There is no need for additional high-speed exercisers to provide stimuli.
- Fine-grained Fault Localization
- Safety
- Evaluation
- Certification
The user can select individual nets that FIJI shall manipulate instead of simply injecting faults in random places of a design.
- FPGA Vendor Independence
## Installation
The FIJI workflow is not tight to any specific features of the synthesis or P&R tools of the FPGA vendor.
For the synthesis with Synopsis Synplify you need to install it first.
We have tested with version 2013.09-SP1.
This unique combination of features allows it to be used in various circumstances to evaluate, validate or certify safety features in fault-tolerant designs.
Our toolchain itself does only need Perl and some associated libraries.
However, for the guided work flow 'make' and a number of utilities that come with most Linux distributions and Cygwin are required.
## Documentation
> **Note:**
Much of FIJI's documentation gets automatically built with every relevant commit and published at the locations linked below.
The following documents are available:
- [User Guide]( ([PDF](
Explains everything a user of FIJI should have to care about.
- [Technical Reference Manual]( ([PDF](
The target audience of this documents are engineers that want to understand or tinker with the inner workings of the FIJI suite.
The technical details contained herein are supposed to be irrelevant to ordinary users.
- API documentation about the source code of FIJI can be built with Doxygen by executing `make -C ./docs/ doxygen`.
It requires `doxygen-filter-perl` to be available (provided by Perl's `Doxygen::Filter::Perl` package).
## Installation
#####Redhat-based Distributions
`$ sudo yum install perl-CPAN perl-devel`
Since FIJI requires a relatively sane Verilog netlist as input, using Synopsis Synplify is recommended and thus needs to be installed.
A proper P&R tool for the respective FPGA has to be installed as well to produce the final bitstream of the netlist instrumented by FIJI.
#####Debian-based Distributions
####Perl Modules
Our toolchain itself does only need Perl and some associated libraries.
However, for the example work flow in `docs/demos/*` `make` and a number of common unix utilities are required.
Building the various forms of [documentation](#documentation) you will need Latex and Doxygen installed as well.
Please see the [User Guide]( for more details.
> **Attention:**
The upstream version of `Verilog::Perl` (`Verilog::Language`) does not support the required features yet.
A patch has been submitted upstream but has not been merged yet.
The user guide briefly explains how to build it from source.
### Linux/Unix
#### Perl Modules
To install all necessary Perl modules via CPAN you can simply execute:
`$ ./`
`$ ./bin/`
###Windows (Cygwin needed)
### Windows (Cygwin needed)
`C:> install_prerequesites.cmd`
## Contributors
## Execution
The FIJI framework provides a number of Perl scripts to be executed.
All of them support printing an extensive usage when launched with the `--help` parameter.
Below some typical command lines are listed.
`$ perl ./bin/ -s fiji.cfg -n netlist.vm`
`$ perl ./bin/ -s fiji.cfg -n netlist.vm -p instrumented`
`$ perl ./bin/ -m manual -s fiji.cfg -t fiji.tst`
`$ perl ./bin/ -s fiji.cfg -t fiji.tst`
## Authors
- <>
- [Christian Fibich]( <<>>
- <>
- [Stefan Tauner]( <<>>
## License
\ No newline at end of file
See [`LICENSE`](/LICENSE) file
......@@ -43,9 +43,9 @@ fi
for p in $packages ; do
if [ -e '/etc/redhat-release' ]; then
$dosudo dnf install -y "perl($p)" && continue
$dosudo dnf install -y "perl($p)"
$dosudo perl -MCPAN -e "CPAN::Shell->notest('install', '$p')"
# perl -MCPAN -mlocal::lib -Mlib::core::only -Mlocal::lib=extlib -e "CPAN::Shell->notest('install', '$p')"
$dosudo perl -MCPAN -e "CPAN::Shell->notest('install', '$p')"
# perl -MCPAN -mlocal::lib -Mlib::core::only -Mlocal::lib=extlib -e "CPAN::Shell->notest('install', '$p')"
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment