1
0
mirror of https://github.com/myhdl/myhdl.git synced 2025-01-24 21:52:56 +08:00
myhdl/doc/manual/MyHDL.tex

102 lines
3.2 KiB
TeX
Raw Normal View History

2003-05-20 20:29:52 +00:00
\documentclass{manual}
\usepackage{palatino}
\renewcommand{\ttdefault}{cmtt}
\renewcommand{\sfdefault}{cmss}
\newcommand{\myhdl}{\protect \mbox{MyHDL}}
2003-08-04 21:21:19 +00:00
\usepackage{graphicx}
2003-05-20 20:29:52 +00:00
\title{The \myhdl\ manual}
\input{boilerplate}
2003-07-21 21:32:46 +00:00
\makeindex
2003-05-20 20:29:52 +00:00
\begin{document}
\maketitle
\input{copyright}
\begin{abstract}
\noindent
2005-12-27 11:27:05 +00:00
The goal of the \myhdl{} project is to empower hardware designers with
the elegance and simplicity of the Python language.
\myhdl{} is a free, open-source (LGPL) package for using Python as a
hardware description and verification language. Python is a very high
level language, and hardware designers can use its full power to model
and simulate their designs. Moreover, \myhdl{} can convert a design to
Verilog. In combination with an external synthesis tool, it provides a
complete path from Python to a silicon implementation.
\emph{Modeling}
Python's power and clarity make \myhdl{} an ideal solution for high level
modeling. Python is famous for enabling elegant solutions to complex
modeling problems. Moreover, Python is outstanding for rapid
2003-08-22 07:43:40 +00:00
application development and experimentation.
2003-08-08 13:41:03 +00:00
2005-12-27 11:27:05 +00:00
The key idea behind \myhdl{} is the use of Python generators to model
hardware concurrency. Generators are best described as resumable
functions. In \myhdl{}, generators are used in a specific way so that
they become similar to always blocks in Verilog or processes in VHDL.
A hardware module is modeled as a function that returns any number of
generators. This approach makes it straightforward to support features
such as arbitrary hierarchy, named port association, arrays of
instances, and conditional instantiation.
Furthermore, \myhdl{} provides classes that implement traditional
hardware description concepts. It provides a signal class to support
communication between generators, a class to support bit oriented
operations, and a class for enumeration types.
\emph{Simulation and Verification}
The built-in simulator runs on top of the Python interpreter. It
supports waveform viewing by tracing signal changes in a VCD file.
2003-08-08 13:41:03 +00:00
With \myhdl{}, the Python unit test framework can be used on hardware
2005-12-27 11:27:05 +00:00
designs. Although unit testing is a popular modern software
verification technique, it is not yet common in the hardware design
world, making it one more area in which \myhdl{} innovates.
\myhdl{} can also be used as hardware verification language for VHDL and
Verilog designs, by co-simulation with traditional HDL simulators.
2003-05-20 20:29:52 +00:00
2005-12-27 11:27:05 +00:00
\emph{Conversion to Verilog}
2004-02-02 21:47:49 +00:00
2005-12-27 11:27:05 +00:00
The converter to Verilog works on an instantiated design that has been
fully elaborated. Consequently, the original design structure can be
arbitrarily complex.
2003-08-08 13:41:03 +00:00
2005-12-27 11:27:05 +00:00
The converter automates certain tasks that are tedious or hard in
Verilog directly. Notable features are the possibility to choose
between various FSM state encodings based on a single attribute, the
mapping of certain high-level objects to RAM and ROM descriptions, and
the automated handling of signed arithmetic issues.
2003-08-08 13:41:03 +00:00
2003-05-20 20:29:52 +00:00
\end{abstract}
\tableofcontents
\input{background.tex}
2005-12-09 15:16:09 +00:00
\input{intro.tex}
2003-05-20 20:29:52 +00:00
\input{modeling.tex}
\input{unittest.tex}
\input{cosimulation.tex}
2004-02-01 17:42:40 +00:00
2004-02-04 11:11:09 +00:00
\chapter{Conversion to Verilog\label{conv}}
2004-02-01 17:42:40 +00:00
\input{conversion.tex}
2003-05-20 20:29:52 +00:00
\input{reference.tex}
2003-07-21 21:32:46 +00:00
\input{MyHDL.ind}
2003-05-20 20:29:52 +00:00
\end{document}