27-aug update
[fleet.git] / am33.tex
index ce927e6..0486704 100644 (file)
--- a/am33.tex
+++ b/am33.tex
@@ -37,7 +37,7 @@
 %\pdfpagewidth 8.5in
 %\pdfpageheight 11in 
 %\topmargin 0in
-%\textheight 7.5in
+\textheight 7.9in
 %\textwidth 6.0in
 %\oddsidemargin 0.25in
 %\evensidemargin 0.25in
@@ -66,9 +66,22 @@ Adam Megacz
 Changes:
 
 \begin{tabular}{rl}
-\color{red} 
+27-Aug
+& \color{red} Note that decision to requeue is based on  value of OLC {\it before} execution\\
+10-Jul
+& Added {\tt OLC=0} predicate \\
+& Eliminated {\tt TAPL} (made possible by previous change) \\
+& Expanded {\tt set} {\tt Immediate} field from 13 bits to 14 bits (made possible by previous change)\\
+09-Jul
+& Fixed a few typos \\
+& Added {\tt DataLatch}\to{\tt TAPL} (Amir's request) \\
+& Eliminate ability to predicate directly on {\tt C}-flag (Ivan's request) \\
+16-Jun
+& When a torpedo strikes, {\tt ILC} is set to {\tt 1} \\
+& Only {\tt move} can be torpedoed (removed {\tt I}-bit from {\tt set}/{\tt shift}) \\
 11-Jun
-& \color{red}  XXX \\
+& Changed all uses of ``Payload'' to ``Immediate'' \color{black} (not in red) \\
+& Reworked encoding of {\tt set} instruction \\
 \color{black} 
 06-Jun
 & Factored in Russell Kao's comments (thanks!)\\
@@ -86,16 +99,16 @@ Changes:
 23-Apr
 & added epilogue fifo to diagrams \\
 & indicated that a token sent to the instruction port is treated as a torpedo \\
-18-Apr
-& replaced {\tt setInner}, {\tt setOuter}, {\tt setFlags} with unified {\tt set} instruction \\
-& replaced {\tt literal} with {\tt shift} instruction \\
-17-Apr
-& Made all instructions except {\tt setOuter} depend on {\tt OLC>0}  \\
-& Removed ability to manually set the {\tt C} flag  \\
-& Expanded predicate field to three bits \\
-& New literals scheme (via shifting) \\
-& Instruction encoding changes made at Ivan's request (for layout purposes) \\
-& Added summary of instruction encodings on last page \\
+%18-Apr
+%& replaced {\tt setInner}, {\tt setOuter}, {\tt setFlags} with unified {\tt set} instruction \\
+%& replaced {\tt literal} with {\tt shift} instruction \\
+%17-Apr
+%& Made all instructions except {\tt setOuter} depend on {\tt OLC>0}  \\
+%& Removed ability to manually set the {\tt C} flag  \\
+%& Expanded predicate field to three bits \\
+%& New literals scheme (via shifting) \\
+%& Instruction encoding changes made at Ivan's request (for layout purposes) \\
+%& Added summary of instruction encodings on last page \\
 %07-Apr
 %& removed ``+'' from ``potentially torpedoable'' row where it does not occur in Execute  \\
 %06-Apr
@@ -176,8 +189,8 @@ are known as {\it tokens}, and consume less energy than data packets.
 
 \begin{center}
 \epsfig{file=overview-new,width=2.5in}\\
-{\it Overview of a Fleet processor; gray shading represents the switch
-  fabric; docks are shown in blue.}
+{\it Overview of a Fleet processor; dark gray shading represents the
+  switch fabric, ships are shown in light gray, and docks are shown in blue.}
 \end{center}
 \color{black}
 
@@ -274,11 +287,6 @@ A token sent to an instruction destination is called a {\it torpedo}.
 When a torpedo arrives at the tail of {\tt EF}, it is deposited in a
 waiting area (not shown) rather than being enqueued into {\tt EF}.
 
-There is a latch (not shown) called the {\it torpedo acknowledgment path
-  latch} ({\tt TAPL}) which stores a path.  When a torpedo is consumed
-(see section ``On Deck''), a token is sent along the path held in this
-latch.
-
 \subsection{Format of an Instruction}
 
 All instruction words have the following format:
@@ -288,6 +296,11 @@ All instruction words have the following format:
   \bitbox{1}{OS}
   \bitbox{3}{P} 
 }
+\newcommand{\bitsHeaderNoI}{
+  \bitbox{1}{} 
+  \bitbox{1}{OS}
+  \bitbox{3}{P} 
+}
 
 \setlength{\bitwidth}{3.5mm}
 {\tt \footnotesize
@@ -303,7 +316,7 @@ All instruction words have the following format:
 
 \begin{itemize}
 \item The {\tt I} bit stands for {\tt Interruptible}, and indicates if an
-instruction is vulnerable to torpedoes.
+instruction is vulnerable to torpedoes.  This bit only appears in {\tt move} instructions.
 
 \item The {\tt OS} (``One Shot'') bit indicates whether or not this
   instruction can pass through the pump more than once.  If set to
@@ -382,8 +395,8 @@ Code       & Execute & if \\\hline
 {\tt 001:} & {\tt OLC$\neq$0} & and {\tt A=1} \\
 {\tt 010:} & {\tt OLC$\neq$0} & and {\tt B=0} \\
 {\tt 011:} & {\tt OLC$\neq$0} & and {\tt B=1} \\
-{\tt 100:} & {\tt OLC$\neq$0} & and {\tt C=0} \\
-{\tt 101:} & {\tt OLC$\neq$0} & and {\tt C=1} \\
+{\tt 100:} & Unused & \\
+{\tt 101:} & {\tt OLC=0} & \\
 {\tt 110:} & {\tt OLC$\neq$0} & \\
 {\tt 111:} & always & \\
 \hline\end{tabular}
@@ -400,9 +413,10 @@ processes have completed:
 
 \item Requeueing:
       \begin{itemize}
-      \item If the outer loop counter is zero ({\tt OLC=0}) or the
-            instruction on deck is a one-shot instruction ({\tt
-            OS=1}), do nothing.
+      \item If the outer loop counter is zero ({\tt OLC=0})
+            \color{red}{\it before executing the
+            instruction}\color{black}\ or the instruction on deck is a
+            one-shot instruction ({\tt OS=1}), do nothing.
       \item {\it Otherwise} wait for the hatch to be sealed and
             enqueue a copy of the instruction currently on deck.
       \end{itemize}
@@ -418,8 +432,8 @@ processes have completed:
       {\it Otherwise} if the instruction is interruptible ({\tt I=0})
       and a torpedo is present in the waiting area: consume the
       torpedo, set the outer loop counter to zero ({\tt OLC=0}),
-      unseal the hatch, and transmit a token along in the
-      {\it torpedo acknowledgment path latch} ({\tt TAPL}).
+      set the inner loop counter to one ({\tt ILC=1}), 
+      unseal the hatch.
 
       \item
       {\it Otherwise} if {\tt ILC$\neq$0} or the instruction is {\it
@@ -434,7 +448,7 @@ processes have completed:
 \pagebreak
 \section{Instructions}
 
-The dock supports for instructions:
+The dock supports four instructions:
 {\tt move} (variants: {\tt moveto}, {\tt dispatch}),
 {\tt shift},
 {\tt set}, and
@@ -463,10 +477,10 @@ The dock supports for instructions:
 
 \begin{bytefield}{26}
   \bitheader[b]{0,12,13}\\
-  \bitbox[1]{11}{\raggedleft {\tt moveto} ({\tt Payload\to Path})}
+  \bitbox[1]{11}{\raggedleft {\tt moveto} ({\tt Immediate\to Path})}
   \bitbox[r]{1}{}
   \bitbox{1}{\tt 1}
-  \bitbox{13}{\tt Payload}
+  \bitbox{13}{\tt Immediate}
 \end{bytefield}
 
 \begin{bytefield}{26}
@@ -529,38 +543,109 @@ counter, outer loop counter, and data latch.
 \setlength{\bitwidth}{5mm}
 {\tt
 \begin{bytefield}{26}
-  \bitheader[b]{0,13-15,16-20}\\
-\color{light}
-  \bitsHeader
-\color{black}
+  \bitheader[b]{19-25}\\
+  \bitsHeaderNoI
   \bitbox{1}{1}
   \bitbox{1}{0} 
-  \bitbox{2}{SRC}
-  \bitbox{3}{DST}
-  \bitbox{14}{Payload} 
+\color{light}
+  \bitbox{5}{Dest} 
+  \bitbox{14}{} 
 \color{black}
 \end{bytefield}}
+
+\begin{bytefield}{26}
+  \bitheader[b]{0,5,12-18}\\
+  \bitbox[1]{6}{\raggedleft {\tt Immediate}\to{\tt OLC}}
+  \bitbox[r]{1}{}
+  \bitbox{4}{\tt 1000\color{black}}
+  \bitbox{3}{\tt 100}
+  \bitbox{6}{}
+  \bitbox{6}{\tt Immediate}
+\end{bytefield}
+
+\begin{bytefield}{26}
+  \bitheader[b]{12-18}\\
+  \bitbox[1]{6}{\raggedleft {\tt Data Latch}\to{\tt OLC}}
+  \bitbox[r]{1}{}
+  \bitbox{4}{\tt 1000\color{black}}
+  \bitbox{3}{\tt 010}
+  \bitbox{12}{}
+\end{bytefield}
+
+\begin{bytefield}{26}
+  \bitheader[b]{12-18}\\
+  \bitbox[1]{6}{\raggedleft {\tt OLC-1}\to{\tt OLC}}
+  \bitbox[r]{1}{}
+  \bitbox{4}{\tt 1000\color{black}}
+  \bitbox{3}{\tt 001}
+  \bitbox{12}{}
+\end{bytefield}
+
+\begin{bytefield}{26}
+  \bitheader[b]{0,5,6,12-18}\\
+  \bitbox[1]{6}{\raggedleft {\tt Immediate}\to{\tt ILC}}
+  \bitbox[r]{1}{}
+  \bitbox{4}{\tt 0100\color{black}}
+  \bitbox{3}{\tt 100}
+  \bitbox{5}{}
+  \bitbox{1}{\tt 0}
+  \bitbox{6}{\tt Immediate}
+\end{bytefield}
+
+\begin{bytefield}{26}
+  \bitheader[b]{6,12-18}\\
+  \bitbox[1]{6}{\raggedleft $\infty$\to{\tt ILC}}
+  \bitbox[r]{1}{}
+  \bitbox{4}{\tt 0100\color{black}}
+  \bitbox{3}{\tt 100}
+  \bitbox{5}{}
+  \bitbox{1}{\tt 1}
+  \bitbox{6}{}
+\end{bytefield}
+
+\begin{bytefield}{26}
+  \bitheader[b]{12-18}\\
+  \bitbox[1]{6}{\raggedleft {\tt Data Latch}\to{\tt ILC}}
+  \bitbox[r]{1}{}
+  \bitbox{4}{\tt 0100\color{black}}
+  \bitbox{3}{\tt 010}
+  \bitbox{12}{}
+\end{bytefield}
+
+\begin{bytefield}{26}
+  \bitheader[b]{0,13-18}\\
+  \bitbox[1]{6}{\raggedleft \footnotesize {\tt 0-Extended Immediate}\to{\tt Data Latch}}
+  \bitbox[r]{1}{}
+  \bitbox{4}{\tt 0010\color{black}}
+  \bitbox{1}{\tt 0}
+  \bitbox{14}{\tt Immediate}
+\end{bytefield}
+
+\begin{bytefield}{26}
+  \bitheader[b]{0,13-18}\\
+  \bitbox[1]{6}{\raggedleft \footnotesize {\tt 1-Extended Immediate}\to{\tt Data Latch}}
+  \bitbox[r]{1}{}
+  \bitbox{4}{\tt 0010\color{black}}
+  \bitbox{1}{\tt 1}
+  \bitbox{14}{\tt Immediate}
+\end{bytefield}
+
+\begin{bytefield}{26}
+  \bitheader[b]{0,5,6,11,15-18}\\
+  \bitbox[1]{6}{\raggedleft {\tt Update Flags}}
+  \bitbox[r]{1}{}
+  \bitbox{4}{\tt 0001\color{black}}
+  \bitbox{3}{}
+  \bitbox{6}{\tt nextA}
+  \bitbox{6}{\tt nextB}
+\end{bytefield}
+
+
+\color{black}
+
 }
 \bitsSet
 
-\begin{center}{\tt
-\begin{tabular}{|r|r|l|l|}\hline
-Source & SRC & DST & Destination \\\hline
-\hline
-Payload            & 00 & 000 & OLC \\
-Data Latch         & 01 & 000 & OLC \\
-OLC-1              & 10 & 000 & OLC \\
-Payload            & 00 & 001 & ILC \\
-Data Latch         & 01 & 001 & ILC \\
-$\infty$           & 10 & 001 & ILC \\
-Payload            & 00 & 010 & TAPL \\
-Payload, 0-extend  & 01 & 100 & Data Latch \\
-Payload, 1-extend  & 10 & 100 & Data Latch \\
-       see below   &    & 111 & Flags \\
-\hline
-\end{tabular}
-}\end{center}
-
 The FleetTwo implementation is likely to have an unarchitected
 ``literal latch'' at the on deck ({\tt OD}) stage, which is loaded
 with the possibly-extended literal {\it at the time that the {\tt set}
@@ -568,34 +653,9 @@ with the possibly-extended literal {\it at the time that the {\tt set}
 latch when a {\tt set Data Latch} instruction
 executes\color{black}.
 
-If the {\tt Dest} field is {\tt flags}, the {\tt Payload} field is
-interpreted as two fields, each giving the truth table for the new
-value of one of the two user-settable flags:
-
-\begin{center}
-\setlength{\bitwidth}{5mm}
-{\tt
-\begin{bytefield}{26}
-  \bitheader[b]{0,5,6,11}\\
-\color{light}
-  \bitsHeader
-  \bitbox{1}{1}
-  \bitbox{1}{0} 
-\color{light}
-  \bitbox{2}{}
-\color{black}
-  \bitbox{3}{111}
-\color{light}
-  \bitbox{2}{}
-\color{black}
-  \bitbox{6}{nextA}
-  \bitbox{6}{nextB}
-\end{bytefield}}
-\end{center}
-\color{black}
-Each field has the following structure, and indicates which old flag
-values should be logically {\tt OR}ed together to produce the new flag
-value:
+Each of the {\tt nextA} and {\tt nextB} fields has the following
+structure, and indicates which old flag values should be logically
+{\tt OR}ed together to produce the new flag value:
 
 \begin{center}
 {\tt
@@ -623,15 +683,15 @@ be used to create a {\tt nop} (no-op) by setting each flag to itself.
 \pagebreak
 \subsection{{\tt shift}}
 
-\newcommand{\shiftPayloadSize}{19}
+\newcommand{\shiftImmediateSize}{19}
 
-Each {\tt shift} instruction carries a payload of \shiftPayloadSize\ 
-bits.  When a {\tt shift} instruction is executed, this payload is copied
-into the least significant \shiftPayloadSize\  bits of the data latch,
+Each {\tt shift} instruction carries an immediate of \shiftImmediateSize\ 
+bits.  When a {\tt shift} instruction is executed, this immediate is copied
+into the least significant \shiftImmediateSize\  bits of the data latch,
 and the remaining most significant bits of the data latch are loaded
 with the value formerly in the least significant bits of the data latch.
 In this manner, large literals can be built up by ``shifting'' them
-into the data latch \shiftPayloadSize\ bits at a time.
+into the data latch \shiftImmediateSize\ bits at a time.
 
 \newcommand{\bitsShift}{
 \setlength{\bitwidth}{5mm}
@@ -639,12 +699,12 @@ into the data latch \shiftPayloadSize\ bits at a time.
 \begin{bytefield}{26}
   \bitheader[b]{0,18-20}\\
 \color{light}
-  \bitsHeader
+  \bitsHeaderNoI
 \color{black}
   \bitbox{1}{0} 
   \bitbox{1}{0} 
 \color{black}
-  \bitbox{\shiftPayloadSize}{Payload} 
+  \bitbox{\shiftImmediateSize}{Immediate} 
 \end{bytefield}}
 }
 \bitsShift