432 lines
16 KiB
Groff
432 lines
16 KiB
Groff
.TH iverilog 1 "April 22nd, 2008" Version "0.9.devel"
|
|
.SH NAME
|
|
iverilog - Icarus Verilog compiler
|
|
|
|
.SH SYNOPSIS
|
|
.B iverilog
|
|
[-ESVv] [-Bpath] [-ccmdfile|-fcmdfile] [-Dmacro[=defn]] [-pflag=value]
|
|
[-dname] [-g1995|-g2001|-g2005|-g<feature>]
|
|
[-Iincludedir] [-mmodule] [-Mfile] [-Nfile] [-ooutputfilename]
|
|
[-stopmodule] [-ttype] [-Tmin/typ/max] [-Wclass] [-ypath] sourcefile
|
|
|
|
.SH DESCRIPTION
|
|
.PP
|
|
\fIiverilog\fP is a compiler that translates Verilog source code into
|
|
executable programs for simulation, or other netlist formats for
|
|
further processing. The currently supported targets are \fIvvp\fP for
|
|
simulation, and \fIxnf\fP and \fIfpga\fP for synthesis. Other target
|
|
types are added as code generators are implemented.
|
|
|
|
.SH OPTIONS
|
|
.l
|
|
\fIiverilog\fP accepts the following options:
|
|
.TP 8
|
|
.B -B\fIbase\fP
|
|
The \fIiverilog\fP program uses external programs and configuration
|
|
files to preprocess and compile the Verilog source. Normally, the path
|
|
used to locate these tools is built into the \fIiverilog\fP
|
|
program. However, the \fB-B\fP switch allows the user to select a
|
|
different set of programs. The path given is used to locate
|
|
\fIivlpp\fP, \fIivl\fP, code generators and the VPI modules.
|
|
.TP 8
|
|
.B -c\fIfile\fP -f\fIfile\fP
|
|
These flags specifies an input file that contains a list of Verilog
|
|
source files. This is similar to the \fIcommand file\fP of other
|
|
Verilog simulators, in that it is a file that contains the file names
|
|
instead of taking them on the command line. See \fBCommand Files\fP below.
|
|
.TP 8
|
|
.B -D\fImacro\fP
|
|
Defines macro \fImacro\fP with the string `1' as its definition. This
|
|
form is normally only used to trigger ifdef conditionals in the
|
|
Verilog source.
|
|
.TP 8
|
|
.B -D\fImacro=defn\fP
|
|
Defines macro \fImacro\fP as \fIdefn\fP.
|
|
.TP 8
|
|
.B -d\fIname\fP
|
|
Activate a class of compiler debugging messages. The \fB-d\fP switch may
|
|
be used as often as necessary to activate all the desired messages.
|
|
Supported names are scopes, eval_tree, elaborate, and synth2;
|
|
any other names are ignored.
|
|
.TP 8
|
|
.B -E
|
|
Preprocess the Verilog source, but do not compile it. The output file
|
|
is the Verilog input, but with file inclusions and macro references
|
|
expanded and removed. This is useful, for example, to preprocess
|
|
Verilog source for use by other compilers.
|
|
.TP 8
|
|
.B -g1995\fI|\fP-g2001\fI|\fP-g2005
|
|
Select the Verilog language \fIgeneration\fP to support in the
|
|
compiler. This selects between \fIIEEE1364-1995\fP,
|
|
\fIIEEE1364-2001\fP(2), or \fIIEEE1364-2005\fP. Normally,
|
|
Icarus Verilog defaults to the latest known generation of the
|
|
language. This flag is most useful to restrict the language to a set
|
|
supported by tools of specific generations, for compatibility with
|
|
other tools.
|
|
.TP 8
|
|
.B -gverilog-ams\fI|-fP-gno-verilog-ams
|
|
Enable or disable (default) support for Verilog-AMS.
|
|
.TP 8
|
|
.B -gspecify\fI|\fP-gno-specify
|
|
Enable (default) or disable specify block support. When enabled,
|
|
specify block code is elaborated. When disabled, specify blocks are
|
|
parsed but ignored. Specify blocks are commonly not needed for RTL
|
|
simulation, and in fact can hurt performance of the
|
|
simulation. However, disabling specify blocks reduces accuracy of
|
|
full-timing simulations.
|
|
.TP 8
|
|
.B -gstd-include\fI|\fP-gno-std-include
|
|
Enable (default) or disable the search of a standard installation
|
|
include directory after all other explicit include directories. This
|
|
standard include directory is a convenient place to install standard
|
|
header files that a Verilog program may include.
|
|
.TP 8
|
|
.B -gxtypes\fI|\fP-gno-xtypes
|
|
Enable (default) or disable support for extended types. Enabling
|
|
extended types allows for new types that are supported by Icarus
|
|
Verilog as extensions beyond the baseline Verilog. It may be necessary
|
|
to disable extended types if compiling code that clashes with the few
|
|
new keywords used to implement the type system.
|
|
.TP 8
|
|
.B -gio-range-error\fI|\fP-gno-io-range-error
|
|
The standards requires that a vectored port have matching ranges for its
|
|
port declaration as well as any net/register declaration. It was common
|
|
practice in the past to only specify the range for the net/register
|
|
declaration and some tools still allow this. By default any mismatch is
|
|
reported as a error. Using \fI-gno-io-range-error\fP will produce a
|
|
warning instead of a fatal error for the case of a vectored net/register
|
|
and a scalar port declaration.
|
|
.TP 8
|
|
.B -I\fIincludedir\fP
|
|
Append directory \fIincludedir\fP to list of directories searched
|
|
for Verilog include files. The \fB-I\fP switch may be used many times
|
|
to specify several directories to search, the directories are searched
|
|
in the order they appear on the command line.
|
|
.TP 8
|
|
.B -M\fIpath\fP
|
|
Write into the file specified by path a list of files that contribute
|
|
to the compilation of the design. This includes files that are
|
|
included by include directives and files that are automatically loaded
|
|
by library support. The output is one file name per line, with no
|
|
leading or trailing space.
|
|
.TP 8
|
|
.B -m\fImodule\fP
|
|
Add this module to the list of VPI modules to be loaded by the
|
|
simulation. Many modules can be specified, and all will be loaded, in
|
|
the order specified. The system module is implicit and always included.
|
|
If a System Function Table file (<module>.sft) exists for the module it
|
|
will be loaded automatically.
|
|
.TP 8
|
|
.B -N\fIpath\fP
|
|
This is used for debugging the compiler proper. Dump the final netlist
|
|
form of the design to the specified file. It otherwise does not affect
|
|
operation of the compiler. The dump happens after the design is
|
|
elaborated and optimized.
|
|
.TP 8
|
|
.B -o \fIfilename\fP
|
|
Place output in the file \fIfilename\fP. If no output file name is
|
|
specified, \fIiverilog\fP uses the default name \fBa.out\fP.
|
|
.TP 8
|
|
.B -p\fIflag=value\fP
|
|
Assign a value to a target specific flag. The \fB-p\fP switch may be
|
|
used as often as necessary to specify all the desired flags. The flags
|
|
that are used depend on the target that is selected, and are described
|
|
in target specific documentation. Flags that are not used are ignored.
|
|
.TP 8
|
|
.B -S
|
|
Synthesize. Normally, if the target can accept behavioral
|
|
descriptions the compiler will leave processes in behavioral
|
|
form. The \fB-S\fP switch causes the compiler to perform synthesis
|
|
even if it is not necessary for the target. If the target type is a
|
|
netlist format, the \fB-S\fP switch is unnecessary and has no effect.
|
|
.TP 8
|
|
.B -s \fItopmodule\fP
|
|
Specify the top level module to elaborate. Icarus Verilog will by default
|
|
choose modules that are not instantiated in any other modules, but
|
|
sometimes that is not sufficient, or instantiates too many modules. If
|
|
the user specifies one or more root modules with \fB-s\fP flags, then
|
|
they will be used as root modules instead.
|
|
.TP 8
|
|
.B -T\fImin|typ|max\fP
|
|
Use this switch to select min, typ or max times from min:typ:max
|
|
expressions. Normally, the compiler will simply use the typ value from
|
|
these expressions (printing a warning for the first ten it finds) but
|
|
this switch will tell the compiler explicitly which value to use. This
|
|
will suppress the warning that the compiler is making a choice.
|
|
.TP 8
|
|
.B -t\fItarget\fP
|
|
Use this switch to specify the target output format. See the
|
|
\fBTARGETS\fP section below for a list of valid output formats.
|
|
.TP 8
|
|
.B -v
|
|
Turn on verbose messages. This will print the command lines that are
|
|
executed to perform the actual compilation, along with version
|
|
information from the various components, as well as the version of the
|
|
product as a whole. You will notice that the command lines include
|
|
a reference to a key temporary file that passes information to the
|
|
compiler proper. To keep that file from being deleted at the end
|
|
of the process, provide a file name of your own in the environment
|
|
variable \fBIVERILOG_ICONFIG\fP.
|
|
.TP 8
|
|
.B -V
|
|
Print the version of the compiler, and exit.
|
|
.TP 8
|
|
.B -W\fIclass\fP
|
|
Turn on different classes of warnings. See the \fBWARNING TYPES\fP
|
|
section below for descriptions of the different warning groups. If
|
|
multiple \fB-W\fP switches are used, the warning set is the union of
|
|
all the requested classes.
|
|
.TP 8
|
|
.B -y\fIlibdir\fP
|
|
Append the directory to the library module search path. When the
|
|
compiler finds an undefined module, it looks in these directories for
|
|
files with the right name.
|
|
|
|
.SH MODULE LIBRARIES
|
|
|
|
The Icarus Verilog compiler supports module libraries as directories
|
|
that contain Verilog source files. During elaboration, the compiler
|
|
notices the instantiation of undefined module types. If the user
|
|
specifies library search directories, the compiler will search the
|
|
directory for files with the name of the missing module type. If it
|
|
finds such a file, it loads it as a Verilog source file, they tries
|
|
again to elaborate the module.
|
|
|
|
Library module files should contain only a single module, but this is
|
|
not a requirement. Library modules may reference other modules in the
|
|
library or in the main design.
|
|
|
|
.SH TARGETS
|
|
|
|
The Icarus Verilog compiler supports a variety of targets, for
|
|
different purposes, and the \fB-t\fP switch is used to select the
|
|
desired target.
|
|
|
|
.TP 8
|
|
.B null
|
|
The null target causes no code to be generated. It is useful for
|
|
checking the syntax of the Verilog source.
|
|
.TP 8
|
|
.B vvp
|
|
This is the default. The vvp target generates code for the vvp
|
|
runtime. The output is a complete program that simulates the design
|
|
but must be run by the \fBvvp\fP command.
|
|
.TP 8
|
|
.B xnf
|
|
This is the Xilinx Netlist Format used by many tools for placing
|
|
devices in FPGAs or other programmable devices. This target is
|
|
obsolete, use the \fBfpga\fP target instead.
|
|
.TP 8
|
|
.B fpga
|
|
This is a synthesis target that supports a variety of fpga devices,
|
|
mostly by EDIF format output. The Icarus Verilog fpga code generator
|
|
can generate complete designs or EDIF macros that can in turn be
|
|
imported into larger designs by other tools. The \fBfpga\fP target
|
|
implies the synthesis \fB-S\fP flag.
|
|
|
|
.SH "WARNING TYPES"
|
|
These are the types of warnings that can be selected by the \fB-W\fP
|
|
switch. All the warning types (other than \fBall\fP) can also be
|
|
prefixed with \fBno-\fP to turn off that warning. This is most useful
|
|
after a \fB-Wall\fP argument to suppress isolated warning types.
|
|
|
|
.TP 8
|
|
.B all
|
|
This enables all supported warning categories.
|
|
|
|
.TP 8
|
|
.B implicit
|
|
This enables warnings for creation of implicit declarations. For
|
|
example, if a scalar wire X is used but not declared in the Verilog
|
|
source, this will print a warning at its first use.
|
|
|
|
.TP 8
|
|
.B portbind
|
|
This enables warnings for ports of module instantiations that are not
|
|
connected but probably should be. Dangling input ports, for example,
|
|
will generate a warning.
|
|
|
|
.TP 8
|
|
.B timescale
|
|
This enables warnings for inconsistent use of the timescale
|
|
directive. It detects if some modules have no timescale, or if modules
|
|
inherit timescale from another file. Both probably mean that
|
|
timescales are inconsistent, and simulation timing can be confusing
|
|
and dependent on compilation order.
|
|
|
|
.TP 8
|
|
.B infloop
|
|
This enables warnings for \fRalways\fP statements that may have runtime
|
|
infinite loops (has paths with no or zero delay). This class of warnings
|
|
is not included in \fB-Wall\fP and hence does not have a \fBno-\fP variant.
|
|
A fatal error message will always be printed when the compiler can
|
|
determine that there will definitely be an infinite loop (all paths have
|
|
no or zero delay).
|
|
|
|
When you suspect an always statement is producing a runtime infinite loop
|
|
use this flag to find the always statements that need to have their logic
|
|
verified. It is expected that many of the warnings will be false
|
|
positives, since the code treats the value of all variables and signals
|
|
as indeterminate.
|
|
|
|
.SH "SYSTEM FUNCTION TABLE FILES"
|
|
If the source file name as a \fB.sft\fP suffix, then it is taken to be
|
|
a system function table file. A System function table file is used to
|
|
describe to the compiler the return types for system functions. This
|
|
is necessary because the compiler needs this information to elaborate
|
|
expressions that contain these system functions, but cannot run the
|
|
sizetf functions since it has no run-time.
|
|
|
|
The format of the table is ASCII, one function per line. Empty lines
|
|
are ignored, and lines that start with the '\fI#\fP' character are
|
|
comment lines. Each non-comment line starts with the function name,
|
|
then the vpi type (i.e. vpiSysFuncReal). The following types are
|
|
supported:
|
|
|
|
.TP 8
|
|
.B vpiSysFuncReal
|
|
The function returns a real/realtime value.
|
|
|
|
.TP 8
|
|
.B vpiSysFuncInt
|
|
The function returns an integer.
|
|
|
|
.TP 8
|
|
.B vpiSysFuncSized <wid> <signed|unsigned>
|
|
The function returns a vector with the given width, and is signed or
|
|
unsigned according to the flag.
|
|
|
|
.SH "COMMAND FILES"
|
|
The command file allows the user to place source file names and
|
|
certain command line switches into a text file instead of on a long
|
|
command line. Command files can include C or C++ style comments, as
|
|
well as # comments, if the # starts the line.
|
|
|
|
.TP 8
|
|
.I "file name"
|
|
A simple file name or file path is taken to be the name of a Verilog
|
|
source file. The path starts with the first non-white-space
|
|
character. Variables are substituted in file names.
|
|
|
|
.TP 8
|
|
.B -c\ \fIcmdfile\fP -f\ \fIcmdfile\fP
|
|
A \fB-c\fP or \fB-f\fP token prefixes a command file, exactly like it
|
|
does on the command line. The cmdfile may be on the same line or the
|
|
next non-comment line.
|
|
|
|
.TP 8
|
|
.B -y\ \fIlibdir\fP
|
|
A \fB-y\fP token prefixes a library directory in the command file,
|
|
exactly like it does on the command line. The parameter to the \fB-y\fP
|
|
flag may be on the same line or the next non-comment line.
|
|
|
|
Variables in the \fIlibdir\fP are substituted.
|
|
|
|
.TP 8
|
|
.B +incdir+\fIincludedir\fP
|
|
The \fB+incdir+\fP token in command files gives directories to search
|
|
for include files in much the same way that \fB-I\fP flags work on the
|
|
command line. The difference is that multiple \fI+includedir\fP
|
|
directories are valid parameters to a single \fB+incdir+\fP token,
|
|
although you may also have multiple \fB+incdir+\fP lines.
|
|
|
|
Variables in the \fIincludedir\fP are substituted.
|
|
|
|
.TP 8
|
|
.B +libext+\fIext\fP
|
|
The \fB+libext\fP token in command files fives file extensions to try
|
|
when looking for a library file. This is useful in conjunction with
|
|
\fB-y\fP flags to list suffixes to try in each directory before moving
|
|
on to the next library directory.
|
|
|
|
.TP 8
|
|
.B +libdir+\fIdir\fP
|
|
This is another way to specify library directories. See the -y flag.
|
|
|
|
.TP 8
|
|
.B +libdir-nocase+\fIdir\fP
|
|
This is like the \fB+libdir\fP statement, but file names inside the
|
|
directories declared here are case insensitive. The missing module
|
|
name in a lookup need not match the file name case, as long as the
|
|
letters are correct. For example, "foo" matches "Foo.v" but not
|
|
"bar.v".
|
|
|
|
.TP 8
|
|
.B +define+\fINAME\fP=\fIvalue\fP
|
|
The \fB+define+\fP token is the same as the \fB-D\fP option on the
|
|
command line. The value part of the token is optional.
|
|
|
|
.TP 8
|
|
.B +toupper-filename\fP
|
|
This token causes file names after this in the command file to be
|
|
translated to uppercase. This helps with situations where a directory
|
|
has passed through a DOS machine, and in the process the file names
|
|
become munged.
|
|
|
|
.TP 8
|
|
.B +tolower-filename\fP
|
|
This is similar to the \fB+toupper-filename\fP hack described above.
|
|
|
|
.TP 8
|
|
.B +integer-width+\fIvalue\fP
|
|
This allows the programmer to select the width for integer variables
|
|
in the Verilog source. The default is 32, the value can be any desired
|
|
integer value.
|
|
|
|
.SH "VARIABLES IN COMMAND FILES"
|
|
|
|
In certain cases, iverilog supports variables in command files. These
|
|
are strings of the form "$(\fIvarname\fP)", where \fIvarname\fP is the
|
|
name of the environment variable to read. The entire string is
|
|
replaced with the contents of that variable. Variables are only
|
|
substituted in contexts that explicitly support them, including file
|
|
and directory strings.
|
|
|
|
Variable values come from the operating system environment, and not
|
|
from preprocessor defines elsewhere in the file or the command line.
|
|
|
|
.SH PREDEFINED MACROS
|
|
|
|
The following macro is predefined by the compiler:
|
|
.TP 8
|
|
.B __ICARUS__ = 1\fP
|
|
|
|
.SH EXAMPLES
|
|
These examples assume that you have a Verilog source file called hello.v in
|
|
the current directory
|
|
|
|
To compile hello.v to an executable file called a.out:
|
|
|
|
iverilog hello.v
|
|
|
|
To compile hello.v to an executable file called hello:
|
|
|
|
iverilog -o hello hello.v
|
|
|
|
To compile and run explicitly using the vvp runtime:
|
|
|
|
iverilog -ohello.vvp -tvvp hello.v
|
|
|
|
To compile hello.v to a file in XNF-format called hello.xnf
|
|
|
|
iverilog -txnf -ohello.xnf hello.v
|
|
|
|
|
|
.SH "AUTHOR"
|
|
.nf
|
|
Steve Williams (steve@icarus.com)
|
|
|
|
.SH SEE ALSO
|
|
vvp(1),
|
|
.BR "<http://www.icarus.com/eda/verilog/>"
|
|
|
|
Tips on using, debugging, and developing the compiler can be found at
|
|
.BR "<http://iverilog.wikia.com/>"
|
|
|
|
.SH COPYRIGHT
|
|
.nf
|
|
Copyright \(co 2002-2008 Stephen Williams
|
|
|
|
This document can be freely redistributed according to the terms of the
|
|
GNU General Public License version 2.0
|