\documentclass{manual}
\usepackage{palatino}
\renewcommand{\ttdefault}{cmtt}
\renewcommand{\sfdefault}{cmss}
\newcommand{\myhdl}{\protect \mbox{MyHDL}}
\usepackage{graphicx}

\title{The \myhdl\ manual}

\input{boilerplate}

\makeindex

\begin{document}

\maketitle

\input{copyright}

\begin{abstract}

\noindent

\myhdl{} is a Python package for using Python as a hardware description
and verification language. Languages such Verilog and VHDL are
compiled languages. Python with \myhdl{} can be viewed as a "scripting
language" counterpart of such languages. However, Python is more
accurately described as a very high level language (VHLL). \myhdl{} users
have access to the amazing power and elegance of Python.

The key idea behind \myhdl{} is to use Python generators for modeling
hardware concurrency. A generator is a resumable function with
internal state. In \myhdl{}, a hardware module is modeled as a function
that returns generators. With this approach, \myhdl{} directly supports
features such as named port association, arrays of instances, and
conditional instantiation. 

\myhdl{} supports the classic hardware description concepts.  It
provides a signal class similar to the VHDL signal, a class for bit
oriented operations, and support for enumeration types.  The Python
\code{yield} statement is used as a general sensitivity list to wait
on a signal change, an edge, a delay, or on the completion of another
generator. \myhdl{} supports waveform viewing by tracing signal
changes in a VCD file.

Python's rare combination of power and clarity makes it ideal for high
level modeling.  It can be expected that \myhdl{} users will often
have the ``Pythonic experience'' of finding an elegant solution to a
complex modeling problem. Moreover, Python is outstanding for rapid
application development and experimentation.

With \myhdl{}, the Python unit test framework can be used on hardware
designs.  \myhdl{} can also be used as hardware verification language for
VHDL and Verilog designs, by co-simulation with any simulator that has
a PLI.  The distribution contains a PLI module for the
Icarus Verilog simulator.

Finally, a subset of \myhdl{} code can be converted automatically to
synthesizable Verilog code. This feature provides a direct path from
Python to an FPGA or ASIC implementation.

The \myhdl{} software is open source software. It is licensed under the
GNU Lesser General Public License (LGPL).




\end{abstract}

\tableofcontents

\input{background.tex}
\input{intro.tex}
\input{modeling.tex}
\input{unittest.tex}
\input{cosimulation.tex}

\chapter{Conversion to Verilog\label{conv}}
\input{conversion.tex}

\input{reference.tex}

\input{MyHDL.ind}

\end{document}
