mirror of https://github.com/YosysHQ/yosys.git
Progress on AppNote 011
This commit is contained in:
parent
6e227e3666
commit
0f4055d4c6
|
@ -654,11 +654,60 @@ See {\tt help select} for a complete list of actions available in selections.
|
||||||
|
|
||||||
\subsection{Storing and recalling selections}
|
\subsection{Storing and recalling selections}
|
||||||
|
|
||||||
\FIXME{}
|
The current selection can be stored in memory with the command {\tt select -set
|
||||||
|
<name>}. It can later be recalled using {\tt select @<name>}. In fact, the {\tt
|
||||||
|
@<name>} expression pushes the stored selection on the stack maintained by the
|
||||||
|
{\tt select} command. So for example
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
select @foo @bar %i
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
will select the intersection between the stored selections {\tt foo} and {\tt bar}.
|
||||||
|
|
||||||
|
\medskip
|
||||||
|
|
||||||
|
In larger investigation efforts it is highly recommended to maintain a script that
|
||||||
|
sets up relevant selections, so they can easily be recalled, for example when
|
||||||
|
Yosys needs to be re-run after a design or source code change.
|
||||||
|
|
||||||
|
The {\tt history} command can be used to list all recent interactive commands.
|
||||||
|
A feature that can be useful to create such a script from the commands used in
|
||||||
|
an interactive session.
|
||||||
|
|
||||||
\section{Advanced investigation techniques}
|
\section{Advanced investigation techniques}
|
||||||
\label{poke}
|
\label{poke}
|
||||||
|
|
||||||
|
When working with very large modules, it is often not enough to just select the
|
||||||
|
interesting part of the module. Instead it can be useful to extract the
|
||||||
|
interesting part of the circuit into a separate module. This can for example be
|
||||||
|
useful if one wants to run a series of synthesis commands on the critical part
|
||||||
|
of the module and wants to carefully read all the debug output created by the
|
||||||
|
commands in order to spot a problem. This kind of troubleshooting is much easier
|
||||||
|
if the circuit under investigation is encapsulated in a separate module.
|
||||||
|
|
||||||
|
\begin{figure}[b]
|
||||||
|
\includegraphics[width=\linewidth,trim=0 0cm 0 0cm]{APPNOTE_011_Design_Investigation/submod_00.pdf} \\ \centerline{\tt memdemo} \vskip1em
|
||||||
|
|
||||||
|
\includegraphics[width=\linewidth,trim=0 0cm 0 0cm]{APPNOTE_011_Design_Investigation/submod_01.pdf} \\ \centerline{\tt scramble} \vskip1em
|
||||||
|
|
||||||
|
\includegraphics[width=\linewidth,trim=0 0cm 0 0cm]{APPNOTE_011_Design_Investigation/submod_02.pdf} \\ \centerline{\tt outstage} \vskip1em
|
||||||
|
|
||||||
|
\includegraphics[width=\linewidth,trim=0 0cm 0 0cm]{APPNOTE_011_Design_Investigation/submod_03.pdf} \\ \centerline{\tt selstage} \vskip1em
|
||||||
|
|
||||||
|
\begin{lstlisting}[basicstyle=\ttfamily\scriptsize]
|
||||||
|
select -set outstage y %ci2:+$dff[Q,D] %ci*:-$mux[S]:-$dff
|
||||||
|
select -set selstage y %ci2:+$dff[Q,D] %ci*:-$dff @outstage %d
|
||||||
|
select -set scramble mem* %ci2 %ci*:-$dff mem* %d @selstage %d
|
||||||
|
submod -name scramble @scramble
|
||||||
|
submod -name outstage @outstage
|
||||||
|
submod -name selstage @selstage
|
||||||
|
\end{lstlisting}
|
||||||
|
\caption{The circuit from Fig.~\ref{memdemo_src} and \ref{memdemo_00} broken up using {\tt submod}}
|
||||||
|
\label{submod}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
\FIXME{} --- submod, eval, sat
|
\FIXME{} --- submod, eval, sat
|
||||||
|
|
||||||
\section{Conclusion}
|
\section{Conclusion}
|
||||||
|
|
|
@ -13,3 +13,7 @@ sumprod_04.dot
|
||||||
sumprod_05.dot
|
sumprod_05.dot
|
||||||
memdemo_00.dot
|
memdemo_00.dot
|
||||||
memdemo_01.dot
|
memdemo_01.dot
|
||||||
|
submod_00.dot
|
||||||
|
submod_01.dot
|
||||||
|
submod_02.dot
|
||||||
|
submod_03.dot
|
||||||
|
|
|
@ -11,7 +11,8 @@
|
||||||
../../yosys -p 'opt; cd sumprod; select prod %ci3; show -format dot -prefix sumprod_05' sumprod.v
|
../../yosys -p 'opt; cd sumprod; select prod %ci3; show -format dot -prefix sumprod_05' sumprod.v
|
||||||
../../yosys -p 'proc; opt; memory; opt; cd memdemo; show -format dot -prefix memdemo_00' memdemo.v
|
../../yosys -p 'proc; opt; memory; opt; cd memdemo; show -format dot -prefix memdemo_00' memdemo.v
|
||||||
../../yosys -p 'proc; opt; memory; opt; cd memdemo; show -format dot -prefix memdemo_01 y %ci2:+$dff[Q,D] %ci*:-$mux[S]:-$dff' memdemo.v
|
../../yosys -p 'proc; opt; memory; opt; cd memdemo; show -format dot -prefix memdemo_01 y %ci2:+$dff[Q,D] %ci*:-$mux[S]:-$dff' memdemo.v
|
||||||
sed -i '/^label=/ d;' example_*.dot splice.dot cmos_*.dot sumprod_*.dot memdemo_*.dot
|
../../yosys submod.ys
|
||||||
|
sed -i '/^label=/ d;' example_*.dot splice.dot cmos_*.dot sumprod_*.dot memdemo_*.dot submod_*.dot
|
||||||
dot -Tpdf -o example_00.pdf example_00.dot
|
dot -Tpdf -o example_00.pdf example_00.dot
|
||||||
dot -Tpdf -o example_01.pdf example_01.dot
|
dot -Tpdf -o example_01.pdf example_01.dot
|
||||||
dot -Tpdf -o example_02.pdf example_02.dot
|
dot -Tpdf -o example_02.pdf example_02.dot
|
||||||
|
@ -27,3 +28,7 @@ dot -Tpdf -o sumprod_04.pdf sumprod_04.dot
|
||||||
dot -Tpdf -o sumprod_05.pdf sumprod_05.dot
|
dot -Tpdf -o sumprod_05.pdf sumprod_05.dot
|
||||||
dot -Tpdf -o memdemo_00.pdf memdemo_00.dot
|
dot -Tpdf -o memdemo_00.pdf memdemo_00.dot
|
||||||
dot -Tpdf -o memdemo_01.pdf memdemo_01.dot
|
dot -Tpdf -o memdemo_01.pdf memdemo_01.dot
|
||||||
|
dot -Tpdf -o submod_00.pdf submod_00.dot
|
||||||
|
dot -Tpdf -o submod_01.pdf submod_01.dot
|
||||||
|
dot -Tpdf -o submod_02.pdf submod_02.dot
|
||||||
|
dot -Tpdf -o submod_03.pdf submod_03.dot
|
||||||
|
|
|
@ -11,7 +11,7 @@ reg [3:0] mem [0:3];
|
||||||
always @(posedge clk) begin
|
always @(posedge clk) begin
|
||||||
for (i = 0; i < 4; i = i+1)
|
for (i = 0; i < 4; i = i+1)
|
||||||
mem[i] <= mem[(i+1) % 4] + mem[(i+2) % 4];
|
mem[i] <= mem[(i+1) % 4] + mem[(i+2) % 4];
|
||||||
{ s2, s1 } = d ? { s1, s2 } ^ d : 0;
|
{ s2, s1 } = d ? { s1, s2 } ^ d : 4'b0;
|
||||||
mem[s1] <= d;
|
mem[s1] <= d;
|
||||||
y <= mem[s2];
|
y <= mem[s2];
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
read_verilog memdemo.v
|
||||||
|
proc; opt; memory; opt
|
||||||
|
|
||||||
|
cd memdemo
|
||||||
|
select -set outstage y %ci2:+$dff[Q,D] %ci*:-$mux[S]:-$dff
|
||||||
|
select -set selstage y %ci2:+$dff[Q,D] %ci*:-$dff @outstage %d
|
||||||
|
select -set scramble mem* %ci2 %ci*:-$dff mem* %d @selstage %d
|
||||||
|
submod -name scramble @scramble
|
||||||
|
submod -name outstage @outstage
|
||||||
|
submod -name selstage @selstage
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
show -format dot -prefix submod_00 memdemo
|
||||||
|
show -format dot -prefix submod_01 scramble
|
||||||
|
show -format dot -prefix submod_02 outstage
|
||||||
|
show -format dot -prefix submod_03 selstage
|
Loading…
Reference in New Issue