Overview
SAT solving appears in the evidence as a backend technique for solving constraints in verification and constrained-random stimulus generation flows. In the cited RISCV-DV/eUVM discussion, SAT solvers are used alongside or after other constraint-solving approaches, especially when constraints are multi-variable or too convoluted for simpler approaches such as native or BDD-based solvers. [C1]
Role in constraint-solving stacks
The evidence describes a tiered approach in eUVM: a native constraint solver handles elementary single-domain constraints; BDD-based solvers handle multi-domain constraints of medium complexity; and constraints that cannot be handled by BDD are delegated to SMT/SAT solvers. The named SMT/SAT solvers in this context are Z3, Boolector, and CMSGen. [C1]
This positions SAT solving as a fallback or heavy-duty backend for difficult constraint cases rather than the only possible technique in a constraint-processing pipeline. [C1]
SAT-only use in PyVSC
Pygen, the Python port of RISCV-DV, uses PyVSC for solving constraints. The evidence states that PyVSC does not deploy a Binary Decision Diagram solver and instead relies completely on SAT solvers for multi-variable constraints. The same source associates this SAT-only approach with less-uniform solution spread compared with SV and eUVM. [C2]
The evidence also reports poor runtime performance for Pygen in this context: it performs more than one hundred times slower than the SystemVerilog version of RISCV-DV and generates fewer than one hundred random RISC-V instructions per second. [C2]
Use in CRAVE
The SystemC UVM port relies on the CRAVE library for constrained randomization. CRAVE provides an integrated interface to a set of BDD and SAT solvers. However, the evidence states that CRAVE could not handle complex RISCV-DV constraints at the time discussed, and that SystemC and CRAVE did not offer support for multicore parallelism. [C3]
Practical implications from the evidence
From the provided material, SAT solving is useful but context-dependent:
- It can serve as a backend for multi-variable or convoluted constraints. [C1][C2]
- It is often combined with other techniques such as native solvers and BDD-based solvers. [C1][C3]
- A SAT-only strategy for multi-variable constraints, as described for PyVSC, may produce a less-uniform spread of solutions compared with SV and eUVM in the RISCV-DV context. [C2]
- Availability of SAT solving alone does not guarantee support for complex verification workloads, as illustrated by the CRAVE discussion around complex RISCV-DV constraints. [C3]