\chapter{Evaluation of other OSS Verilog Synthesis Tools} \label{chapter:sota} In this appendix\footnote{This appendix is an updated version of an unpublished student research paper. \cite{VerilogFossEval}} the existing FOSS Verilog synthesis tools\footnote{To the author's best knowledge, all relevant tools that existed at the time of this writing are included. But as there is no formal channel through which such tools are published it is hard to give any guarantees in that matter.} are evaluated. Extremely limited or application specific tools (e.g.~pure Verilog Netlist parsers) as well as Verilog simulators are not included. These existing solutions are tested using a set of representative Verilog code snippets. It is shown that no existing FOSS tool implements even close to a sufficient subset of Verilog to be usable as synthesis tool for a wide range existing Verilog code. The packages evaluated are: \begin{itemize} \item Icarus Verilog \citeweblink{Icarus}\footnote{Icarus Verilog is mainly a simulation tool but also supported synthesis up to version 0.8. Therefore version 0.8.7 is used for this evaluation.)} \item Verilog-to-Routing (VTR) / Odin-II \cite{vtr2012}\cite{Odin}\citeweblink{VTR} \item HDL Analyzer and Netlist Architect (HANA) \citeweblink{HANA} \item Verilog front-end to VIS (vl2mv) \cite{Cheng93vl2mv:a}\citeweblink{VIS} \end{itemize} In each of the following sections Verilog modules that test a certain Verilog language feature are presented and the support for these features is tested in all the tools mentioned above. It is evaluated whether the tools under test successfully generate netlists for the Verilog input and whether these netlists match the simulation behavior of the designs using testbenches. All test cases are verified to be synthesizeable using Xilinx XST from the Xilinx WebPACK \citeweblink{XilinxWebPACK} suite. Trivial features such as support for simple structural Verilog are not explicitly tested. Vl2mv and Odin-II generate output in the BLIF (Berkeley Logic Interchange Format) and BLIF-MV (an extended version of BLIF) formats respectively. ABC \citeweblink{ABC} is used to convert this output to Verilog for verification using testbenches. Icarus Verilog generates EDIF (Electronic Design Interchange Format) output utilizing LPM (Library of Parameterized Modules) cells. The EDIF files are converted to Verilog using edif2ngd and netgen from Xilinx WebPACK. A hand-written implementation of the LPM cells utilized by the generated netlists is used for verification. Following these functional tests, a quick analysis of the extensibility of the tools under test is provided in a separate section. The last section of this chapter finally concludes these series of evaluations with a summary of the results. \begin{figure}[t!] \begin{minipage}{7.7cm} \lstinputlisting[numbers=left,frame=single,language=Verilog]{CHAPTER_StateOfTheArt/always01_pub.v} \end{minipage} \hfill \begin{minipage}{7.7cm} \lstinputlisting[frame=single,language=Verilog]{CHAPTER_StateOfTheArt/always02_pub.v} \end{minipage} \caption{1st and 2nd Verilog always examples} \label{fig:StateOfTheArt_always12} \end{figure} \begin{figure}[!] \lstinputlisting[numbers=left,frame=single,language=Verilog]{CHAPTER_StateOfTheArt/always03.v} \caption{3rd Verilog always example} \label{fig:StateOfTheArt_always3} \end{figure} \section{Always blocks and blocking vs.~nonblocking assignments} \label{sec:blocking_nonblocking} The ``alw