\sectionright{\sffamily Introduction}
At the time of this package's creation, no easy-to-use TikZ package existed for generating high-quality, publication-ready RTL diagrams. While RTL diagrams can certainly be drawn using standard TikZ or \texttt{circuitikz} elements, anyone who has attempted this can confirm that it is a tedious and highly inconvenient process.

During the preparation of a publication, I needed to draw an extensive RTL diagram of a complete DSP architecture. This necessity led to the creation of \texttt{register-transfer-level}. With \texttt{register-transfer-level}, creating modern, accurate, and high-quality RTL diagrams is done in the blink of an eye!

This package is intended primarily for FPGA engineers (I feel your pain!), ASIC designers, researchers, students, and basically anyone dealing with digital hardware visualization.
In this documentation the elements of \texttt{register-transfer-level} and their usage are presented.

register-transfer-level offers:
\begin{itemize}
	\item \textbf{Publication-Ready Aesthetics:}
	      Designed to mimic the clean, authoritative look of classic VLSI / digital design / computer architecture text books. It features subtle grouping colors, drop shadows for multi-instance blocks, and crisp orthogonal routing, while minimizing the amount code.
	\item \textbf{Parametric Components:}
	      Multiplexers can be inferred automatically; the geometry is handled by the package.
	\item \textbf{Smart Bus Routing:}
	      The Anchor points of the elements are preserved for easier signal / bus routing. Buses can also be created automatically.
	\item \textbf{Hardware Semantics:}
	      Includes standard representations for D-Flip-Flops (with clock/enable pins), Tri-State Buffers, ALUs, Shift Registers, and Register Files to name a few.
\end{itemize}

register-transfer-level has been successfully battle-tested in rigorous, multi-round peer-review environments (e.g., IEEE Transactions on Industrial Electronics). It is specifically optimized to:
\begin{itemize}
	\item Unambiguously demonstrate the separation of data path and control logic.
	\item Satisfy even the most highly specific demands for hardware critical path visualization.
	\item Overwhelm any doubts regarding your architectural competence.
\end{itemize}

Please consider this package an open invitation to share your suggestions, feature requests, and feedback. \texttt{register-transfer-level} is intended to be a community-driven, continuously evolving tool dedicated to raising the standard of digital design visualization.

\textit{Disclaimer: While \texttt{register-transfer-level} guarantees pristine hardware diagrams, it unfortunately cannot protect you from reviewers nitpicking your textual formulations.}

\subsection{Common Attributes and Sizing}

To ensure visual consistency across complex RTL diagrams, \texttt{register-transfer-level} provides a unified set of sizing attributes. While standard TikZ parameters remain functional, using the dedicated \texttt{rtl\_*} keys is highly recommended to maintain a clean and semantic naming scheme throughout your source code.

\subsubsection{Global Dimension Keys}
The following attributes allow for precise control over the geometric properties of RTL elements:

\begin{itemize}
	\item \textbf{\texttt{rtl\_width / rtl\_height}}: Overrides the default dimensions for rectangular blocks like registers (\texttt{rtl\_reg}) and custom modules.
	\item \textbf{\texttt{rtl\_mux\_width / rtl\_mux\_height}}: Tailored specifically for the trapezoidal geometry of Multiplexers and Demultiplexers.
	\item \textbf{\texttt{rtl\_size}}: Defines the diameter for circular arithmetical operators (e.g., adders or multipliers).
\end{itemize}

\subsubsection{The Anchor Convention}
Connectivity is the backbone of any RTL diagram. \texttt{register-transfer-level} follows a predictable, hyphenated naming convention to make signal routing intuitive:

\begin{center}
	\texttt{\{node\_name\}\textcolor{red}{-}\{anchor\_identifier\}}
\end{center}

For instance, a register named \texttt{RegA} provides anchors such as \texttt{RegA-CLK} or \texttt{RegA-D}. This systematic approach ensures that you spend less time looking up documentation and more time routing your data path.

