| |
| \section{Yosys by example -- Beyond Synthesis} |
| |
| \begin{frame} |
| \sectionpage |
| \end{frame} |
| |
| \begin{frame}{Overview} |
| This section contains 2 subsections: |
| \begin{itemize} |
| \item Interactive Design Investigation |
| \item Symbolic Model Checking |
| \end{itemize} |
| \end{frame} |
| |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| |
| \subsection{Interactive Design Investigation} |
| |
| \begin{frame} |
| \subsectionpage |
| \subsectionpagesuffix |
| \end{frame} |
| |
| \begin{frame}{\subsecname} |
| Yosys can also be used to investigate designs (or netlists created |
| from other tools). |
| |
| \begin{itemize} |
| \item |
| The selection mechanism (see slides ``Using Selections''), especially patterns such |
| as {\tt \%ci} and {\tt \%co}, can be used to figure out how parts of the design |
| are connected. |
| |
| \item |
| Commands such as {\tt submod}, {\tt expose}, {\tt splice}, \dots can be used |
| to transform the design into an equivalent design that is easier to analyse. |
| |
| \item |
| Commands such as {\tt eval} and {\tt sat} can be used to investigate the |
| behavior of the circuit. |
| \end{itemize} |
| \end{frame} |
| |
| \begin{frame}[t, fragile]{Example: Reorganizing a module} |
| \begin{columns} |
| \column[t]{4cm} |
| \lstinputlisting[basicstyle=\ttfamily\fontsize{6pt}{7pt}\selectfont, language=verilog]{PRESENTATION_ExOth/scrambler.v} |
| \column[t]{7cm} |
| \begin{lstlisting}[basicstyle=\ttfamily\fontsize{8pt}{10pt}\selectfont, language=ys, frame=single] |
| read_verilog scrambler.v |
| |
| hierarchy; proc;; |
| |
| cd scrambler |
| submod -name xorshift32 \ |
| xs %c %ci %D %c %ci:+[D] %D \ |
| %ci*:-$dff xs %co %ci %d |
| \end{lstlisting} |
| \end{columns} |
| |
| \hfil\includegraphics[width=11cm,trim=0 0cm 0 1.5cm]{PRESENTATION_ExOth/scrambler_p01.pdf} |
| |
| \hfil\includegraphics[width=11cm,trim=0 0cm 0 2cm]{PRESENTATION_ExOth/scrambler_p02.pdf} |
| \end{frame} |
| |
| \begin{frame}[t, fragile]{Example: Analysis of circuit behavior} |
| \begin{lstlisting}[basicstyle=\ttfamily\fontsize{8pt}{10pt}\selectfont, language=ys] |
| > read_verilog scrambler.v |
| > hierarchy; proc;; cd scrambler |
| > submod -name xorshift32 xs %c %ci %D %c %ci:+[D] %D %ci*:-$dff xs %co %ci %d |
| |
| > cd xorshift32 |
| > rename n2 in |
| > rename n1 out |
| |
| > eval -set in 1 -show out |
| Eval result: \out = 270369. |
| |
| > eval -set in 270369 -show out |
| Eval result: \out = 67634689. |
| |
| > sat -set out 632435482 |
| Signal Name Dec Hex Bin |
| -------------------- ---------- ---------- ------------------------------------- |
| \in 745495504 2c6f5bd0 00101100011011110101101111010000 |
| \out 632435482 25b2331a 00100101101100100011001100011010 |
| \end{lstlisting} |
| \end{frame} |
| |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| |
| \subsection{Symbolic Model Checking} |
| |
| \begin{frame} |
| \subsectionpage |
| \subsectionpagesuffix |
| \end{frame} |
| |
| \begin{frame}{\subsecname} |
| Symbolic Model Checking (SMC) is used to formally prove that a circuit has |
| (or has not) a given property. |
| |
| \bigskip |
| One application is Formal Equivalence Checking: Proving that two circuits |
| are identical. For example this is a very useful feature when debugging custom |
| passes in Yosys. |
| |
| \bigskip |
| Other applications include checking if a module conforms to interface |
| standards. |
| |
| \bigskip |
| The {\tt sat} command in Yosys can be used to perform Symbolic Model Checking. |
| \end{frame} |
| |
| \begin{frame}[t]{Example: Formal Equivalence Checking (1/2)} |
| Remember the following example? |
| \vskip1em |
| |
| \vbox to 0cm{ |
| \vskip-0.3cm |
| \lstinputlisting[basicstyle=\ttfamily\fontsize{6pt}{7pt}\selectfont, language=verilog]{PRESENTATION_ExSyn/techmap_01_map.v} |
| }\vbox to 0cm{ |
| \vskip-0.5cm |
| \lstinputlisting[xleftmargin=5cm, basicstyle=\ttfamily\fontsize{8pt}{10pt}\selectfont, frame=single, language=verilog]{PRESENTATION_ExSyn/techmap_01.v} |
| \lstinputlisting[xleftmargin=5cm, basicstyle=\ttfamily\fontsize{8pt}{10pt}\selectfont, language=ys, frame=single]{PRESENTATION_ExSyn/techmap_01.ys}} |
| |
| \vskip5cm\hskip5cm |
| Lets see if it is correct.. |
| \end{frame} |
| |
| \begin{frame}[t, fragile]{Example: Formal Equivalence Checking (2/2)} |
| \begin{lstlisting}[basicstyle=\ttfamily\fontsize{8pt}{10pt}\selectfont, language=ys, frame=single] |
| # read test design |
| read_verilog techmap_01.v |
| hierarchy -top test |
| |
| # create two version of the design: test_orig and test_mapped |
| copy test test_orig |
| rename test test_mapped |
| |
| # apply the techmap only to test_mapped |
| techmap -map techmap_01_map.v test_mapped |
| |
| # create a miter circuit to test equivalence |
| miter -equiv -make_assert -make_outputs test_orig test_mapped miter |
| flatten miter |
| |
| # run equivalence check |
| sat -verify -prove-asserts -show-inputs -show-outputs miter |
| \end{lstlisting} |
| |
| \dots |
| \begin{lstlisting}[basicstyle=\ttfamily\fontsize{8pt}{10pt}\selectfont] |
| Solving problem with 945 variables and 2505 clauses.. |
| SAT proof finished - no model found: SUCCESS! |
| \end{lstlisting} |
| \end{frame} |
| |
| \begin{frame}[t, fragile]{Example: Symbolic Model Checking (1/2)} |
| \small |
| The following AXI4 Stream Master has a bug. But the bug is not exposed if the |
| slave keeps {\tt tready} asserted all the time. (Something a test bench might do.) |
| |
| \medskip |
| Symbolic Model Checking can be used to expose the bug and find a sequence |
| of values for {\tt tready} that yield the incorrect behavior. |
| |
| \vskip-1em |
| \begin{columns} |
| \column[t]{5cm} |
| \lstinputlisting[basicstyle=\ttfamily\fontsize{5pt}{6pt}\selectfont, language=verilog]{PRESENTATION_ExOth/axis_master.v} |
| \column[t]{5cm} |
| \lstinputlisting[basicstyle=\ttfamily\fontsize{5pt}{6pt}\selectfont, language=verilog]{PRESENTATION_ExOth/axis_test.v} |
| \end{columns} |
| \end{frame} |
| |
| \begin{frame}[t, fragile]{Example: Symbolic Model Checking (2/2)} |
| \begin{lstlisting}[basicstyle=\ttfamily\fontsize{8pt}{10pt}\selectfont, language=ys, frame=single] |
| read_verilog -sv axis_master.v axis_test.v |
| hierarchy -top axis_test |
| |
| proc; flatten;; |
| sat -seq 50 -prove-asserts |
| \end{lstlisting} |
| |
| \bigskip |
| \dots with unmodified {\tt axis\_master.v}: |
| \begin{lstlisting}[basicstyle=\ttfamily\fontsize{8pt}{10pt}\selectfont] |
| Solving problem with 159344 variables and 442126 clauses.. |
| SAT proof finished - model found: FAIL! |
| \end{lstlisting} |
| |
| \bigskip |
| \dots with fixed {\tt axis\_master.v}: |
| \begin{lstlisting}[basicstyle=\ttfamily\fontsize{8pt}{10pt}\selectfont] |
| Solving problem with 159144 variables and 441626 clauses.. |
| SAT proof finished - no model found: SUCCESS! |
| \end{lstlisting} |
| \end{frame} |
| |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| |
| \subsection{Summary} |
| |
| \begin{frame}{\subsecname} |
| \begin{itemize} |
| \item Yosys provides useful features beyond synthesis. |
| \item The commands {\tt sat} and {\tt eval} can be used to analyse the behavior of a circuit. |
| \item The {\tt sat} command can also be used for symbolic model checking. |
| \item This can be useful for debugging and testing designs and Yosys extensions alike. |
| \end{itemize} |
| |
| \bigskip |
| \bigskip |
| \begin{center} |
| Questions? |
| \end{center} |
| |
| \bigskip |
| \bigskip |
| \begin{center} |
| \url{http://www.clifford.at/yosys/} |
| \end{center} |
| \end{frame} |
| |