WIP: Rework fault injection framework architecture
This MR will structurally change how the fault injection framework is architected.
- The Yosys design representation is represented by a singleton object, shared between any instantiated FaultInjectors
- FaultInjectors can now come in different flavours (Hierarchical, Signal-list based, Regex-based, ...)
- SEE temporal distribution (and duration) is not controlled anymore via string, but by providing one of several special Timer objects to the FaultInjector
- SEE injection strategies are implemented using iterator classes (Single bit upsets sequentially, single random bit flips, A/B/C group injections ...)
- SEE injection goals are set on instantiation of the FaultInjector, logically together with injection strategy and temporal distribution settings
- The general calling convention now follows what a Cocotb worker object typically looks like (instantiate with settings, then fork .start() to make it do something
It also introduces changes that allow making cocotb_fault_injection the default solution for SEU/SET injection on both RTL designs AND gate-level netlists. This is achieved by the following:
- (on user request by Szymon) Allow providing information that makes the hierarchy-traversal NOT enter technology modules (standard cells, ...), but instead use behavioral information about these cells provided a-priori.
- Make the yosys pass an optional phase (depending on the NETLIST environment variable)
- Add standard cell SEE information for all TSMC65 cells (in an extra repository, for NDA reasons)
Other notable actions:
- Improved tracking of injection progress (separate SEU und SET node lists)
Action items:
- Add a yosys-patch that allows it to at least not crash on the specify-blocks in our libraries (required for RTL designs mixed with manual standard cell instantiations)
Edited by Stefan Biereigel