summaryrefslogtreecommitdiffstats
path: root/verilog.tex
diff options
context:
space:
mode:
authorYann Herklotz <git@yannherklotz.com>2020-11-05 07:54:05 +0000
committerYann Herklotz <git@yannherklotz.com>2020-11-05 07:54:05 +0000
commita957e96a7d2bd571d6e8caa2809402e5f06398c1 (patch)
treee199d10d0aeca432f81d51ce5f8b7fdce5b0a32e /verilog.tex
parent8210e4f2d94568c9c04f1b2480741196a48117fc (diff)
downloadoopsla21_fvhls-a957e96a7d2bd571d6e8caa2809402e5f06398c1.tar.gz
oopsla21_fvhls-a957e96a7d2bd571d6e8caa2809402e5f06398c1.zip
Add more to verilog section
Diffstat (limited to 'verilog.tex')
-rw-r--r--verilog.tex6
1 files changed, 5 insertions, 1 deletions
diff --git a/verilog.tex b/verilog.tex
index c100c8b..de361eb 100644
--- a/verilog.tex
+++ b/verilog.tex
@@ -1,5 +1,7 @@
\section{Verilog}
+This section describes the Verilog semantics that were chosen for the target language, including the changes that were made to the semantics to be a better fit for
+
Verilog is a hardware description language commonly used to design hardware. A Verilog design can then be synthesised into logic gates which describes how different gates connect to each other, called a netlist. This representation can then be mapped onto either a field-programmable gate array (FPGA) or turned into an application-specific integrated circuit (ASIC) to implement the design that was described in Verilog. The Verilog standard is quite large though, and not all Verilog features are needed to be able to describe hardware. Many Verilog features are only useful for simulation and do not affect the actual hardware itself, we can therefore restrict the Verilog semantics to the synthesisable subset of Verilog~\cite{05_veril_regis_trans_level_synth}. In addition to that, HLS dictates which Verilog constructs are generated, meaning the Verilog subset that has to be modelled by the semantics can be reduced even further to only support the constructs that are needed. Supporting a smaller subset in the semantics also means that there is less chance that the standard is misunderstood, and that the semantics actually model how the Verilog is simulated and synthesised by existing tools and how it is dictated by the standard.
%~\NR{Didn't get this sentence? Do you mean that the HLS algo further restricts the synthesisable subset?}\YH{Yes basically, because we get to choose what we generate. For example, we don't have to support combinational always blocks.}
%\NR{What is the distinction here between the semantics and simulation? Discuss.}\YH{Tried to clarify that I meant simulation and synthesis by tools and how it should be understood from the standard}
@@ -27,7 +29,9 @@ The Verilog semantics are based on the semantics proposed by \citet{loow19_verif
\caption{Verilog syntax for values $v$, expressions $e$, statements $s$ and module items $m$.}\label{fig:verilog_syntax}
\end{figure}
-The semantics of Verilog differ from regular programming languages, as it is used to describe hardware directly, which is inherently parallel, instead of describing an algorithm, which is often done sequentially. The main construct in Verilog is the always block, which
+The semantics of Verilog differ from regular programming languages, as it is used to describe hardware directly, which is inherently parallel, instead of describing an algorithm, which is often done sequentially. The main construct in Verilog is the always block, which is construct that contains statements. A module can contain multiple always blocks, which all run in parallel. Each always block also contains a list of events at which it should trigger, which could either contain signals that are assigned to other signals in that always block, or a different signal such as a clock which will trigger the always b lock periodically. Two types of assignments are also supported in always blocks: nonblocking and blocking assignment. Nonblocking assignment modifies the signal at the end of the timestep, and atomically, meaning a swap operation can be implement without a temporary variable. Blocking assignment, on the other hand, assigns the variable directly in the always block for later signals to pick up.
+
+
\subsection{Changes to the Semantics}