mirror of https://github.com/YosysHQ/yosys.git
Progress on AppNote 011
This commit is contained in:
parent
8a815ac741
commit
1d000f9372
|
@ -904,12 +904,138 @@ to prove the correct behavior of ALU circuits.
|
||||||
|
|
||||||
\subsection{Solving sequential SAT problems}
|
\subsection{Solving sequential SAT problems}
|
||||||
|
|
||||||
\FIXME
|
\begin{figure}[t]
|
||||||
|
\begin{lstlisting}[basicstyle=\ttfamily\scriptsize]
|
||||||
|
yosys [memdemo]> sat -seq 6 -show y -show d -set-init-undef \
|
||||||
|
-set-at 4 y 1 -set-at 5 y 2 -set-at 6 y 3
|
||||||
|
|
||||||
|
Full command line: sat -seq 6 -show y -show d -set-init-undef
|
||||||
|
-set-at 4 y 1 -set-at 5 y 2 -set-at 6 y 3
|
||||||
|
|
||||||
|
Setting up time step 1:
|
||||||
|
Final constraint equation: { } = { }
|
||||||
|
Imported 29 cells to SAT database.
|
||||||
|
|
||||||
|
Setting up time step 2:
|
||||||
|
Final constraint equation: { } = { }
|
||||||
|
Imported 29 cells to SAT database.
|
||||||
|
|
||||||
|
Setting up time step 3:
|
||||||
|
Final constraint equation: { } = { }
|
||||||
|
Imported 29 cells to SAT database.
|
||||||
|
|
||||||
|
Setting up time step 4:
|
||||||
|
Import set-constraint for timestep: \y = 4'0001
|
||||||
|
Final constraint equation: \y = 4'0001
|
||||||
|
Imported 29 cells to SAT database.
|
||||||
|
|
||||||
|
Setting up time step 5:
|
||||||
|
Import set-constraint for timestep: \y = 4'0010
|
||||||
|
Final constraint equation: \y = 4'0010
|
||||||
|
Imported 29 cells to SAT database.
|
||||||
|
|
||||||
|
Setting up time step 6:
|
||||||
|
Import set-constraint for timestep: \y = 4'0011
|
||||||
|
Final constraint equation: \y = 4'0011
|
||||||
|
Imported 29 cells to SAT database.
|
||||||
|
|
||||||
|
Setting up initial state:
|
||||||
|
Final constraint equation: { \y \s2 \s1 \mem[3] \mem[2] \mem[1]
|
||||||
|
\mem[0] } = 24'xxxxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
|
||||||
|
Import show expression: \y
|
||||||
|
Import show expression: \d
|
||||||
|
|
||||||
|
Solving problem with 10322 variables and 27881 clauses..
|
||||||
|
SAT solving finished - model found:
|
||||||
|
|
||||||
|
Time Signal Name Dec Hex Bin
|
||||||
|
---- -------------------- ---------- ---------- ---------------
|
||||||
|
init \mem[0] -- -- xxxx
|
||||||
|
init \mem[1] -- -- xxxx
|
||||||
|
init \mem[2] -- -- xxxx
|
||||||
|
init \mem[3] -- -- xxxx
|
||||||
|
init \s1 -- -- xx
|
||||||
|
init \s2 -- -- xx
|
||||||
|
init \y -- -- xxxx
|
||||||
|
---- -------------------- ---------- ---------- ---------------
|
||||||
|
1 \d 0 0 0000
|
||||||
|
1 \y -- -- xxxx
|
||||||
|
---- -------------------- ---------- ---------- ---------------
|
||||||
|
2 \d 1 1 0001
|
||||||
|
2 \y -- -- xxxx
|
||||||
|
---- -------------------- ---------- ---------- ---------------
|
||||||
|
3 \d 2 2 0010
|
||||||
|
3 \y 0 0 0000
|
||||||
|
---- -------------------- ---------- ---------- ---------------
|
||||||
|
4 \d 3 3 0011
|
||||||
|
4 \y 1 1 0001
|
||||||
|
---- -------------------- ---------- ---------- ---------------
|
||||||
|
5 \d -- -- 001x
|
||||||
|
5 \y 2 2 0010
|
||||||
|
---- -------------------- ---------- ---------- ---------------
|
||||||
|
6 \d 1 1 0001
|
||||||
|
6 \y 3 3 0011
|
||||||
|
\end{lstlisting}
|
||||||
|
\caption{Solving a sequential SAT problem in the {\tt memdemo} module from Fig.~\ref{memdemo_src}.}
|
||||||
|
\label{memdemo_sat}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
The SAT solver functionality in Yosys can not only be used to solve
|
||||||
|
combinatorial problems, but can also solve sequential problems. Let's consider
|
||||||
|
the entire {\tt memdemo} module from Fig.~\ref{memdemo_src} and suppose we
|
||||||
|
want to know which sequence of input values for {\tt d} will cause the output
|
||||||
|
{\tt y} to produce the sequence 1, 2, 3 from any initial state.
|
||||||
|
Fig.~\ref{memdemo_sat} show the solution to this question, as produced by
|
||||||
|
the following command:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
sat -seq 6 -show y -show d -set-init-undef \
|
||||||
|
-set-at 4 y 1 -set-at 5 y 2 -set-at 6 y 3
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
The {\tt -seq 6} option instructs the {\tt sat} command to solve a sequential
|
||||||
|
problem in 6 time steps. (Experiments with lower number of steps have show that
|
||||||
|
at least 3 cycles are necessary to bring the circuit in a state from which
|
||||||
|
the sequence 1, 2, 3 can be produced.)
|
||||||
|
|
||||||
|
The {\tt -set-init-undef} option tells the {\tt sat} command to initialize
|
||||||
|
all registers to the undef ({\tt x}) state. The way the {\tt x} state
|
||||||
|
is treated in Verilog will ensure that the solution will work for any
|
||||||
|
initial state.
|
||||||
|
|
||||||
|
Finally the three {\tt -set-at} options add constraints for the {\tt y}
|
||||||
|
signal to play the 1, 2, 3 sequence, starting with time step 4.
|
||||||
|
|
||||||
|
It is not surprising that the solution sets {\tt d = 0} in the first step, as
|
||||||
|
this is the only way of setting the {\tt s1} and {\tt s2} registers to a known
|
||||||
|
value. The other options are a bit more difficult to work out manually, but
|
||||||
|
the SAT solver finds the correct solution in an instant.
|
||||||
|
|
||||||
|
\medskip
|
||||||
|
|
||||||
|
There is much more to write about the {\tt sat} command. For example, there is
|
||||||
|
a set of options that can be used to performs sequential proofs using temporal
|
||||||
|
induction \cite{tip}. The command {\tt help sat} can be used to print a list
|
||||||
|
of all options with short descriptions of their functions.
|
||||||
|
|
||||||
\section{Conclusion}
|
\section{Conclusion}
|
||||||
\label{conclusion}
|
\label{conclusion}
|
||||||
|
|
||||||
\FIXME
|
Yosys provides a wide range of functions to analyze and investigate designs. For
|
||||||
|
many cases it is sufficient to simply display circuit diagrams, maybe use some
|
||||||
|
additional commands to narrow the scope of the circuit diagrams to the interesting
|
||||||
|
parts of the circuit. But some cases require more than that. For this applications
|
||||||
|
Yosys provides commands that can be used to further inspect the behavior of the
|
||||||
|
circuit, either by evaluating which outputs are generated from certain inputs
|
||||||
|
({\tt eval}) or by evaluation which inputs and initial conditions can result
|
||||||
|
in a certain behavior at the outputs ({\tt sat}). The SAT command can even be used
|
||||||
|
to prove (or disprove) theorems regarding the circuit, in more advanced cases
|
||||||
|
with the additional help of a miter circuit.
|
||||||
|
|
||||||
|
This features can be powerful tools, for the circuit designer using Yosys as a
|
||||||
|
utility for building circuits, and the software developer using Yosys as a
|
||||||
|
framework for new algorithms alike.
|
||||||
|
|
||||||
\begin{thebibliography}{9}
|
\begin{thebibliography}{9}
|
||||||
|
|
||||||
|
@ -933,9 +1059,14 @@ Graphviz - Graph Visualization Software.
|
||||||
\url{http://en.wikipedia.org/wiki/Circuit_satisfiability}
|
\url{http://en.wikipedia.org/wiki/Circuit_satisfiability}
|
||||||
|
|
||||||
\bibitem{MiniSAT}
|
\bibitem{MiniSAT}
|
||||||
MiniSat minimalistic, open-source SAT solver.
|
MiniSat: a minimalistic open-source SAT solver.
|
||||||
\url{http://minisat.se/}
|
\url{http://minisat.se/}
|
||||||
|
|
||||||
|
\bibitem{tip}
|
||||||
|
Niklas Een and Niklas Sörensson (2003).
|
||||||
|
Temporal Induction by Incremental SAT Solving.
|
||||||
|
\url{http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.8161}
|
||||||
|
|
||||||
\end{thebibliography}
|
\end{thebibliography}
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|
Loading…
Reference in New Issue