summaryrefslogtreecommitdiffstats
path: root/algorithm.tex
diff options
context:
space:
mode:
authorYann Herklotz <git@yannherklotz.com>2020-11-20 10:53:58 +0000
committerYann Herklotz <git@yannherklotz.com>2020-11-20 10:54:13 +0000
commitdc92ad7201a80a41ed032fca237dddf4f063cd36 (patch)
tree560a2c9c1640ce4f16be59a8d917aed485d2a028 /algorithm.tex
parentf8e3c21890fe9e102b1d73178b745850f2c42bfc (diff)
downloadoopsla21_fvhls-dc92ad7201a80a41ed032fca237dddf4f063cd36.tar.gz
oopsla21_fvhls-dc92ad7201a80a41ed032fca237dddf4f063cd36.zip
Add algorithm
Diffstat (limited to 'algorithm.tex')
-rw-r--r--algorithm.tex74
1 files changed, 40 insertions, 34 deletions
diff --git a/algorithm.tex b/algorithm.tex
index 3c33757..6ebbdd9 100644
--- a/algorithm.tex
+++ b/algorithm.tex
@@ -137,10 +137,10 @@ An HTL program thus consists of two maps: a control map that describes how to ca
\definecolor{control}{HTML}{b3e2cd}
\definecolor{data}{HTML}{fdcdac}
\begin{tikzpicture}
- \fill[control,fill opacity=1] (6.5,0) rectangle (12,4);
- \fill[data,fill opacity=1] (0,0) rectangle (5.5,4);
- \node at (1,3.7) {\footnotesize Data Path};
- \node at (7.5,3.7) {\footnotesize Control Logic};
+ \fill[control,fill opacity=1] (6.5,0) rectangle (12,5);
+ \fill[data,fill opacity=1] (0,0) rectangle (5.5,5);
+ \node at (1,4.7) {\footnotesize Data Path};
+ \node at (7.5,4.7) {\footnotesize Control Logic};
\fill[white,rounded corners=10pt] (7,0.5) rectangle (11.5,2.2);
\node at (8,2) {\tiny Next State FSM};
@@ -167,11 +167,12 @@ An HTL program thus consists of two maps: a control map that describes how to ca
\draw[-{Latex[length=1mm,width=0.7mm]}] (7.45,-0.5) -- (7.45,0.5);
\fill[white,rounded corners=10pt] (2,0.5) rectangle (5,3);
- \filldraw[fill=white] (0.25,0.5) rectangle (1.5,3);
+ \filldraw[fill=white] (0.25,0.5) rectangle (1.5,2.75);
\node at (2.6,2.8) {\tiny Update};
- \node at (0.875,2.8) {\tiny \texttt{RAM}};
+ \node[align=center] at (0.875,2.4) {\tiny \texttt{RAM}\\[-1.5ex]\tiny\texttt{(Array)}};
\node[scale=0.4] at (4.7,1.5) {\texttt{state}};
\draw[-{Latex[length=1mm,width=0.7mm]}] (6,1.5) -- (5,1.5);
+ \draw[-{Latex[length=1mm,width=0.7mm]}] (6,1.5) -- (7,1.5);
\node[scale=0.4,rotate=60] at (4.1,0.9) {\texttt{finished}};
\node[scale=0.4,rotate=60] at (3.9,0.95) {\texttt{return\_val}};
\node[scale=0.4,rotate=60] at (2.5,0.75) {\texttt{clk}};
@@ -182,34 +183,39 @@ An HTL program thus consists of two maps: a control map that describes how to ca
\draw[-{Latex[length=1mm,width=0.7mm]}] (2.45,-0.5) -- (2.45,0.5);
\draw[-{Latex[length=1mm,width=0.7mm]}] (2.65,-0.5) -- (2.65,0.5);
- \node[scale=0.4] at (1.2,2.2) {\texttt{wr\_en}};
- \node[scale=0.4] at (1.2,2) {\texttt{wr\_addr}};
- \node[scale=0.4] at (1.2,1.8) {\texttt{wr\_data}};
- \node[scale=0.4] at (1.2,1.4) {\texttt{r\_addr}};
- \node[scale=0.4] at (1.2,1.2) {\texttt{r\_data}};
-
- \node[scale=0.4] at (2.3,2.2) {\texttt{wr\_en}};
- \node[scale=0.4] at (2.3,2) {\texttt{wr\_addr}};
- \node[scale=0.4] at (2.3,1.8) {\texttt{wr\_data}};
- \node[scale=0.4] at (2.3,1.4) {\texttt{r\_addr}};
- \node[scale=0.4] at (2.3,1.2) {\texttt{r\_data}};
-
- \draw[-{Latex[length=1mm,width=0.7mm]}] (2,2.2) -- (1.5,2.2);
- \draw[-{Latex[length=1mm,width=0.7mm]}] (2,2) -- (1.5,2);
- \draw[-{Latex[length=1mm,width=0.7mm]}] (2,1.8) -- (1.5,1.8);
- \draw[-{Latex[length=1mm,width=0.7mm]}] (2,1.4) -- (1.5,1.4);
- \draw[-{Latex[length=1mm,width=0.7mm]}] (1.5,1.2) -- (2,1.2);
-
- %\filldraw[fill=white] (2.8,3.25) rectangle (4.2,4.75);
- %\node at (3.5,4.55) {\tiny \texttt{Registers}};
- %\draw[-{Latex[length=1mm,width=0.7mm]}] (2,2.4) -| (1.75,4) -- (2.8,4);
- %\draw[-{Latex[length=1mm,width=0.7mm]}] (4.2,4) -- (5.25,4) |- (5,2.4);
-
- %\node[scale=0.4] at (3.5,4.2) {\texttt{reg\_1}};
- %\node[scale=0.4] at (3.5,4) {\texttt{reg\_2}};
- %\node[scale=0.4] at (3.5,3.8) {\texttt{reg\_3}};
- %\node[scale=0.4] at (3.5,3.6) {$\cdots$};
- %\node[scale=0.4] at (3.5,3.4) {\texttt{reg\_8}};
+ \foreach \x in {0,...,2}
+ {\draw (0.25,1.25-0.25*\x) -- (1.5,1.25-0.25*\x); \node at (0.875,1.13-0.25*\x) {\tiny \x}}
+ \draw[-{Latex[length=1mm,width=0.7mm]}] (1.5,1.5) -- (2,1.5);
+ \draw[-{Latex[length=1mm,width=0.7mm]}] (2,1.75) -- (1.5,1.75);
+
+ %\node[scale=0.4] at (1.2,2.2) {\texttt{wr\_en}};
+ %\node[scale=0.4] at (1.2,2) {\texttt{wr\_addr}};
+ %\node[scale=0.4] at (1.2,1.8) {\texttt{wr\_data}};
+ %\node[scale=0.4] at (1.2,1.4) {\texttt{r\_addr}};
+ %\node[scale=0.4] at (1.2,1.2) {\texttt{r\_data}};
+ %
+ %\node[scale=0.4] at (2.3,2.2) {\texttt{wr\_en}};
+ %\node[scale=0.4] at (2.3,2) {\texttt{wr\_addr}};
+ %\node[scale=0.4] at (2.3,1.8) {\texttt{wr\_data}};
+ %\node[scale=0.4] at (2.3,1.4) {\texttt{r\_addr}};
+ %\node[scale=0.4] at (2.3,1.2) {\texttt{r\_data}};
+ %
+ %\draw[-{Latex[length=1mm,width=0.7mm]}] (2,2.2) -- (1.5,2.2);
+ %\draw[-{Latex[length=1mm,width=0.7mm]}] (2,2) -- (1.5,2);
+ %\draw[-{Latex[length=1mm,width=0.7mm]}] (2,1.8) -- (1.5,1.8);
+ %\draw[-{Latex[length=1mm,width=0.7mm]}] (2,1.4) -- (1.5,1.4);
+ %\draw[-{Latex[length=1mm,width=0.7mm]}] (1.5,1.2) -- (2,1.2);
+
+ \filldraw[fill=white] (2.8,3.25) rectangle (4.2,4.75);
+ \node at (3.5,4.55) {\tiny \texttt{Registers}};
+ \draw[-{Latex[length=1mm,width=0.7mm]}] (2,2.4) -| (1.75,4) -- (2.8,4);
+ \draw[-{Latex[length=1mm,width=0.7mm]}] (4.2,4) -- (5.25,4) |- (5,2.4);
+
+ \node[scale=0.4] at (3.5,4.2) {\texttt{reg\_1}};
+ \node[scale=0.4] at (3.5,4) {\texttt{reg\_2}};
+ \node[scale=0.4] at (3.5,3.8) {\texttt{reg\_3}};
+ \node[scale=0.4] at (3.5,3.6) {$\cdots$};
+ \node[scale=0.4] at (3.5,3.4) {\texttt{reg\_8}};
\end{tikzpicture}
\caption{The FSMD for our running example.\YH{Removed the register block because these are technically just internal to the update function. Also not sure if we should keep the RAM block because it is a bit misleading as we don't use those signals to communicate with the RAM, instead we just use a RAM.}}\label{fig:accumulator_diagram}
%\JW{Maybe replace `State' with `Current State'? And maybe `Calculate State' could be clearer as `Calculate Next State'?} \JW{Can state 15 (or should it be state 16??) have a dangling incoming arrow to indicate that it is the start state? And perhaps state 1 could have a double outline to indicate that it is an `accepting' state? Since there's space above the `Calculate State' box, I'd be mildly in favour of expanding that box a bit so that it included all 15 states explicitly (snaking back and forth).}\YH{If this is better I can mock up a tikz version of it maybe and fix the last bits then too.}