diff options
author | Yann Herklotz <git@yannherklotz.com> | 2021-08-05 10:40:32 +0200 |
---|---|---|
committer | Yann Herklotz <git@yannherklotz.com> | 2021-08-05 10:40:32 +0200 |
commit | 915879bab3498b817f26a5389898330c12b98417 (patch) | |
tree | bda10c828da7b06d1e4d874b38865cc05d36543f /algorithm.tex | |
parent | 21ac05b88ce75549a76b92cf3343f39d64d9548a (diff) | |
download | oopsla21_fvhls-915879bab3498b817f26a5389898330c12b98417.tar.gz oopsla21_fvhls-915879bab3498b817f26a5389898330c12b98417.zip |
Fix compilation
Diffstat (limited to 'algorithm.tex')
-rw-r--r-- | algorithm.tex | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/algorithm.tex b/algorithm.tex index 71add1f..737031b 100644 --- a/algorithm.tex +++ b/algorithm.tex @@ -63,7 +63,8 @@ The .NET framework has been used as a basis for other HLS tools, such as Kiwi~\c \draw[->,thick] (htl.west) to [out=180,in=150] (4,-2.2) to [out=330,in=270] (htl.south); \end{tikzpicture}%} \caption{\vericert{} as a Verilog back end to \compcert{}. -%\JW{Did we ought to add CompCert's other back ends to the diagram? X86 etc? Otherwise it might look like we have a very out-of-date view of CompCert.}}% +%\JW{Did we ought to add CompCert's other back ends to the diagram? X86 etc? Otherwise it might look like we have a very out-of-date view of CompCert.}% +}% \label{fig:rtlbranch} \end{figure} @@ -307,10 +308,10 @@ A high-level overview of the architecture and of the RAM interface can be seen i \paragraph{Translating instructions} -\JW{Most 3AC instructions correspond to hardware constructs.} +Most 3AC instructions correspond to hardware constructs. %Each 3AC instruction either corresponds to a hardware construct or does not have to be handled by the translation, such as function calls (because of inlining). \JW{Are function calls the only 3AC instruction that we ignore? (And I guess return statements too for the same reason.)}\YH{Actually, return instructions are translated (because you can return from main whenever), so call instructions (Icall, Ibuiltin and Itailcall) are the only functions that are not handled.} % JW: Thanks; please check proposed new text. -For example, line 2 in Figure~\ref{fig:accumulator_rtl} shows a 32-bit register \texttt{x5} being initialised to 3, after which the control flow moves execution to line 3. This initialisation is also encoded in the Verilog generated from HTL at state 8 in both the control logic and data-path always-blocks, shown in Figure~\ref{fig:accumulator_v}. Simple operator instructions are translated in a similar way. For example, the add instruction is just translated to the built-in add operator, similarly for the multiply operator. All 32-bit instructions can be translated in this way, but some special instructions require extra care. One such is the \texttt{Oshrximm} instruction, which is discussed further in Section~\ref{sec:algorithm:optimisation:oshrximm}. Another is the \texttt{Oshldimm} instruction, which is a left rotate instruction that has no Verilog equivalent and therefore has to be implemented in terms of other operations and proven to be equivalent. \JW{The only 32-bit instructions that we do not translate are those related to function calls (\texttt{Icall}, \texttt{Ibuiltin}, and \texttt{Itailcall}), because of inlining.} +For example, line 2 in Figure~\ref{fig:accumulator_rtl} shows a 32-bit register \texttt{x5} being initialised to 3, after which the control flow moves execution to line 3. This initialisation is also encoded in the Verilog generated from HTL at state 8 in both the control logic and data-path always-blocks, shown in Figure~\ref{fig:accumulator_v}. Simple operator instructions are translated in a similar way. For example, the add instruction is just translated to the built-in add operator, similarly for the multiply operator. All 32-bit instructions can be translated in this way, but some special instructions require extra care. One such is the \texttt{Oshrximm} instruction, which is discussed further in Section~\ref{sec:algorithm:optimisation:oshrximm}. Another is the \texttt{Oshldimm} instruction, which is a left rotate instruction that has no Verilog equivalent and therefore has to be implemented in terms of other operations and proven to be equivalent. The only 32-bit instructions that we do not translate are those related to function calls (\texttt{Icall}, \texttt{Ibuiltin}, and \texttt{Itailcall}), because of inlining. \subsubsection{Translating HTL to Verilog} |