A design verification system comprising a set of modular verification
engines invoked by a framework that manages the control flow between the
engines. The framework receives a verification problem from an application
and attempts to solve it by instantiating one or more engine in a
customizable sequence or set of sequences. Each verification engine is
configured to achieve a specific verification objective and may be coded
against a common API to facilitate exchange of information between the
engines. The verification engines may include reduction engines, which
attempt to simplify a problem by modifying it or decomposing it, and
decision engines, which attempt to solve problems that are passed to them.
As a verification problem is passed from one engine to the next, the
engine may alter the verification problem such that a decision engine at
the end of the sequence may receive a verification problem that is simpler
to solve than the original problem specified by the system user. If the
decision engine is able to solve a problem by determining a state or
sequence of states that produces a specified value on a specified node of
the design, the engine passes the determined sequence to the engine that
invoked it in the form of a counterexample trace after modifying it to
"undo" whatever effect it may have had on the problem. The engines may
also learn facts, such as a lighthouse that serves as an aid to solving
the verification problem, and pass these facts to the other engines.
Un sistema di verifica di disegno che contiene un insieme i motori modulari di verifica invocati da una struttura che controlla il flusso di controllo fra i motori. La struttura riceve un problema di verifica da un'applicazione e tenta di risolverla instantiating uno o più motore in una sequenza o in un insieme customizable delle sequenze. Ogni motore di verifica è configurato per realizzare una verifica specifica obiettiva e può essere codificato contro un api comune per facilitare lo scambio di informazioni fra i motori. I motori di verifica possono includere i motori di riduzione, che tentano di facilitare un problema modificandolo o decomponendolo ed i motori di decisione, che tentano di risolvere i problemi che sono passati loro. Mentre un problema di verifica è passato da un motore al seguente, il motore può alterare il problema di verifica tali che un motore di decisione alla conclusione della sequenza può ricevere un problema di verifica che è più semplice risolvere che il problema originale specificato dall'utente del sistema. Se il motore di decisione può risolvere un problema determinando un dichiarare o la sequenza di dichiara che produce un valore specificato su un nodo specificato del disegno, il motore passa la sequenza risoluta al motore che la ha invocata sotto forma d'una traccia di contro-esempio dopo la modificazione esso "undo" che cosa effetto può avere sul problema. I motori possono anche imparare i fatti, quale un faro che serve da sussidio a risolvere il problema di verifica e passano questi fatti agli altri motori.