Configuration reference¶
faultflow is configured with an INI-style file conventionally named
config.ofs and passed with -c. It is parsed with Python’s configparser. The
top module always comes from --top on the command line, not from the file.
Booleans accept true/false, 1/0, yes/no, or on/off.
The canonical, fully-commented template is
config.ofs.example.
Copy it and edit:
cp config.ofs.example config.ofs
Note
The OpenTestability oracle mode (faultflow run -c ot.ofs) reads a small,
differently-shaped handoff file, not this schema — see “OpenTestability — test-
point insertion” under External tools.
A complete example¶
[design]
netlist = tests/benchmarks/iscas85/synth_sky130/c17.json
top = c17
cell_lib = cells/sky130/sky130_fd_sc_hd.json
liberty = cells/sky130/sky130_fd_sc_hd__tt_025C_1v80.lib
yosys_ver = 0.61+129
[fault_model]
model = stuck_at
launch = loc
collapsing = false
include_clock_faults = false
include_reset_faults = false
[simulation]
unsupported_cells = fail
verify = false
verify_tool = iverilog
verilog_models = cells/sky130/sky130_fd_sc_hd.v
[atpg]
tool = native
mode = comb
output = patterns.test
random_vectors = 64
sat_conflict_limit = 100000
max_rounds = 20
sat_timeout_seconds = 10
compaction = reverse
[report]
output = coverage.rpt
threshold = 95.0
[scan]
chains = 1
scan_in = scan_in
scan_out = scan_out
scan_enable = scan_en
run_techmap = true
[design]¶
Key |
Default |
Meaning |
|---|---|---|
|
|
Input Yosys JSON or Verilog netlist |
|
|
JSON cell map consumed by the C++ core |
|
Sky130 HD |
Liberty file — used by Yosys only |
|
— |
Behavioral cell models for the iverilog gate (falls back to |
|
|
Yosys version string, recorded in the fingerprint |
Note
The cell map and Liberty must be a matched pair for the same PDK. The two shipped pairs
are: Sky130 HD — cell_lib = cells/sky130/sky130_fd_sc_hd.json,
liberty = cells/sky130/sky130_fd_sc_hd__tt_025C_1v80.lib; and OSU035 —
cell_lib = cells/osu/osu035.json, liberty = cells/osu/osu035_stdcells.lib.
[fault_model]¶
Key |
Allowed values |
Default |
Meaning |
|---|---|---|---|
|
|
|
Fault model. |
|
|
|
Transition launch style for scan transition ATPG. |
|
bool |
|
Enable equivalence-only fault collapsing — never dominance, so coverage is provably unchanged (see Collapsing rules). |
|
bool |
|
Count clock-net faults in the denominator |
|
bool |
|
Grade async reset/set-tree faults via implication instead of excluding them. Fingerprinted — toggling it forces a fresh campaign |
Important
collapsing defaults to true (on) when the key is omitted entirely.
config.ofs.example and every shipped example config set it to false
explicitly, so out-of-the-box runs have collapsing off — but deleting that
line rather than setting it turns collapsing back on.
[simulation]¶
Key |
Allowed values |
Default |
Meaning |
|---|---|---|---|
|
|
|
Policy when a cell is not in the cell map (see below) |
|
bool |
|
Run the optional iverilog verification gate |
|
|
|
Verification backend |
|
bool |
|
Drive |
|
int |
|
Threads for parallel fault grading, the dominant ATPG cost. |
|
— |
Sky130 models |
Behavioral cell models for verification |
Unsupported-cell policy
With fail (the default), faultflow aborts immediately if the netlist contains any
cell not in the cell map — coverage is never reported on an unknown netlist. With
blackbox, unknown cells are explicitly modeled as test boundaries: their outputs
get no fault sites and are excluded from the denominator (and reported separately).
There is no silent-skip option.
[atpg]¶
Key |
Allowed values |
Default |
Meaning |
|---|---|---|---|
|
|
|
ATPG backend. |
|
|
|
Only combinational mode is supported |
|
path |
|
Fallback pattern file name (under |
|
int |
|
Random vectors applied before targeted ATPG |
|
float |
|
Stop grading further random vectors and switch to SAT once coverage reaches this percent — or once the full |
|
int |
|
Per-fault CaDiCaL conflict limit |
|
int |
|
Maximum progressive ATPG rounds |
|
int |
|
Per-fault SAT timeout; the fallback used when |
|
comma list |
|
Escalating per-fault SAT timeout, smallest tier first — a fault only escalates to the next tier when it times out at the current one. Empty uses the fixed |
|
|
|
Test-set compaction after ATPG. |
|
bool |
|
Fault-simulate an accepted SAT vector against all remaining faults, not just the target fault, so incidental “fallout” detections are dropped too |
|
bool |
|
Restrict each fault’s CNF to its structural cone of influence |
|
bool |
|
Use incremental-SAT (IFC) solving, one observable cone at a time |
|
int |
|
Number of packing orders tried during dynamic compaction |
|
bool |
|
Order faults by ascending structural cone size so the fastest SAT calls run first, incidentally detecting more faults early. Coverage-identical; stuck-at only |
|
int |
|
Parallel SAT worker processes ( |
|
bool |
|
Run OpenTestability structural reconvergence analysis before ATPG (reconvergent-site faults sorted last and skip the short timeout tier; canceling-path-stem faults pre-certified UNSAT with no SAT call). Requires the |
|
str |
|
PDK tech tag passed to |
|
int |
|
Easy/hard worker split, applied only when |
[report]¶
Key |
Default |
Meaning |
|---|---|---|
|
|
Human-readable report file name |
|
|
Target coverage percent at which ATPG stops |
[scan]¶
Key |
Default |
Meaning |
|---|---|---|
|
|
Number of scan chains. A chain never spans two clock domains, so a multi-clock design needs one per domain at least; flip-flops split as evenly as the count allows, and where that would straddle a domain boundary, each domain gets whole chains in proportion to its flip-flop count |
|
(none) |
Maximum flip-flops per chain; empty means unbounded. With |
|
|
Scan input port base name |
|
|
Scan output port base name |
|
|
Scan enable port name |
|
|
Run the Sky130 scan-cell techmap after stitching |
[testpoint]¶
Used by the add_tp command in the Tcl shell to drive
OpenTestability.
Key |
Default |
Meaning |
|---|---|---|
|
|
Path to the |
|
|
Testability metric |
|
|
Target threshold passed to OpenTestability |
|
|
Maximum test points to insert |
[clocks]¶
Declare multiple clock domains (also settable interactively with add_clock, or
one-shot from the CLI with add-clock).
Key |
Format |
Meaning |
|---|---|---|
|
comma list, e.g. |
Clock port names |
|
comma list of |
Per-port inactive level |
[blackbox]¶
Key |
Format |
Meaning |
|---|---|---|
|
comma list, e.g. |
Instances modeled as test boundaries (pseudo-PI/PO) |
[testmode]¶
Key |
Allowed values |
Default |
Meaning |
|---|---|---|---|
|
|
|
IEEE 1500 wrapper test mode |
[wrap]¶
Key |
Allowed values |
Default |
Meaning |
|---|---|---|---|
|
|
|
Wrapper boundary register model used by the shell’s |
Notes on legacy and inert keys¶
Note
Some keys that appear in config.ofs.example are currently not read by the
parser and have no effect: [simulation] tp_file, [report] verbose, and the
whole [debug] section. The CLI also does not implement --debug/--trace;
logging is at INFO level. These are called out here only so you are not surprised
to see them in sample configs — extra observation points come from a separate
tp_nodes.json file (see Architecture overview),
not tp_file.