12-Mar
authoradam <adam@megacz.com>
Fri, 14 Mar 2008 01:34:17 +0000 (18:34 -0700)
committeradam <adam@megacz.com>
Fri, 14 Mar 2008 01:34:17 +0000 (18:34 -0700)
darcs-hash:20080314013417-5007d-1fff946d6b523047ca4b558a28d4d5a7c8f782d4.gz

am33.tex
dock.svg
indock.svg [new file with mode: 0644]
inner-loop.svg [new file with mode: 0644]
loops.svg [new file with mode: 0644]
outdock.svg [new file with mode: 0644]
outer-loop.svg [new file with mode: 0644]

index cc70730..8d02767 100644 (file)
--- a/am33.tex
+++ b/am33.tex
 \begin{abstract}
 Changes:
 
-\color{red}
 \begin{tabular}{rl}
+\color{red}
 12-Mar
-&  \\
-\end{tabular}
 \color{black}
-\begin{tabular}{rl}
+& renamed loop+repeat to outer+inner (not in red) \\
+& renamed {\tt Z} flag to {\tt L} flag (not in red) \\
+& rewrote ``inner and outer loops'' section \\
+& updated all diagrams \\
+\color{black}
 7-Mar
 & Moved address bits to the LSB-side of a 37-bit instruction \\
 & Added {\it micro-instruction} and {\it composite instruction} terms \\
@@ -73,8 +75,7 @@ Changes:
 
 \begin{center}
 \epsfig{file=overview,width=1.5in}
-\epsfig{file=ports,width=1.5in}
-\epsfig{file=best,width=1.5in}
+\epsfig{file=indock,width=3in}
 \end{center}
 
 \pagebreak
@@ -109,13 +110,17 @@ From a programmer's perspective, a token packet is indistinguishable
 from a data packet with a unknown payload.
 
 \begin{center}
-\epsfig{file=overview,width=4in}\\
-{\it Overview of a Fleet processor}
+\epsfig{file=overview,width=3in}\\
+\color{red}
+{\it Overview of a Fleet processor; gray shading represents a
+  packet-switched network fabric; blue lines carry data, red lines
+  carry instructions.}
 \end{center}
+\color{black}
 
 \pagebreak
 
-\section{The Ship-Switch Fabric Interface}
+\section{The FleetTwo Pump}
 
 The diagram below represents a {\it programmer's} conceptual view of
 the interface between ships and the switch fabric.  Actual
@@ -124,99 +129,27 @@ destinations that can send and receive only tokens -- not data items
 -- are drawn as dashed lines.
 
 \begin{center}
-\epsfig{file=ports,width=4in}\\
-{\it The interface betwen the switch fabric and the ship}
+\epsfig{file=indock,width=3.5in}\\
+{\it an ``input'' dock}
+
+\epsfig{file=outdock,width=3.5in}\\
+{\it an ``output'' dock}
 \end{center}
 
 The term {\it port} refers to an interface to the ship, the {\it
   dock} connecting it to the switch fabric, and the corresponding
 sources and destinations on the switch fabric.
 
-Each dock consists of a {\it data latch}, which is as wide as a
-single machine word and a {\it pump}, which is a circular fifo of
-instruction-width latches.  The values in the instruction fifo
-control the data latch.
+Each dock consists of a {\it data latch}, which is as wide as a single
+machine word and a {\it pump}, which is a circular fifo of
+instruction-width latches.  The values in the pump control the data
+latch.
 
 Note that the pump in each dock has a destination of its own; this is
 the {\it instruction destination} mentioned in the previous section.
 Note that unlike all other destinations, there is no buffering fifo
 guarding this one.  The size of these fifos are exposed to the
-software programmer so she can avoid deadlock.
-
-\pagebreak
-
-\section{The FleetTwo Pump}
-
-The diagram below shows the datapath for the FleetTwo pump circuitry.
-The square box marked {\tt D} on the output from the {\tt IH} latch is
-the instruction decoder, which decodes word-width instructions into a
-set of control signals suitable for operating the pump.  The boxes
-marked {\tt CD} are carry detectors.  These detect zero values in the
-count and also generate the partial differences used in the decrement
-operation.
-
-\begin{center}
-\epsfig{file=best,width=4in}\\
-{\it The pump datapath}
-\end{center}
-
-The latches of primary interest here are:
-\begin{itemize}
-\item {\tt IH}: Instruction Horn (leaf node; may be shared)
-\item {\tt F0}: Fifo Stage 0 (first fifo stage)
-\item {\tt OD}: On Deck
-\item {\tt F}: Flags, {\tt NF}: Next Flags
-\item {\tt P}: Path (the path to use for outbound data/tokens)
-\item {\tt D}: Data
-\item {\tt DP}: Data Predecessor (ship for output ports, switch fabric for input ports)
-\item {\tt DS}: Data Successor (switch fabric for output ports, ship for input ports)
-\item {\tt RC}: Repeat Count, {\tt NRC}: Next Repeat Count
-\item {\tt LC}: Loop Count, {\tt NLC}: Next Loop Count
-\end{itemize}
-
-Each instruction that executes causes the latches of the pump to fire
-in two phases, denoted as the ``left phase'' and the ``right phase''.
-In the diagram, the left phase latches are those to the left of the
-vertical line down the center, and the right phase latches are to the
-right.  Therefore each instruction execution requires two GasP
-pipeline stages to complete.
-
-\subsection{Flags}
-
-The pump has four flags: {\tt A}, {\tt B}, {\tt S}, {\tt Z}.  Of
-these four, only the first two may be modified directly by
-instructions.
-
-\begin{itemize}
-\item The {\tt A} and {\tt B} flags are general-purpose flags which
-      may be set and cleared by the programmer.
-
-\item The {\tt S} flag, known as the {\it summary} flag.  Its value is
-      determined by the ship, but unless stated otherwise, it should
-      be assumed that whenever the 37th bit of the data ({\tt D})
-      latch is loaded, that same bit is also loaded into the {\tt S}
-      flag.  This lets the ship make decisions based on whether or not
-      the top bit of the data latch is set; if two's complement
-      numbers are in use, this will indicate whether or not the
-      latched value is negative.
-
-\item The {\tt Z} flag, known as the {\it zero} flag, is set whenever
-      the value in the loop counter ({\tt LC}) is zero.  This flag can
-      be used to perform certain operations (such as sending a
-      completion token) only on the last iteration of a loop.
-\end{itemize}
-
-Many instruction fields are specified as two-bit {\it predicates}.
-These fields contain one of four values, indicating if an action
-should be taken unconditionally or conditionally on one of the {\tt A}
-or {\tt B} flags:
-
-\begin{itemize}
-\item {\tt 00:} if {\tt A} is set
-\item {\tt 10:} if {\tt B} is set
-\item {\tt 01:} if {\tt Z} is set ({\tt LC=0})
-\item {\tt 11:} always
-\end{itemize}
+software programmer so \color{red}he\color{black}\ can avoid deadlock.
 
 \pagebreak
 \section{Instructions}
@@ -253,7 +186,8 @@ All instruction words have the following format:
 \begin{bytefield}{37}
   \bitheader[b]{0,10,11,36}\\
 \color{black}
-  \bitbox{2}{Hold} 
+  \bitbox{1}{A} 
+  \bitbox{1}{OL} 
   \bitbox{2}{P} 
 \color{light}
   \bitbox[tbr]{22}{} 
@@ -263,85 +197,163 @@ All instruction words have the following format:
 
 Each instruction word is called a {\it micro instruction}.
 Collections of one or more micro instruction are known as {\it
-  composite instructions}.  The {\tt Hold} field indicates how micro
-instructions are gathered together into composite instructions:
+  composite instructions}.
 
-\begin{itemize}
-\item {\tt 00:} {\tt solo} -- this word is not part of a composite instruction
-\item {\tt 01:} {\tt soloT} -- like {\tt solo}, but {\tt torpedo}-able
-\item {\tt 10:} {\tt body} -- this word is part of a composite instruction, but not the last
-\item {\tt 11:} {\tt tail} -- this is the last micro instruction in a composite instruction
-\end{itemize}
+\color{red}
 
-Solo instructions never reloop (described later); they are
-``one-shot'' instructions.  Multiple solo instructions may be in the
-instruction fifo simultaneously.  A {\tt solo} instruction is immune
-to {\tt torpedo}s (described later); a {\tt soloT} instruction is
-not\footnote{the {\tt soloT} instruction is meant to be used for
-  ``standing repeating'' instructions}.
+The {\tt A} bit stands for {\tt Armor}\footnote{this is to be
+  pronounced with a Boston accent (``AAHH-mir'')}.
+The {\tt OL} bit indicates whether or not this instruction is part of
+an outer loop.  Both of the preceding bits are explained in the next section.
 
-Composite instructions reloop until the loop counter is zero.  When a
-composite instruction is in the instruction fifo, no other
-instructions may enter the fifo.  A {\tt body} instruction is immune
-to {\tt torpedo}s; a {\tt tail} instruction is not.  \color{black}
+\color{black}
 
 The abbreviation {\tt P} stands for {\it predicate}; this is a two-bit
 code that indicates if the instruction should be executed or ignored.
-If an instruction is ignored, it might still reloop.
+
+
 
 \pagebreak
-\subsection{RePeating and ReLooping}
+\subsection{Life Cycle of an Instruction}
+\color{red}
+The diagram below shows an input dock for purposes of illustration
+(behavior at an output dock is identical).
 
-\begin{table}[htp]
-\centering
-\begin{minipage}{3in}
-\centering
 \begin{center}
-\begin{tabular}{|r|c|c|}\hline
-                      &  RePeating? & ReLooping? \\\hline
-{\tt send}            &  Y      &  Y   \\\hline
-{\tt literal}         &  N      &  Y   \\\hline
-{\tt flags}           &  N      &  Y   \\\hline
-{\tt repeat}          &  N      &  Y   \\
-{\tt loop}            &  N      &  Y
-\footnote{note, however, that the decision to reloop or not is based on the value in the loop counter {\it before} execution of the {\tt loop} instruction}
-\\
-{\tt takeLoopCounter}   &  N      &  Y   \\
-{\tt takeRepeatCounter} &  N      &  Y   \\
-\hline
-{\tt torpedo} \color{black}      &  n/a    &  n/a \\
+\epsfig{file=indock,width=3in}\\
+{\it an input dock}
+\end{center}
 
-%{\tt clog}            &  N      &  N   \\
-%{\tt unclog}          &  n/a    &  n/a \\
-%{\tt interrupt}       &  n/a    &  n/a \\
-%{\tt massacre}        &  n/a    &  n/a \\
-\hline
-\end{tabular}
+Note the circle on the path between ``instr horn'' and ``instr fifo'';
+this is known as ``the hatch''.  The hatch has two states: sealed and
+unsealed.  When the machine powers up, the hatch is unsealed; it is
+sealed by the {\tt tail} instruction and unsealed as described below.
+
+When a non-{\tt torpedo} instruction arrives at the instruction horn,
+it waits there until the hatch is in the unsealed state.  The
+instruction then enters the instruction fifo.
+
+When an instruction emerges from the instruction fifo, it arrives at
+the ``on deck'' stage and starts two processes  {\it
+  concurrently}:
+
+\begin{itemize}
+\item
+{\bf Process \#1}\\
+If the instruction has the {\tt OL} bit set and the value of {\tt OC}
+is nonzero, this process will wait for the hatch to be {\it sealed}
+and then enqueue a duplicate copy of the instruction into the instruction fifo.
+
+\item
+{\bf Process \#2}\\
+If the value of {\tt OC} is zero and the instruction at on-deck is
+{\it not} an {\tt setOuter} instruction whose {\tt OL} bit is cleared,
+this process will unseal the hatch, set the {\it inner} loop counter
+to zero, and terminate.
+
+Otherwise, the instruction will execute one or more times, as
+determined by the flags, predicate, and inner loop counter (see
+below).  If the instruction's {\tt A}rmor bit is not
+set\footnote{note: we need to say something about only {\tt send}
+  instructions being {\tt torpedo}able}, each execution attempt will
+be arbitrated against the arrival of a {\tt torpedo} instruction at
+the instruction horn.  If the {\tt torpedo} wins, the {\it outer} loop
+counter is set to zero and this process terminates immediately.
+\end{itemize}
+
+When both processes have completed, the on deck stage is vacated and
+another instruction may enter it.
+
+Note that when a {\tt torpedo} arrives at the instruction horn it will
+wait there until on deck is occupied by an instruction whose {\tt
+  A}rmor bit is {\it not set}, but it does {\it not} wait for the
+hatch to be unsealed.
+
+\color{black}
+
+\subsection{Inner and Outer Loops}
+
+\color{red}
+
+Using the mechanisms described above, a programmer can perform two
+types of loops: {\it inner} loops of only one instruction and {\it
+  outer} loops of multiple instructions.  Inner loops may be nested
+within an outer loop, but no other nesting of loops is allowed.  The
+paths used by inner loops and outer loops are shown below:
+
+\begin{center}
+\begin{minipage}{2in}
+\begin{center}
+\epsfig{file=inner-loop,width=2in}\\
+{\it inner loop (in red)}
+\end{center}
+\end{minipage}
+\begin{minipage}{2in}
+\begin{center}
+\epsfig{file=outer-loop,width=2in}\\
+{\it outer loop (in red)}
 \end{center}
 \end{minipage}
-\caption{classification of instructions}
-\end{table}
+\end{center}
+
+Each type of loop has a counter associated with it: the {\tt IC}
+counter for inner loops and the {\tt OC} counter for outer loops.
+The inner loop counter applies only to {\tt send} instructions; all
+other instructions ignore the inner loop counter.  When a {\tt send}
+instruction reaches the on deck position, it will execute at least
+once; the number of times it executes after that is determined by the
+inner loop counter.
 
-{\bf RePeating}\\
-An instruction will repeat if it is classified as a repeating
-instruction and the repeat counter is nonzero.
-Non-repeating instructions have no effect on the repeat
-counter (except for {\tt repeat}, of course).
+The outer loop counter applies to all instructions {\it except} the
+instruction {\tt setOuter} with {\tt OL=0}, because such instructions
+are needed to reset the outer loop counter after it becomes zero.
+However, {\tt setOuter} with {\tt OL} set to {\it one} is useful for
+resetting the loop counter in the middle of the execution of a loop.
+
+\color{black}
 
-{\bf ReLooping}\\
-Solo instructions (both {\tt solo} and {\tt soloT})
-completely ignore the loop counter; it has no effect on them.
+\subsection{Flags}
+
+The pump has four flags: {\tt A}, {\tt B}, {\tt S}, {\tt L}.  Of
+these four, only the first two may be modified directly by
+instructions.
 
-If a {\tt body} or {\tt tail} instruction reaches the on deck stage
-and the loop counter ({\tt LC}) is zero, the instruction dies
-immediately without executing or relooping.
+\begin{itemize}
+\item The {\tt A} and {\tt B} flags are general-purpose flags which
+      may be set and cleared by the programmer.
 
-If a {\tt body} or {\tt tail} instruction reaches the on deck stage
-and the loop counter ({\tt LC}) is nonzero, a (duplicate) copy of that
-instruction is immediately enqueued at the head of the instruction
-fifo; the original instruction then waits at {\tt OD} until either its
-execution conditions are met or it is {\tt torpedo}ed.
+\item
+\color{red}
+ The {\tt L} flag, known as the {\it last} flag, is set whenever
+      the value in the outer counter ({\tt OC}) is one,
 \color{black}
+ indicating
+      that the dock is in the midst of the last iteration of an
+      outer loop.  This flag can be used to perform certain
+      operations (such as sending a completion token) only on the last
+      iteration of an outer loop.
+
+\item The {\tt S} flag, known as the {\it summary} flag.  Its value is
+      determined by the ship, but unless stated otherwise, it should
+      be assumed that whenever the 37th bit of the data ({\tt D})
+      latch is loaded, that same bit is also loaded into the {\tt S}
+      flag.  This lets the ship make decisions based on whether or not
+      the top bit of the data latch is set; if two's complement
+      numbers are in use, this will indicate whether or not the
+      latched value is negative.
+\end{itemize}
+
+Many instruction fields are specified as two-bit {\it predicates}.
+These fields contain one of four values, indicating if an action
+should be taken unconditionally or conditionally on one of the {\tt A}
+or {\tt B} flags:
+
+\begin{itemize}
+\item {\tt 00:} if {\tt A} is set
+\item {\tt 10:} if {\tt B} is set
+\item {\tt 01:} if {\tt L} is set ({\tt OC=1})
+\item {\tt 11:} always
+\end{itemize}
 
 
 \pagebreak
@@ -352,7 +364,8 @@ execution conditions are met or it is {\tt torpedo}ed.
 \begin{bytefield}{26}
   \bitheader[b]{12-16,19,21}\\
 \color{light}
-  \bitbox{2}{Hold}
+  \bitbox{1}{A}
+  \bitbox{1}{OL}
   \bitbox{2}{P}
 \color{black}
    \bitbox{3}{001} 
@@ -423,14 +436,14 @@ execution conditions are met or it is {\tt torpedo}ed.
 \item {\tt To} - Token Output: fill the token successor.
 \end{itemize}
 
-The {\tt F0}, {\tt DS}, and {\tt TS} stages must all be empty in order for an
-instruction to execute.
+The data successor and token successor must both be empty in order for
+a {\tt send} instruction to attempt execution.
 
-The repeat counter can hold a number {\tt 0..MAX} or a special value
-$\infty$.  If the repeat count ({\tt RC}) holds a value other than
-$\infty$, it is latched with {\tt max(RC-1, 0)}.  If the repeat
-counter reaches zero, the instruction ceases executing and either
-reloops or retires (see earlier section for details).
+The inner loop counter can hold a number {\tt 0..MAX} or a special
+value $\infty$.  If {\tt IC} is nonzero after execution of a {\tt
+  send} instruction, the instruction will execute again, and {\tt IC}
+will be latched with {\tt (IC==$\infty$?$\infty$:max(IC-1, 0))}.  When
+the inner loop counter reaches zero, the instruction ceases executing.
 
 
 \pagebreak
@@ -445,7 +458,8 @@ These instructions load part or all of the data latch ({\tt D}).
 \begin{bytefield}{26}
   \bitheader[b]{0,18,19,21}\\
 \color{light}
-  \bitbox{2}{Hold} 
+  \bitbox{1}{A}
+  \bitbox{1}{OL} 
   \bitbox{2}{P}
 \color{black}
   \bitbox{1}{0} 
@@ -463,7 +477,8 @@ These instructions load part or all of the data latch ({\tt D}).
 \begin{bytefield}{26}
   \bitheader[b]{0,18,19,21}\\
 \color{light}
-  \bitbox{2}{Hold} 
+  \bitbox{1}{A}
+  \bitbox{1}{OL} 
   \bitbox{2}{P}
 \color{black}
   \bitbox{1}{0} 
@@ -478,7 +493,8 @@ These instructions load part or all of the data latch ({\tt D}).
 \begin{bytefield}{26}
   \bitheader[b]{0,18,19,21}\\
 \color{light}
-  \bitbox{2}{Hold} 
+  \bitbox{1}{A}
+  \bitbox{1}{OL} 
   \bitbox{2}{P}
 \color{black}
   \bitbox{1}{1} 
@@ -506,7 +522,8 @@ sel  & D[37:20]      & D[19:1]       \\\hline
 \begin{bytefield}{26}
   \bitheader[b]{0,7,8,15,16-19,21}\\
 \color{light}
-  \bitbox{2}{Hold} 
+  \bitbox{1}{A}
+  \bitbox{1}{OL} 
   \bitbox{2}{P}
 \color{black}
   \bitbox{3}{000}
@@ -532,8 +549,8 @@ the new value as the logical {\tt OR} of zero or more inputs:
   \bitbox{1}{$\overline{\text{\tt B}}$}
   \bitbox{1}{${\text{\tt S}}$}
   \bitbox{1}{$\overline{\text{\tt S}}$}
-  \bitbox{1}{${\text{\tt Z}}$}
-  \bitbox{1}{$\overline{\text{\tt Z}}$}
+  \bitbox{1}{${\text{\tt L}}$}
+  \bitbox{1}{$\overline{\text{\tt L}}$}
 \end{bytefield}}
 \end{center}
 
@@ -546,9 +563,9 @@ is zero.  Note also that it is possible to produce a {\tt 1} by {\tt
 
 \pagebreak
 
-\subsection{{\tt repeat}}
+\subsection{{\tt setInner}}
 
-This instruction loads the repeat counter with either a literal
+This instruction loads the inner loop counter with either a literal
 number, the special value $\infty$, or the contents of the {\tt data}
 register.
 
@@ -557,7 +574,8 @@ register.
 \begin{bytefield}{26}
   \bitheader[b]{16-19,21}\\
 \color{light}
-  \bitbox{2}{Hold} 
+  \bitbox{1}{A}
+  \bitbox{1}{OL} 
   \bitbox{2}{P}
 \color{black}
   \bitbox{3}{000}
@@ -594,17 +612,19 @@ register.
 \end{bytefield}
 
 
-\subsection{{\tt loop}}
+\subsection{{\tt setOuter}}
 
-This instruction loads the loop counter {\tt LC} with either {\tt max(0,LC-1)}, a literal or the
-contents of the {\tt data} register.
+This instruction loads the outer loop counter {\tt OC} with either
+{\tt max(0,OC-1)}, a literal or the contents of the {\tt data}
+register.
 
 \setlength{\bitwidth}{5mm}
 {\tt
 \begin{bytefield}{26}
   \bitheader[b]{16-19,21,24}\\
 \color{light}
-  \bitbox{2}{Hold}
+  \bitbox{1}{A}
+  \bitbox{1}{OL}
 \color{light}
   \bitbox[tbr]{2}{P}
 \color{black}
@@ -618,7 +638,7 @@ contents of the {\tt data} register.
 \end{bytefield}}\\
 
 \begin{bytefield}{26}
-  \bitbox[r]{19}{\raggedleft {\tt max(0,LC-1)}:\hspace{0.2cm}\ }
+  \bitbox[r]{19}{\raggedleft {\tt max(0,OC-1)}:\hspace{0.2cm}\ }
   \bitbox{2}{\tt 00} 
 %\color{light}
   \bitbox[tbr]{5}{} 
@@ -642,14 +662,15 @@ contents of the {\tt data} register.
 \end{bytefield}
 
 \pagebreak
-\subsection{{\tt takeLoopCounter}}
+\subsection{{\tt takeOuterLoopCounter}}
 
 \setlength{\bitwidth}{5mm}
 {\tt
 \begin{bytefield}{26}
   \bitheader[b]{16-19,21}\\
 \color{light}
-  \bitbox{2}{Hold} 
+  \bitbox{1}{A}
+  \bitbox{1}{OL} 
   \bitbox{2}{P}
 \color{black}
   \bitbox{3}{000}
@@ -660,19 +681,19 @@ contents of the {\tt data} register.
 \color{black}
 \end{bytefield}}
 
-The {\tt P} field is a predicate; if it does not hold, the instruction
-is ignored (but may reloop).  This instruction copies the value in the
-loop counter {\tt LC} into the least significant bits of the data
-latch and leaves all other bits of the data latch unchanged.
+This instruction copies the value in the outer loop counter {\tt OC}
+into the least significant bits of the data latch and leaves all other
+bits of the data latch unchanged.
 
-\subsection{{\tt takeRepeatCounter}}
+\subsection{{\tt takeInnerLoopCounter}}
 
 \setlength{\bitwidth}{5mm}
 {\tt
 \begin{bytefield}{26}
   \bitheader[b]{16-19,21}\\
 \color{light}
-  \bitbox{2}{Hold} 
+  \bitbox{1}{A}
+  \bitbox{1}{OL} 
   \bitbox{2}{P}
 \color{black}
   \bitbox{3}{???}
@@ -683,12 +704,11 @@ latch and leaves all other bits of the data latch unchanged.
 \color{black}
 \end{bytefield}}
 
-The {\tt P} field is a predicate; if it does not hold, the instruction
-is ignored (but may reloop).  This instruction copies the value in the
-repeat counter {\tt RC} into the least significant bits of the data
-latch and leaves all other bits of the data latch unchanged.
+This instruction copies the value in the inner loop counter {\tt IC}
+into the least significant bits of the data latch and leaves all other
+bits of the data latch unchanged.
+
 
-\pagebreak
 \subsection{{\tt torpedo}}
 
 \setlength{\bitwidth}{5mm}
@@ -705,10 +725,31 @@ latch and leaves all other bits of the data latch unchanged.
   \bitbox[tbr]{16}{} 
 \end{bytefield}}
 
-When a {\tt torpedo} instruction reaches {\tt IH}, it will wait there
-until an instruction is on deck (at {\tt OD}) and that instruction's
-{\tt Hold} field is {\tt tail} or {\tt soloT}.  The {\tt torpedo} will then
-annihilate the on-deck instruction {\it and set the loop counter to zero}.
+\color{red}
+When a {\tt torpedo} instruction reaches the instruction horn, it will
+wait there until an instruction is on deck whose {\tt A}rmor bit is
+not set.  The {\tt torpedo} will then cause ``Process \#2'' of the on
+deck instruction to terminate and will set the outer loop counter to zero.
+
+\subsection{{\tt tail}}
+
+\setlength{\bitwidth}{5mm}
+{\tt
+\begin{bytefield}{26}
+  \bitheader[b]{0,5,16-19,21}\\
+\color{light}
+  \bitbox{4}{} 
+\color{black}
+  \bitbox{3}{000} 
+  \bitbox{1}{1}
+  \bitbox{2}{01}
+\color{light}
+  \bitbox[tbr]{16}{} 
+\end{bytefield}}
+
+When a {\tt tail} instruction reaches {\tt IH}, it seals the hatch.
+The {\tt tail} instruction does not enter the instruction fifo.
+
 \color{black}
 
 
@@ -813,10 +854,19 @@ annihilate the on-deck instruction {\it and set the loop counter to zero}.
 \epsfig{file=overview,height=5in,angle=90}
 
 \pagebreak
-\epsfig{file=ports,height=5in,angle=90}
+\subsection*{Input Dock}
+\epsfig{file=indock,width=7in,angle=90}
 
 \pagebreak
-\epsfig{file=best,height=5in,angle=90}
+\subsection*{Output Dock}
+\epsfig{file=outdock,width=6.5in,angle=90}
+
+
+%\pagebreak
+%\epsfig{file=ports,height=5in,angle=90}
+
+%\pagebreak
+%\epsfig{file=best,height=5in,angle=90}
 
 
 \end{document}
index e0cba50..6930a7f 100644 (file)
--- a/dock.svg
+++ b/dock.svg
@@ -13,7 +13,7 @@
    id="svg2"
    sodipodi:version="0.32"
    inkscape:version="0.45+devel"
-   sodipodi:docname="drawing.svg"
+   sodipodi:docname="dock.svg"
    inkscape:output_extension="org.inkscape.output.svg.inkscape">
   <defs
      id="defs4">
        inkscape:vp_y="0 : 1000 : 0"
        inkscape:vp_z="700 : 600 : 1"
        inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective65" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
        id="perspective2450" />
     <marker
        inkscape:stockid="Arrow2Mstart"
@@ -89,7 +96,7 @@
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
      inkscape:zoom="2.8"
-     inkscape:cx="270.5604"
+     inkscape:cx="313.0604"
      inkscape:cy="681.62441"
      inkscape:document-units="px"
      inkscape:current-layer="layer1"
diff --git a/indock.svg b/indock.svg
new file mode 100644 (file)
index 0000000..4436c92
--- /dev/null
@@ -0,0 +1,339 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="744.09448"
+   height="1052.3622"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45+devel"
+   sodipodi:docname="indock.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective65" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective2450" />
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mstart"
+       style="overflow:visible">
+      <path
+         id="path3351"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z"
+         transform="scale(0.6,0.6)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend"
+       style="overflow:visible">
+      <path
+         id="path3354"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z"
+         transform="scale(-0.6,-0.6)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible">
+      <path
+         id="path3336"
+         d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective2521" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective10" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="227.34611"
+     inkscape:cy="681.62441"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:window-width="1505"
+     inkscape:window-height="1109"
+     inkscape:window-x="15"
+     inkscape:window-y="9">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2389"
+       visible="true"
+       enabled="true"
+       empspacing="4"
+       units="mm"
+       spacingx="1mm"
+       spacingy="1mm" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow2Mstart);stroke-opacity:1"
+       d="M 262.20472,386.22046 L 155.90549,386.22046"
+       id="path3249"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 287.00787,386.22045 L 297.63779,386.22045 C 305.13779,386.22045 304.72441,393.30706 304.72441,393.30706 L 304.72441,411.0236 C 304.72441,418.5321 311.81102,418.11021 311.81102,418.11021"
+       id="path3231"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 322.44093,418.11022 L 425.19684,418.11022 C 425.19684,418.11022 439.37007,418.31373 439.37007,432.28345 L 439.37007,446.45668 C 439.37007,446.45668 439.87884,460.62991 425.19684,460.62991 L 251.57479,460.62991 C 251.57479,460.62991 237.40156,460.38983 237.40156,446.45668 L 237.40156,432.28345 C 237.40156,418.3503 251.57479,418.11022 251.57479,418.11022 L 322.44093,418.11022 z"
+       id="path3173"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 379.13384,403.937 L 379.13384,432.28345 L 407.4803,432.28345 L 421.65352,418.11023 L 407.4803,403.937 L 379.13384,403.937 z"
+       id="path3169" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 364.96062,403.937 L 364.96062,432.28345 L 393.30708,432.28345 L 407.4803,418.11023 L 393.30708,403.937 L 364.96062,403.937 z"
+       id="path3167" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 350.78739,403.937 L 350.78739,432.28345 L 379.13385,432.28345 L 393.30707,418.11023 L 379.13385,403.937 L 350.78739,403.937 z"
+       id="path3165" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 336.61416,403.937 L 336.61416,432.28345 L 364.96062,432.28345 L 379.13384,418.11023 L 364.96062,403.937 L 336.61416,403.937 z"
+       id="path2393" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 251.5748,403.93699 L 251.5748,432.28344 L 279.92126,432.28344 L 294.09448,418.11022 L 279.92126,403.93699 L 251.5748,403.93699 z"
+       id="path3171" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 265.74804,343.70079 L 265.74804,357.87402 L 219.68505,357.87402 L 212.59844,350.7874 L 219.68505,343.70079 L 265.74804,343.70079 z"
+       id="path3195"
+       sodipodi:nodetypes="cccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="230.31464"
+       y="354.33118"
+       id="text3197"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3199"
+         x="230.31464"
+         y="354.33118"
+         style="font-size:10px">Path</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="267.31375"
+       y="414.5675"
+       id="text3201"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3203"
+         x="267.31375"
+         y="414.5675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000">On</tspan><tspan
+         sodipodi:role="line"
+         x="267.31375"
+         y="427.0675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000"
+         id="tspan3205">Deck</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="352.80966"
+       y="414.5675"
+       id="text3207"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         x="352.80966"
+         y="414.5675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000"
+         id="tspan3211">Instr</tspan><tspan
+         sodipodi:role="line"
+         x="352.80966"
+         y="427.0675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000"
+         id="tspan3215">Fifo</tspan></text>
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 252.17659,372.04723 L 252.17659,400.39368 L 280.52305,400.39368 L 294.69627,386.22046 L 280.52305,372.04723 L 252.17659,372.04723 z"
+       id="path3217" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="268.37222"
+       y="382.6777"
+       id="text3219"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         x="268.37222"
+         y="382.6777"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000"
+         id="tspan3223">Instr</tspan><tspan
+         sodipodi:role="line"
+         x="268.37222"
+         y="395.1777"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000"
+         id="tspan3227">Horn</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="M 265.74803,354.33069 L 318.89763,354.33069 C 326.39763,354.33069 325.98425,361.4173 325.98425,361.4173 L 325.98425,411.0236 C 325.98425,418.5321 318.89764,418.11021 318.89764,418.11021"
+       id="path2523"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path3233"
+       sodipodi:cx="186.02362"
+       sodipodi:cy="288.77951"
+       sodipodi:rx="1.7716535"
+       sodipodi:ry="1.7716535"
+       d="M 187.79527,288.77951 A 1.7716535,1.7716535 0 1 1 184.25197,288.77951 A 1.7716535,1.7716535 0 1 1 187.79527,288.77951 z"
+       transform="translate(139.96063,81.496058)" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="449.99936"
+       y="325.98468"
+       id="text14584"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan14586"
+         x="449.99936"
+         y="325.98468"
+         style="font-size:10px;fill:#000000">Ship</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="M 474.80315,272.83462 L 446.45669,272.83462 L 442.91339,276.37793 L 442.91339,372.04722 L 446.45669,375.59053 L 474.80315,375.59053"
+       id="path14582" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:2.15182614;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path2454"
+       sodipodi:cx="297.63779"
+       sodipodi:cy="396.85037"
+       sodipodi:rx="7.0866141"
+       sodipodi:ry="7.0866141"
+       d="M 304.7244,396.85037 A 7.0866141,7.0866141 0 1 1 290.55117,396.85037 A 7.0866141,7.0866141 0 1 1 304.7244,396.85037 z"
+       transform="matrix(0.4647224,0,0,0.4647208,166.65546,215.96906)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Input"
+     style="display:inline">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+       d="M 212.59843,350.78738 L 155.90551,350.78738"
+       id="path3294"
+       sodipodi:nodetypes="cc" />
+    <g
+       id="g3283"
+       transform="translate(24.803147,-1.7922616e-6)">
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path3270"
+         d="M 283.46457,291.59157 L 283.46457,340.15746 L 342.64215,340.15746 L 366.09396,315.8745 L 342.64215,291.59157 L 283.46457,291.59157 z"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <text
+         transform="scale(1.0000014,0.9999986)"
+         id="text3272"
+         y="318.89807"
+         x="304.72397"
+         style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           style="font-size:10px"
+           y="318.89807"
+           x="304.72397"
+           id="tspan3274"
+           sodipodi:role="line">Data</tspan></text>
+    </g>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:none"
+       d="M 407.46063,315.21932 L 127.53937,315.21932"
+       id="path3288"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 269.29134,315.35431 C 276.44312,315.35431 276.37796,322.44092 276.37796,322.44092 L 276.37796,340.15746 C 276.37796,347.30924 269.29134,347.24407 269.29134,347.24407 L 265.74803,347.24407"
+       id="path2529"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 301.1811,354.33069 C 301.1811,354.33069 294.09449,354.38693 294.09449,347.24407 L 294.09449,336.61415 C 294.09449,329.82844 301.1811,329.52754 301.1811,329.52754 L 308.26772,329.52754"
+       id="path2531"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow2Mend);stroke-opacity:1"
+       d="M 155.90551,315.35431 L 308.26772,315.35431"
+       id="path2543" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-opacity:1"
+       d="M 389.76378,315.35431 L 439.37008,315.35431"
+       id="path2545" />
+  </g>
+</svg>
diff --git a/inner-loop.svg b/inner-loop.svg
new file mode 100644 (file)
index 0000000..0ad9835
--- /dev/null
@@ -0,0 +1,396 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="744.09448819"
+   height="1052.3622047"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45+devel"
+   sodipodi:docname="inner-loop.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective66" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective65" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective2450" />
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mstart"
+       style="overflow:visible">
+      <path
+         id="path3351"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mend"
+       style="overflow:visible;">
+      <path
+         id="path3354"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) rotate(180) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;">
+      <path
+         id="path3336"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective2521" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective10" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="298.41754"
+     inkscape:cy="681.62441"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1505"
+     inkscape:window-height="1109"
+     inkscape:window-x="15"
+     inkscape:window-y="9">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2389"
+       visible="true"
+       enabled="true"
+       empspacing="4"
+       units="mm"
+       spacingx="1mm"
+       spacingy="1mm" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 277.46177,418.11023 L 297.6378,418.11021 C 297.6378,418.11021 304.3145,418.20409 304.3145,424.64841 L 304.3145,431.18661 C 304.3145,431.18661 304.55417,437.7248 297.6378,437.7248 L 251.5748,437.7248 C 251.5748,437.7248 244.8981,437.61405 244.8981,431.18661 L 244.8981,424.64841 C 244.8981,418.22096 251.5748,418.11021 251.5748,418.11021 L 277.46177,418.11023 z"
+       id="path2468"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mstart);marker-start:none"
+       d="M 262.20472,386.22046 L 155.90549,386.22046"
+       id="path3249"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 287.00787,386.22045 L 297.63779,386.22045 C 305.13779,386.22045 304.72441,393.30706 304.72441,393.30706 L 304.72441,411.0236 C 304.72441,418.5321 311.81102,418.11021 311.81102,418.11021"
+       id="path3231"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 322.44093,418.11022 L 425.19684,418.11022 C 425.19684,418.11022 439.37007,418.31373 439.37007,432.28345 L 439.37007,446.45668 C 439.37007,446.45668 439.87884,460.62991 425.19684,460.62991 L 251.57479,460.62991 C 251.57479,460.62991 237.40156,460.38983 237.40156,446.45668 L 237.40156,432.28345 C 237.40156,418.3503 251.57479,418.11022 251.57479,418.11022 L 322.44093,418.11022 z"
+       id="path3173"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 379.13384,403.937 L 379.13384,432.28345 L 407.4803,432.28345 L 421.65352,418.11023 L 407.4803,403.937 L 379.13384,403.937 z"
+       id="path3169" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 364.96062,403.937 L 364.96062,432.28345 L 393.30708,432.28345 L 407.4803,418.11023 L 393.30708,403.937 L 364.96062,403.937 z"
+       id="path3167" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 350.78739,403.937 L 350.78739,432.28345 L 379.13385,432.28345 L 393.30707,418.11023 L 379.13385,403.937 L 350.78739,403.937 z"
+       id="path3165" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 336.61416,403.937 L 336.61416,432.28345 L 364.96062,432.28345 L 379.13384,418.11023 L 364.96062,403.937 L 336.61416,403.937 z"
+       id="path2393" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 251.5748,403.93699 L 251.5748,432.28344 L 279.92126,432.28344 L 294.09448,418.11022 L 279.92126,403.93699 L 251.5748,403.93699 z"
+       id="path3171" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 265.74804,343.70079 L 265.74804,357.87402 L 219.68505,357.87402 L 212.59844,350.7874 L 219.68505,343.70079 L 265.74804,343.70079 z"
+       id="path3195"
+       sodipodi:nodetypes="cccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283000000043px;font-style:normal;font-weight:normal;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="230.31464"
+       y="354.33118"
+       id="text3197"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3199"
+         x="230.31464"
+         y="354.33118"
+         style="font-size:10px;fill:#999999">Path</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283000000043px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="267.31375"
+       y="414.5675"
+       id="text3201"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3203"
+         x="267.31375"
+         y="414.5675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000">On</tspan><tspan
+         sodipodi:role="line"
+         x="267.31375"
+         y="427.0675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000"
+         id="tspan3205">Deck</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283000000043px;font-style:normal;font-weight:normal;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="352.80966"
+       y="414.5675"
+       id="text3207"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         x="352.80966"
+         y="414.5675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#999999"
+         id="tspan3211">Instr</tspan><tspan
+         sodipodi:role="line"
+         x="352.80966"
+         y="427.0675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#999999"
+         id="tspan3215">Fifo</tspan></text>
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 252.17659,372.04723 L 252.17659,400.39368 L 280.52305,400.39368 L 294.69627,386.22046 L 280.52305,372.04723 L 252.17659,372.04723 z"
+       id="path3217" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283000000043px;font-style:normal;font-weight:normal;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="268.37222"
+       y="382.6777"
+       id="text3219"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         x="268.37222"
+         y="382.6777"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#999999"
+         id="tspan3223">Instr</tspan><tspan
+         sodipodi:role="line"
+         x="268.37222"
+         y="395.1777"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#999999"
+         id="tspan3227">Horn</tspan></text>
+    <path
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 265.74803,354.33069 L 318.89763,354.33069 C 326.39763,354.33069 325.98425,361.4173 325.98425,361.4173 L 325.98425,411.0236 C 325.98425,418.5321 318.89764,418.11021 318.89764,418.11021"
+       id="path2523"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path3233"
+       sodipodi:cx="186.02362"
+       sodipodi:cy="288.77951"
+       sodipodi:rx="1.7716535"
+       sodipodi:ry="1.7716535"
+       d="M 187.79527,288.77951 A 1.7716535,1.7716535 0 1 1 184.25197,288.77951 A 1.7716535,1.7716535 0 1 1 187.79527,288.77951 z"
+       transform="translate(139.96063,81.496058)" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="449.99936"
+       y="325.98468"
+       id="text14584"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan14586"
+         x="449.99936"
+         y="325.98468"
+         style="font-size:10px;fill:#000000">Ship</tspan></text>
+    <path
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 474.80315,272.83462 L 446.45669,272.83462 L 442.91339,276.37793 L 442.91339,372.04722 L 446.45669,375.59053 L 474.80315,375.59053"
+       id="path14582" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#999999;stroke-width:2.15182613999999983;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path2454"
+       sodipodi:cx="297.63779"
+       sodipodi:cy="396.85037"
+       sodipodi:rx="7.0866141"
+       sodipodi:ry="7.0866141"
+       d="M 304.7244,396.85037 A 7.0866141,7.0866141 0 1 1 290.55117,396.85037 A 7.0866141,7.0866141 0 1 1 304.7244,396.85037 z"
+       transform="matrix(0.4647224,0,0,0.4647208,166.65546,215.96906)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Output"
+     style="display:inline">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-opacity:1"
+       d="M 212.59842,350.78738 L 198.42519,350.78738 C 198.42519,350.78738 191.33858,351.20077 191.33858,343.70077 L 191.33858,322.44092 C 191.33858,322.44092 191.39483,314.99717 184.25197,315.35431 L 155.90551,315.35431"
+       id="path3245"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow2Mstart);stroke-opacity:1;display:inline"
+       d="M 265.74803,347.24407 L 375.59056,347.24407 C 375.59056,347.24407 382.67717,347.65746 382.67717,340.15746 L 382.67717,322.44092 C 382.67717,322.44092 382.62092,314.99717 389.76378,315.35431 L 435.82677,315.35431"
+       id="path2535"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 325.98425,361.41729 C 325.98425,361.41729 325.21373,354.33068 333.07087,354.33068 L 357.87402,354.33068 C 365.01688,354.33068 364.96063,347.24407 364.96063,347.24407 L 364.96063,333.07084 C 364.96063,325.91906 357.87402,325.98423 357.87402,325.98423 L 350.7874,325.98423"
+       id="path2537"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+       d="M 155.90551,350.78738 L 170.07874,350.78738 C 177.93588,350.78738 177.16535,357.87399 177.16535,357.87399 L 177.16535,361.4173 C 177.16535,368.59578 184.25197,368.50391 184.25197,368.50391 L 325.98425,368.50391"
+       id="path2539"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 180.70866,315.35431 L 269.29134,315.35431"
+       id="path2547" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 350.7874,315.35431 L 389.76378,315.35431"
+       id="path2549" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.99999994000000003px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 351.92073,291.07138 L 351.92073,339.63727 L 292.74315,339.63727 L 269.29134,315.35431 L 292.74315,291.07138 L 351.92073,291.07138 z"
+       id="path3235"
+       sodipodi:nodetypes="cccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283000000043px;font-style:normal;font-weight:normal;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="304.72397"
+       y="318.89807"
+       id="text3237"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3239"
+         x="304.72397"
+         y="318.89807"
+         style="font-size:10px;fill:#999999">Data</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Input"
+     style="display:none">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+       d="M 212.59843,350.78738 L 155.90551,350.78738"
+       id="path3294"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 308.26772,291.59157 L 308.26772,340.15746 L 367.4453,340.15746 L 390.89711,315.8745 L 367.4453,291.59157 L 308.26772,291.59157 z"
+       id="path3270"
+       sodipodi:nodetypes="cccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="329.52707"
+       y="318.89807"
+       id="text3272"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3274"
+         x="329.52707"
+         y="318.89807"
+         style="font-size:10px">Data</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:none"
+       d="M 407.46063,315.21932 L 127.53937,315.21932"
+       id="path3288"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 269.29134,315.35431 C 276.44312,315.35431 276.37796,322.44092 276.37796,322.44092 L 276.37796,340.15746 C 276.37796,347.30924 269.29134,347.24407 269.29134,347.24407 L 265.74803,347.24407"
+       id="path2529"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 301.1811,354.33069 C 301.1811,354.33069 294.09449,354.38693 294.09449,347.24407 L 294.09449,336.61415 C 294.09449,329.82844 301.1811,329.52754 301.1811,329.52754 L 308.26772,329.52754"
+       id="path2531"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow2Mend);stroke-opacity:1"
+       d="M 155.90551,315.35431 L 308.26772,315.35431"
+       id="path2543" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-opacity:1"
+       d="M 389.76378,315.35431 L 439.37008,315.35431"
+       id="path2545" />
+  </g>
+</svg>
diff --git a/loops.svg b/loops.svg
new file mode 100644 (file)
index 0000000..269c99f
--- /dev/null
+++ b/loops.svg
@@ -0,0 +1,396 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="744.09448819"
+   height="1052.3622047"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45+devel"
+   sodipodi:docname="loops.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective66" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective65" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective2450" />
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mstart"
+       style="overflow:visible">
+      <path
+         id="path3351"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mend"
+       style="overflow:visible;">
+      <path
+         id="path3354"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) rotate(180) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;">
+      <path
+         id="path3336"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective2521" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective10" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="298.41754"
+     inkscape:cy="681.62441"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1505"
+     inkscape:window-height="1109"
+     inkscape:window-x="15"
+     inkscape:window-y="9">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2389"
+       visible="true"
+       enabled="true"
+       empspacing="4"
+       units="mm"
+       spacingx="1mm"
+       spacingy="1mm" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 277.46177,418.11023 L 297.6378,418.11021 C 297.6378,418.11021 304.3145,418.20409 304.3145,424.64841 L 304.3145,431.18661 C 304.3145,431.18661 304.55417,437.7248 297.6378,437.7248 L 251.5748,437.7248 C 251.5748,437.7248 244.8981,437.61405 244.8981,431.18661 L 244.8981,424.64841 C 244.8981,418.22096 251.5748,418.11021 251.5748,418.11021 L 277.46177,418.11023 z"
+       id="path2468"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mstart);marker-start:none"
+       d="M 262.20472,386.22046 L 155.90549,386.22046"
+       id="path3249"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 287.00787,386.22045 L 297.63779,386.22045 C 305.13779,386.22045 304.72441,393.30706 304.72441,393.30706 L 304.72441,411.0236 C 304.72441,418.5321 311.81102,418.11021 311.81102,418.11021"
+       id="path3231"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 322.44093,418.11022 L 425.19684,418.11022 C 425.19684,418.11022 439.37007,418.31373 439.37007,432.28345 L 439.37007,446.45668 C 439.37007,446.45668 439.87884,460.62991 425.19684,460.62991 L 251.57479,460.62991 C 251.57479,460.62991 237.40156,460.38983 237.40156,446.45668 L 237.40156,432.28345 C 237.40156,418.3503 251.57479,418.11022 251.57479,418.11022 L 322.44093,418.11022 z"
+       id="path3173"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 379.13384,403.937 L 379.13384,432.28345 L 407.4803,432.28345 L 421.65352,418.11023 L 407.4803,403.937 L 379.13384,403.937 z"
+       id="path3169" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 364.96062,403.937 L 364.96062,432.28345 L 393.30708,432.28345 L 407.4803,418.11023 L 393.30708,403.937 L 364.96062,403.937 z"
+       id="path3167" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 350.78739,403.937 L 350.78739,432.28345 L 379.13385,432.28345 L 393.30707,418.11023 L 379.13385,403.937 L 350.78739,403.937 z"
+       id="path3165" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 336.61416,403.937 L 336.61416,432.28345 L 364.96062,432.28345 L 379.13384,418.11023 L 364.96062,403.937 L 336.61416,403.937 z"
+       id="path2393" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 251.5748,403.93699 L 251.5748,432.28344 L 279.92126,432.28344 L 294.09448,418.11022 L 279.92126,403.93699 L 251.5748,403.93699 z"
+       id="path3171" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 265.74804,343.70079 L 265.74804,357.87402 L 219.68505,357.87402 L 212.59844,350.7874 L 219.68505,343.70079 L 265.74804,343.70079 z"
+       id="path3195"
+       sodipodi:nodetypes="cccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283000000043px;font-style:normal;font-weight:normal;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="230.31464"
+       y="354.33118"
+       id="text3197"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3199"
+         x="230.31464"
+         y="354.33118"
+         style="font-size:10px;fill:#999999">Path</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283000000043px;font-style:normal;font-weight:normal;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="267.31375"
+       y="414.5675"
+       id="text3201"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3203"
+         x="267.31375"
+         y="414.5675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#999999">On</tspan><tspan
+         sodipodi:role="line"
+         x="267.31375"
+         y="427.0675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#999999"
+         id="tspan3205">Deck</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283000000043px;font-style:normal;font-weight:normal;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="352.80966"
+       y="414.5675"
+       id="text3207"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         x="352.80966"
+         y="414.5675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#999999"
+         id="tspan3211">Instr</tspan><tspan
+         sodipodi:role="line"
+         x="352.80966"
+         y="427.0675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#999999"
+         id="tspan3215">Fifo</tspan></text>
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 252.17659,372.04723 L 252.17659,400.39368 L 280.52305,400.39368 L 294.69627,386.22046 L 280.52305,372.04723 L 252.17659,372.04723 z"
+       id="path3217" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283000000043px;font-style:normal;font-weight:normal;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="268.37222"
+       y="382.6777"
+       id="text3219"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         x="268.37222"
+         y="382.6777"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#999999"
+         id="tspan3223">Instr</tspan><tspan
+         sodipodi:role="line"
+         x="268.37222"
+         y="395.1777"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#999999"
+         id="tspan3227">Horn</tspan></text>
+    <path
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 265.74803,354.33069 L 318.89763,354.33069 C 326.39763,354.33069 325.98425,361.4173 325.98425,361.4173 L 325.98425,411.0236 C 325.98425,418.5321 318.89764,418.11021 318.89764,418.11021"
+       id="path2523"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path3233"
+       sodipodi:cx="186.02362"
+       sodipodi:cy="288.77951"
+       sodipodi:rx="1.7716535"
+       sodipodi:ry="1.7716535"
+       d="M 187.79527,288.77951 A 1.7716535,1.7716535 0 1 1 184.25197,288.77951 A 1.7716535,1.7716535 0 1 1 187.79527,288.77951 z"
+       transform="translate(139.96063,81.496058)" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="449.99936"
+       y="325.98468"
+       id="text14584"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan14586"
+         x="449.99936"
+         y="325.98468"
+         style="font-size:10px;fill:#000000">Ship</tspan></text>
+    <path
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 474.80315,272.83462 L 446.45669,272.83462 L 442.91339,276.37793 L 442.91339,372.04722 L 446.45669,375.59053 L 474.80315,375.59053"
+       id="path14582" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#999999;stroke-width:2.15182613999999983;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path2454"
+       sodipodi:cx="297.63779"
+       sodipodi:cy="396.85037"
+       sodipodi:rx="7.0866141"
+       sodipodi:ry="7.0866141"
+       d="M 304.7244,396.85037 A 7.0866141,7.0866141 0 1 1 290.55117,396.85037 A 7.0866141,7.0866141 0 1 1 304.7244,396.85037 z"
+       transform="matrix(0.4647224,0,0,0.4647208,166.65546,215.96906)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Output"
+     style="display:inline">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-opacity:1"
+       d="M 212.59842,350.78738 L 198.42519,350.78738 C 198.42519,350.78738 191.33858,351.20077 191.33858,343.70077 L 191.33858,322.44092 C 191.33858,322.44092 191.39483,314.99717 184.25197,315.35431 L 155.90551,315.35431"
+       id="path3245"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow2Mstart);stroke-opacity:1;display:inline"
+       d="M 265.74803,347.24407 L 375.59056,347.24407 C 375.59056,347.24407 382.67717,347.65746 382.67717,340.15746 L 382.67717,322.44092 C 382.67717,322.44092 382.62092,314.99717 389.76378,315.35431 L 435.82677,315.35431"
+       id="path2535"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 325.98425,361.41729 C 325.98425,361.41729 325.21373,354.33068 333.07087,354.33068 L 357.87402,354.33068 C 365.01688,354.33068 364.96063,347.24407 364.96063,347.24407 L 364.96063,333.07084 C 364.96063,325.91906 357.87402,325.98423 357.87402,325.98423 L 350.7874,325.98423"
+       id="path2537"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+       d="M 155.90551,350.78738 L 170.07874,350.78738 C 177.93588,350.78738 177.16535,357.87399 177.16535,357.87399 L 177.16535,361.4173 C 177.16535,368.59578 184.25197,368.50391 184.25197,368.50391 L 325.98425,368.50391"
+       id="path2539"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 180.70866,315.35431 L 269.29134,315.35431"
+       id="path2547" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 350.7874,315.35431 L 389.76378,315.35431"
+       id="path2549" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.99999994000000003px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 351.92073,291.07138 L 351.92073,339.63727 L 292.74315,339.63727 L 269.29134,315.35431 L 292.74315,291.07138 L 351.92073,291.07138 z"
+       id="path3235"
+       sodipodi:nodetypes="cccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283000000043px;font-style:normal;font-weight:normal;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="304.72397"
+       y="318.89807"
+       id="text3237"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3239"
+         x="304.72397"
+         y="318.89807"
+         style="font-size:10px;fill:#999999">Data</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Input"
+     style="display:none">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+       d="M 212.59843,350.78738 L 155.90551,350.78738"
+       id="path3294"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 308.26772,291.59157 L 308.26772,340.15746 L 367.4453,340.15746 L 390.89711,315.8745 L 367.4453,291.59157 L 308.26772,291.59157 z"
+       id="path3270"
+       sodipodi:nodetypes="cccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="329.52707"
+       y="318.89807"
+       id="text3272"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3274"
+         x="329.52707"
+         y="318.89807"
+         style="font-size:10px">Data</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:none"
+       d="M 407.46063,315.21932 L 127.53937,315.21932"
+       id="path3288"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 269.29134,315.35431 C 276.44312,315.35431 276.37796,322.44092 276.37796,322.44092 L 276.37796,340.15746 C 276.37796,347.30924 269.29134,347.24407 269.29134,347.24407 L 265.74803,347.24407"
+       id="path2529"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 301.1811,354.33069 C 301.1811,354.33069 294.09449,354.38693 294.09449,347.24407 L 294.09449,336.61415 C 294.09449,329.82844 301.1811,329.52754 301.1811,329.52754 L 308.26772,329.52754"
+       id="path2531"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow2Mend);stroke-opacity:1"
+       d="M 155.90551,315.35431 L 308.26772,315.35431"
+       id="path2543" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-opacity:1"
+       d="M 389.76378,315.35431 L 439.37008,315.35431"
+       id="path2545" />
+  </g>
+</svg>
diff --git a/outdock.svg b/outdock.svg
new file mode 100644 (file)
index 0000000..cacd144
--- /dev/null
@@ -0,0 +1,335 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="744.09448"
+   height="1052.3622"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45+devel"
+   sodipodi:docname="outdock.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective2507" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective2450" />
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mstart"
+       style="overflow:visible">
+      <path
+         id="path3351"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z"
+         transform="scale(0.6,0.6)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend"
+       style="overflow:visible">
+      <path
+         id="path3354"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z"
+         transform="scale(-0.6,-0.6)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible">
+      <path
+         id="path3336"
+         d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective2521" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective10" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="227.34611"
+     inkscape:cy="681.62441"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:window-width="1505"
+     inkscape:window-height="1109"
+     inkscape:window-x="-12"
+     inkscape:window-y="44">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2389"
+       visible="true"
+       enabled="true"
+       empspacing="4"
+       units="mm"
+       spacingx="1mm"
+       spacingy="1mm" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow2Mstart);stroke-opacity:1"
+       d="M 262.20472,386.22046 L 155.90549,386.22046"
+       id="path3249"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 287.00787,386.22045 L 297.63779,386.22045 C 305.13779,386.22045 304.72441,393.30706 304.72441,393.30706 L 304.72441,411.0236 C 304.72441,418.5321 311.81102,418.11021 311.81102,418.11021"
+       id="path3231"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 322.44093,418.11022 L 425.19684,418.11022 C 425.19684,418.11022 439.37007,418.31373 439.37007,432.28345 L 439.37007,446.45668 C 439.37007,446.45668 439.87884,460.62991 425.19684,460.62991 L 251.57479,460.62991 C 251.57479,460.62991 237.40156,460.38983 237.40156,446.45668 L 237.40156,432.28345 C 237.40156,418.3503 251.57479,418.11022 251.57479,418.11022 L 322.44093,418.11022 z"
+       id="path3173"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 379.13384,403.937 L 379.13384,432.28345 L 407.4803,432.28345 L 421.65352,418.11023 L 407.4803,403.937 L 379.13384,403.937 z"
+       id="path3169" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 364.96062,403.937 L 364.96062,432.28345 L 393.30708,432.28345 L 407.4803,418.11023 L 393.30708,403.937 L 364.96062,403.937 z"
+       id="path3167" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 350.78739,403.937 L 350.78739,432.28345 L 379.13385,432.28345 L 393.30707,418.11023 L 379.13385,403.937 L 350.78739,403.937 z"
+       id="path3165" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 336.61416,403.937 L 336.61416,432.28345 L 364.96062,432.28345 L 379.13384,418.11023 L 364.96062,403.937 L 336.61416,403.937 z"
+       id="path2393" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 251.5748,403.93699 L 251.5748,432.28344 L 279.92126,432.28344 L 294.09448,418.11022 L 279.92126,403.93699 L 251.5748,403.93699 z"
+       id="path3171" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 265.74804,343.70079 L 265.74804,357.87402 L 219.68505,357.87402 L 212.59844,350.7874 L 219.68505,343.70079 L 265.74804,343.70079 z"
+       id="path3195"
+       sodipodi:nodetypes="cccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="230.31464"
+       y="354.33118"
+       id="text3197"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3199"
+         x="230.31464"
+         y="354.33118"
+         style="font-size:10px">Path</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="267.31375"
+       y="414.5675"
+       id="text3201"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3203"
+         x="267.31375"
+         y="414.5675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000">On</tspan><tspan
+         sodipodi:role="line"
+         x="267.31375"
+         y="427.0675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000"
+         id="tspan3205">Deck</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="352.80966"
+       y="414.5675"
+       id="text3207"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         x="352.80966"
+         y="414.5675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000"
+         id="tspan3211">Instr</tspan><tspan
+         sodipodi:role="line"
+         x="352.80966"
+         y="427.0675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000"
+         id="tspan3215">Fifo</tspan></text>
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 252.17659,372.04723 L 252.17659,400.39368 L 280.52305,400.39368 L 294.69627,386.22046 L 280.52305,372.04723 L 252.17659,372.04723 z"
+       id="path3217" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="268.37222"
+       y="382.6777"
+       id="text3219"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         x="268.37222"
+         y="382.6777"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000"
+         id="tspan3223">Instr</tspan><tspan
+         sodipodi:role="line"
+         x="268.37222"
+         y="395.1777"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000"
+         id="tspan3227">Horn</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="M 265.74803,354.33069 L 318.89763,354.33069 C 326.39763,354.33069 325.98425,361.4173 325.98425,361.4173 L 325.98425,411.0236 C 325.98425,418.5321 318.89764,418.11021 318.89764,418.11021"
+       id="path2523"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path3233"
+       sodipodi:cx="186.02362"
+       sodipodi:cy="288.77951"
+       sodipodi:rx="1.7716535"
+       sodipodi:ry="1.7716535"
+       d="M 187.79527,288.77951 A 1.7716535,1.7716535 0 1 1 184.25197,288.77951 A 1.7716535,1.7716535 0 1 1 187.79527,288.77951 z"
+       transform="translate(139.96063,81.496058)" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="449.99936"
+       y="325.98468"
+       id="text14584"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan14586"
+         x="449.99936"
+         y="325.98468"
+         style="font-size:10px;fill:#000000">Ship</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="M 474.80315,272.83462 L 446.45669,272.83462 L 442.91339,276.37793 L 442.91339,372.04722 L 446.45669,375.59053 L 474.80315,375.59053"
+       id="path14582" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:2.15182614;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path2454"
+       sodipodi:cx="297.63779"
+       sodipodi:cy="396.85037"
+       sodipodi:rx="7.0866141"
+       sodipodi:ry="7.0866141"
+       d="M 304.7244,396.85037 A 7.0866141,7.0866141 0 1 1 290.55117,396.85037 A 7.0866141,7.0866141 0 1 1 304.7244,396.85037 z"
+       transform="matrix(0.4647224,0,0,0.4647208,166.65546,215.96906)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Output"
+     style="display:inline">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-opacity:1"
+       d="M 212.59842,350.78738 L 198.42519,350.78738 C 198.42519,350.78738 191.33858,351.20077 191.33858,343.70077 L 191.33858,322.44092 C 191.33858,322.44092 191.39483,314.99717 184.25197,315.35431 L 155.90551,315.35431"
+       id="path3245"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow2Mstart);stroke-opacity:1;display:inline"
+       d="M 265.74803,347.24407 L 375.59056,347.24407 C 375.59056,347.24407 382.67717,347.65746 382.67717,340.15746 L 382.67717,322.44092 C 382.67717,322.44092 382.62092,314.99717 389.76378,315.35431 L 435.82677,315.35431"
+       id="path2535"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 325.98425,361.41729 C 325.98425,361.41729 325.21373,354.33068 333.07087,354.33068 L 357.87402,354.33068 C 365.01688,354.33068 364.96063,347.24407 364.96063,347.24407 L 364.96063,333.07084 C 364.96063,325.91906 357.87402,325.98423 357.87402,325.98423 L 350.7874,325.98423"
+       id="path2537"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+       d="M 155.90551,350.78738 L 170.07874,350.78738 C 177.93588,350.78738 177.16535,357.87399 177.16535,357.87399 L 177.16535,361.4173 C 177.16535,368.59578 184.25197,368.50391 184.25197,368.50391 L 325.98425,368.50391"
+       id="path2539"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 180.70866,315.35431 L 269.29134,315.35431"
+       id="path2547" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 350.7874,315.35431 L 389.76378,315.35431"
+       id="path2549" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 351.92073,291.07138 L 351.92073,339.63727 L 292.74315,339.63727 L 269.29134,315.35431 L 292.74315,291.07138 L 351.92073,291.07138 z"
+       id="path3235"
+       sodipodi:nodetypes="cccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="304.72397"
+       y="318.89807"
+       id="text3237"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3239"
+         x="304.72397"
+         y="318.89807"
+         style="font-size:10px">Data</tspan></text>
+  </g>
+</svg>
diff --git a/outer-loop.svg b/outer-loop.svg
new file mode 100644 (file)
index 0000000..a5ec956
--- /dev/null
@@ -0,0 +1,396 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="744.09448819"
+   height="1052.3622047"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45+devel"
+   sodipodi:docname="outer-loop.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective66" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective65" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective2450" />
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mstart"
+       style="overflow:visible">
+      <path
+         id="path3351"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mend"
+       style="overflow:visible;">
+      <path
+         id="path3354"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) rotate(180) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;">
+      <path
+         id="path3336"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective2521" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="-50 : 600 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="700 : 600 : 1"
+       inkscape:persp3d-origin="300 : 400 : 1"
+       id="perspective10" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="298.41754"
+     inkscape:cy="681.62441"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1505"
+     inkscape:window-height="1109"
+     inkscape:window-x="15"
+     inkscape:window-y="9">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2389"
+       visible="true"
+       enabled="true"
+       empspacing="4"
+       units="mm"
+       spacingx="1mm"
+       spacingy="1mm" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 265.74803,354.33069 L 318.89763,354.33069 C 326.39763,354.33069 325.98425,361.4173 325.98425,361.4173 L 325.98425,411.0236 C 325.98425,418.5321 318.89764,418.11021 318.89764,418.11021"
+       id="path2523"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 277.46177,418.11023 L 297.6378,418.11021 C 297.6378,418.11021 304.3145,418.20409 304.3145,424.64841 L 304.3145,431.18661 C 304.3145,431.18661 304.55417,437.7248 297.6378,437.7248 L 251.5748,437.7248 C 251.5748,437.7248 244.8981,437.61405 244.8981,431.18661 L 244.8981,424.64841 C 244.8981,418.22096 251.5748,418.11021 251.5748,418.11021 L 277.46177,418.11023 z"
+       id="path2468"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mstart);marker-start:none"
+       d="M 262.20472,386.22046 L 155.90549,386.22046"
+       id="path3249"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 287.00787,386.22045 L 297.63779,386.22045 C 305.13779,386.22045 304.72441,393.30706 304.72441,393.30706 L 304.72441,411.0236 C 304.72441,418.5321 311.81102,418.11021 311.81102,418.11021"
+       id="path3231"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 322.44093,418.11022 L 425.19684,418.11022 C 425.19684,418.11022 439.37007,418.31373 439.37007,432.28345 L 439.37007,446.45668 C 439.37007,446.45668 439.87884,460.62991 425.19684,460.62991 L 251.57479,460.62991 C 251.57479,460.62991 237.40156,460.38983 237.40156,446.45668 L 237.40156,432.28345 C 237.40156,418.3503 251.57479,418.11022 251.57479,418.11022 L 322.44093,418.11022 z"
+       id="path3173"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 379.13384,403.937 L 379.13384,432.28345 L 407.4803,432.28345 L 421.65352,418.11023 L 407.4803,403.937 L 379.13384,403.937 z"
+       id="path3169" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 364.96062,403.937 L 364.96062,432.28345 L 393.30708,432.28345 L 407.4803,418.11023 L 393.30708,403.937 L 364.96062,403.937 z"
+       id="path3167" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 350.78739,403.937 L 350.78739,432.28345 L 379.13385,432.28345 L 393.30707,418.11023 L 379.13385,403.937 L 350.78739,403.937 z"
+       id="path3165" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 336.61416,403.937 L 336.61416,432.28345 L 364.96062,432.28345 L 379.13384,418.11023 L 364.96062,403.937 L 336.61416,403.937 z"
+       id="path2393" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 251.5748,403.93699 L 251.5748,432.28344 L 279.92126,432.28344 L 294.09448,418.11022 L 279.92126,403.93699 L 251.5748,403.93699 z"
+       id="path3171" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 265.74804,343.70079 L 265.74804,357.87402 L 219.68505,357.87402 L 212.59844,350.7874 L 219.68505,343.70079 L 265.74804,343.70079 z"
+       id="path3195"
+       sodipodi:nodetypes="cccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283000000043px;font-style:normal;font-weight:normal;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="230.31464"
+       y="354.33118"
+       id="text3197"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3199"
+         x="230.31464"
+         y="354.33118"
+         style="font-size:10px;fill:#999999">Path</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283000000043px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="267.31375"
+       y="414.5675"
+       id="text3201"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3203"
+         x="267.31375"
+         y="414.5675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000">On</tspan><tspan
+         sodipodi:role="line"
+         x="267.31375"
+         y="427.0675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000"
+         id="tspan3205">Deck</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283000000043px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="352.80966"
+       y="414.5675"
+       id="text3207"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         x="352.80966"
+         y="414.5675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000"
+         id="tspan3211">Instr</tspan><tspan
+         sodipodi:role="line"
+         x="352.80966"
+         y="427.0675"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#ff0000"
+         id="tspan3215">Fifo</tspan></text>
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 252.17659,372.04723 L 252.17659,400.39368 L 280.52305,400.39368 L 294.69627,386.22046 L 280.52305,372.04723 L 252.17659,372.04723 z"
+       id="path3217" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283000000043px;font-style:normal;font-weight:normal;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="268.37222"
+       y="382.6777"
+       id="text3219"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         x="268.37222"
+         y="382.6777"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#999999"
+         id="tspan3223">Instr</tspan><tspan
+         sodipodi:role="line"
+         x="268.37222"
+         y="395.1777"
+         style="font-size:10px;text-align:center;text-anchor:middle;fill:#999999"
+         id="tspan3227">Horn</tspan></text>
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path3233"
+       sodipodi:cx="186.02362"
+       sodipodi:cy="288.77951"
+       sodipodi:rx="1.7716535"
+       sodipodi:ry="1.7716535"
+       d="M 187.79527,288.77951 A 1.7716535,1.7716535 0 1 1 184.25197,288.77951 A 1.7716535,1.7716535 0 1 1 187.79527,288.77951 z"
+       transform="translate(139.96063,81.496058)" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="449.99936"
+       y="325.98468"
+       id="text14584"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan14586"
+         x="449.99936"
+         y="325.98468"
+         style="font-size:10px;fill:#000000">Ship</tspan></text>
+    <path
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 474.80315,272.83462 L 446.45669,272.83462 L 442.91339,276.37793 L 442.91339,372.04722 L 446.45669,375.59053 L 474.80315,375.59053"
+       id="path14582" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#999999;stroke-width:2.15182613999999983;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path2454"
+       sodipodi:cx="297.63779"
+       sodipodi:cy="396.85037"
+       sodipodi:rx="7.0866141"
+       sodipodi:ry="7.0866141"
+       d="M 304.7244,396.85037 A 7.0866141,7.0866141 0 1 1 290.55117,396.85037 A 7.0866141,7.0866141 0 1 1 304.7244,396.85037 z"
+       transform="matrix(0.4647224,0,0,0.4647208,166.65546,215.96906)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Output"
+     style="display:inline">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-opacity:1"
+       d="M 212.59842,350.78738 L 198.42519,350.78738 C 198.42519,350.78738 191.33858,351.20077 191.33858,343.70077 L 191.33858,322.44092 C 191.33858,322.44092 191.39483,314.99717 184.25197,315.35431 L 155.90551,315.35431"
+       id="path3245"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow2Mstart);stroke-opacity:1;display:inline"
+       d="M 265.74803,347.24407 L 375.59056,347.24407 C 375.59056,347.24407 382.67717,347.65746 382.67717,340.15746 L 382.67717,322.44092 C 382.67717,322.44092 382.62092,314.99717 389.76378,315.35431 L 435.82677,315.35431"
+       id="path2535"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 325.98425,361.41729 C 325.98425,361.41729 325.21373,354.33068 333.07087,354.33068 L 357.87402,354.33068 C 365.01688,354.33068 364.96063,347.24407 364.96063,347.24407 L 364.96063,333.07084 C 364.96063,325.91906 357.87402,325.98423 357.87402,325.98423 L 350.7874,325.98423"
+       id="path2537"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+       d="M 155.90551,350.78738 L 170.07874,350.78738 C 177.93588,350.78738 177.16535,357.87399 177.16535,357.87399 L 177.16535,361.4173 C 177.16535,368.59578 184.25197,368.50391 184.25197,368.50391 L 325.98425,368.50391"
+       id="path2539"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 180.70866,315.35431 L 269.29134,315.35431"
+       id="path2547" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 350.7874,315.35431 L 389.76378,315.35431"
+       id="path2549" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.99999994000000003px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 351.92073,291.07138 L 351.92073,339.63727 L 292.74315,339.63727 L 269.29134,315.35431 L 292.74315,291.07138 L 351.92073,291.07138 z"
+       id="path3235"
+       sodipodi:nodetypes="cccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283000000043px;font-style:normal;font-weight:normal;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="304.72397"
+       y="318.89807"
+       id="text3237"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3239"
+         x="304.72397"
+         y="318.89807"
+         style="font-size:10px;fill:#999999">Data</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Input"
+     style="display:none">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+       d="M 212.59843,350.78738 L 155.90551,350.78738"
+       id="path3294"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 308.26772,291.59157 L 308.26772,340.15746 L 367.4453,340.15746 L 390.89711,315.8745 L 367.4453,291.59157 L 308.26772,291.59157 z"
+       id="path3270"
+       sodipodi:nodetypes="cccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:11.99998283px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="329.52707"
+       y="318.89807"
+       id="text3272"
+       transform="scale(1.0000014,0.9999986)"><tspan
+         sodipodi:role="line"
+         id="tspan3274"
+         x="329.52707"
+         y="318.89807"
+         style="font-size:10px">Data</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:none"
+       d="M 407.46063,315.21932 L 127.53937,315.21932"
+       id="path3288"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 269.29134,315.35431 C 276.44312,315.35431 276.37796,322.44092 276.37796,322.44092 L 276.37796,340.15746 C 276.37796,347.30924 269.29134,347.24407 269.29134,347.24407 L 265.74803,347.24407"
+       id="path2529"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 301.1811,354.33069 C 301.1811,354.33069 294.09449,354.38693 294.09449,347.24407 L 294.09449,336.61415 C 294.09449,329.82844 301.1811,329.52754 301.1811,329.52754 L 308.26772,329.52754"
+       id="path2531"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow2Mend);stroke-opacity:1"
+       d="M 155.90551,315.35431 L 308.26772,315.35431"
+       id="path2543" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-opacity:1"
+       d="M 389.76378,315.35431 L 439.37008,315.35431"
+       id="path2545" />
+  </g>
+</svg>