3
0
Fork 0
mirror of https://github.com/YosysHQ/sby.git synced 2026-06-30 08:38:56 +00:00
This commit is contained in:
Pratik Deshmukh 2026-06-16 20:33:34 +00:00 committed by GitHub
commit b34ea1b6cc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 23 additions and 9 deletions

View file

@ -466,7 +466,8 @@ Install the ``itp-bmc`` binary to PATH:
make make
sudo cp bmc /usr/local/bin/itp-bmc sudo cp bmc /usr/local/bin/itp-bmc
Or set the ``ITP_BMC`` environment variable, or use the ``--itp-bmc`` command-line flag to specify the path directly. Or set the ``ITP_BMC`` environment variable, or use the ``--itp-bmc``
command-line flag to specify the path directly.
**Engine arguments:** **Engine arguments:**
@ -481,8 +482,7 @@ Or set the ``ITP_BMC`` environment variable, or use the ``--itp-bmc`` command-li
| ``bound`` | Maximum unrolling depth. Default: value of ``depth`` option | | ``bound`` | Maximum unrolling depth. Default: value of ``depth`` option |
+------------+--------------------------------------------------------------+ +------------+--------------------------------------------------------------+
| ``skip`` | Number of initial timeframes to skip before checking bad | | ``skip`` | Number of initial timeframes to skip before checking bad |
| | states. Useful for designs requiring reset cycles. | | | states. Default: value of ``skip`` option or 0 |
| | Default: value of ``skip`` option or 0 |
+------------+--------------------------------------------------------------+ +------------+--------------------------------------------------------------+
**Example:** **Example:**
@ -495,15 +495,29 @@ Or set the ``ITP_BMC`` environment variable, or use the ``--itp-bmc`` command-li
[engines] [engines]
itp 20 0 itp 20 0
For designs requiring reset cycles (e.g. riscv-formal): **Tested on:**
.. code-block:: sby The ``itp`` engine has been verified to produce unbounded safety proofs
(fixpoint convergence) on the following RISC-V cores using the
`riscv-formal <https://github.com/YosysHQ/riscv-formal>`_ framework
(instructions checked: add, sub, and, or, xor, lui):
[engines] - NERV — 6/6 instruction checks, fixpoint at bound 2
itp 15 10 - PicoRV32 — 6/6 instruction checks, fixpoint at bound 2
- SERV — 6/6 instruction checks, fixpoint at bound 2
- VexRiscv — 6/6 instruction checks, fixpoint at bound 2
.. note:: .. note::
The ``itp`` engine achieves unbounded safety proofs via interpolant
fixpoint detection. The ``skip`` parameter skips bad-state checking
for the first ``skip`` timeframes, but fixpoint convergence is only
guaranteed when ``skip`` is set to 0. Designs requiring non-zero
``skip`` values (e.g. multi-cycle reset sequences) will return bounded
results only, as pure BMC cannot rule out paths through invalid reset
states without inductive reasoning. This is a property of BMC-based
interpolation, not a limitation specific to this engine.
The ``itp`` engine does not currently produce counterexample witness The ``itp`` engine does not currently produce counterexample witness
traces. When a property violation is found, only FAIL status is reported. traces. When a property violation is found, only FAIL status is reported.

View file

@ -64,9 +64,9 @@ def run(mode, task, engine_idx, engine):
if skip >= bound: if skip >= bound:
task.error(f"engine_{engine_idx}: skip ({skip}) must be less than bound ({bound}).") task.error(f"engine_{engine_idx}: skip ({skip}) must be less than bound ({bound}).")
# Locate binary and derive workdir (for minisat relative path) # Locate binary and derive workdir
bmc_binary = task.exe_paths["itp-bmc"] bmc_binary = task.exe_paths["itp-bmc"]
bmc_workdir = os.path.dirname(os.path.realpath(bmc_binary)) bmc_workdir = os.path.abspath(f"{task.workdir}/engine_{engine_idx}")
log = task.log_prefix(f"engine_{engine_idx}") log = task.log_prefix(f"engine_{engine_idx}")