1999-05-09 03:29:38 +02:00
|
|
|
THE ICARUS VERILOG COMPILATION SYSTEM
|
2000-09-17 21:06:58 +02:00
|
|
|
September 17, 2000
|
1998-11-18 05:25:22 +01:00
|
|
|
|
1998-11-23 01:20:22 +01:00
|
|
|
|
1999-10-09 21:24:04 +02:00
|
|
|
1.0 What is ICARUS Verilog?
|
1999-05-09 03:29:38 +02:00
|
|
|
|
2000-09-17 21:06:58 +02:00
|
|
|
Icarus Verilog is intended to compile ALL of the Verilog HDL as
|
|
|
|
|
described in the IEEE-1364 standard. Of course, it's not quite there
|
|
|
|
|
yet. It does currently handle a mix of structural and behavioral
|
|
|
|
|
constructs. For a view of the current state of Icarus Verilog, see its
|
|
|
|
|
home page at <http://www.icarus.com/eda/verilog>.
|
1999-05-09 03:29:38 +02:00
|
|
|
|
2000-06-07 05:53:16 +02:00
|
|
|
Icarus Verilog is not aimed at being a simulator in the traditional
|
|
|
|
|
sense, but a compiler that generates code employed by back-end
|
2001-05-22 04:07:08 +02:00
|
|
|
tools. These back-end tools currently include a simulator written in
|
2002-02-04 01:48:30 +01:00
|
|
|
C++ called VVM, another faster simulator called VVP, an XNF (Xilinx
|
|
|
|
|
Netlist Format) generator and an EDIF fpga netlist generator. In the
|
|
|
|
|
future, backends are expected for EDIF/LPM, structural Verilog, VHDL,
|
|
|
|
|
etc.
|
1999-05-09 03:29:38 +02:00
|
|
|
|
2002-02-04 01:48:30 +01:00
|
|
|
For instructions on how to run Icarus Verilog,
|
|
|
|
|
see the ``iverilog'' man page.
|
2001-05-22 04:07:08 +02:00
|
|
|
|
|
|
|
|
|
2000-06-07 05:53:16 +02:00
|
|
|
2.0 Building/Installing Icarus Verilog From Source
|
1999-10-16 23:22:06 +02:00
|
|
|
|
|
|
|
|
If you are starting from source, the build process is designed to be
|
|
|
|
|
as simple as practical. Someone basically familiar with the target
|
|
|
|
|
system and C/C++ compilation should be able to build the source
|
|
|
|
|
distribution with little effort. Some actual programming skills are
|
|
|
|
|
not required, but helpful in case of problems.
|
|
|
|
|
|
2002-02-04 01:48:30 +01:00
|
|
|
If you are building for Windows, see the mingw.txt file.
|
|
|
|
|
|
1999-10-16 23:22:06 +02:00
|
|
|
2.1 Compile Time Prerequisites
|
|
|
|
|
|
|
|
|
|
You need the following software to compile Icarus Verilog from source
|
|
|
|
|
on a UNIX-like system:
|
|
|
|
|
|
|
|
|
|
- GNU Make
|
2001-06-13 01:32:49 +02:00
|
|
|
The Makefiles use some GNU extensions, so a basic POSIX
|
1999-10-16 23:22:06 +02:00
|
|
|
make will not work. Linux systems typically come with a
|
2000-09-17 21:06:58 +02:00
|
|
|
satisfactory make. BSD based systems (i.e. NetBSD, FreeBSD)
|
|
|
|
|
typically have GNU make as the gmake program.
|
1999-10-16 23:22:06 +02:00
|
|
|
|
|
|
|
|
- ISO C++ Compiler
|
2000-11-01 07:05:44 +01:00
|
|
|
The ivl and ivlpp programs are written in C++ and make use
|
2000-09-17 21:06:58 +02:00
|
|
|
of templates and some of the standard C++ library. egcs and
|
|
|
|
|
recent gcc compilers with the associated libstdc++ are known
|
2000-11-01 07:05:44 +01:00
|
|
|
to work. MSVC++ 5 and 6 are known to definitely *not* work.
|
1999-10-16 23:22:06 +02:00
|
|
|
|
2001-01-20 20:02:04 +01:00
|
|
|
- bison and flex
|
1999-10-16 23:22:06 +02:00
|
|
|
|
2000-03-12 18:09:40 +01:00
|
|
|
- gperf 2.7
|
|
|
|
|
The lexical analyzer doesn't recognize keywords directly,
|
|
|
|
|
but instead matches symbols and looks them up in a hash
|
|
|
|
|
table in order to get the proper lexical code. The gperf
|
|
|
|
|
program generates the lookup table.
|
|
|
|
|
|
2000-09-17 21:06:58 +02:00
|
|
|
A version problem with this program is the most common cause
|
|
|
|
|
of difficulty. See the Icarus Verilog FAQ.
|
|
|
|
|
|
1999-10-16 23:22:06 +02:00
|
|
|
2.2 Compilation
|
|
|
|
|
|
|
|
|
|
Unpack the tar-ball and cd into the verilog-######### directory
|
|
|
|
|
(presumably that is how you got to this README) and compile the source
|
|
|
|
|
with the commands:
|
|
|
|
|
|
|
|
|
|
./configure
|
|
|
|
|
make
|
|
|
|
|
|
2001-05-22 04:07:08 +02:00
|
|
|
Normally, this command automatically figures out every thing it needs
|
|
|
|
|
to know. It generally works pretty well. There are a few flags to the
|
|
|
|
|
configure script that modify its behavior:
|
|
|
|
|
|
|
|
|
|
--without-ipal
|
|
|
|
|
This turns off support for Icarus PAL, whether ipal
|
2002-01-19 20:22:39 +01:00
|
|
|
libraries are installed or not.
|
2001-05-22 04:07:08 +02:00
|
|
|
|
|
|
|
|
--prefix=<root>
|
|
|
|
|
The default is /usr/local, which causes the tool suite to
|
|
|
|
|
be compiled for install in /usr/local/bin,
|
|
|
|
|
/usr/local/share/ivl, etc.
|
|
|
|
|
|
|
|
|
|
I recommend that if you are configuring for precompiled
|
2002-01-19 20:22:39 +01:00
|
|
|
binaries, use --prefix=/usr. On Solaris systems, it is
|
|
|
|
|
common to use --prefix=/opt. You can configure for a non-root
|
|
|
|
|
install with --prefix=$HOME.
|
2001-05-22 04:07:08 +02:00
|
|
|
|
2001-04-26 18:04:39 +02:00
|
|
|
2.3 (Optional) Testing
|
|
|
|
|
|
|
|
|
|
To run a simple test before installation, execute
|
|
|
|
|
|
|
|
|
|
make check
|
|
|
|
|
|
|
|
|
|
The commands printed by this run might help you in running Icarus
|
2002-01-19 20:22:39 +01:00
|
|
|
Verilog on your own Verilog sources before the package is installed
|
2001-04-26 18:04:39 +02:00
|
|
|
by root.
|
|
|
|
|
|
|
|
|
|
2.4 Installation
|
1999-10-16 23:22:06 +02:00
|
|
|
|
|
|
|
|
Now install the files in an appropriate place. (The makefiles by
|
|
|
|
|
default install in /usr/local unless you specify a different prefix
|
2001-05-22 04:07:08 +02:00
|
|
|
with the --prefix=<path> flag to the configure command.) You may need
|
|
|
|
|
to do this as root to gain access to installation directories.
|
1999-10-16 23:22:06 +02:00
|
|
|
|
|
|
|
|
make install
|
|
|
|
|
|
2001-05-22 04:07:08 +02:00
|
|
|
2.5 Uninstallation
|
|
|
|
|
|
|
|
|
|
The generated Makefiles also include the uninstall target. This should
|
|
|
|
|
remove all the files that ``make install'' creates.
|
|
|
|
|
|
2000-06-07 05:53:16 +02:00
|
|
|
3.0 How Icarus Verilog Works
|
1999-05-09 03:29:38 +02:00
|
|
|
|
1999-05-10 02:29:35 +02:00
|
|
|
This tool includes a parser which reads in Verilog (plus extensions)
|
|
|
|
|
and generates an internal netlist. The netlist is passed to various
|
1998-11-23 01:20:22 +01:00
|
|
|
processing steps that transform the design to more optimal/practical
|
1999-09-19 00:24:24 +02:00
|
|
|
forms, then is passed to a code generator for final output. The
|
1998-11-23 01:20:22 +01:00
|
|
|
processing steps and the code generator are selected by command line
|
|
|
|
|
switches.
|
|
|
|
|
|
1999-10-16 23:22:06 +02:00
|
|
|
3.1 Preprocessing
|
1999-07-08 04:06:47 +02:00
|
|
|
|
|
|
|
|
There is a separate program, ivlpp, that does the preprocessing. This
|
|
|
|
|
program implements the `include and `define directives producing
|
1999-09-19 00:24:24 +02:00
|
|
|
output that is equivalent but without the directives. The output is a
|
|
|
|
|
single file with line number directives, so that the actual compiler
|
|
|
|
|
only sees a single input file. See ivlpp/ivlpp.txt for details.
|
1999-07-08 04:06:47 +02:00
|
|
|
|
1999-10-16 23:22:06 +02:00
|
|
|
3.2 Parse
|
1999-05-09 03:29:38 +02:00
|
|
|
|
2002-01-19 20:22:39 +01:00
|
|
|
The Verilog compiler starts by parsing the Verilog source file. The
|
1999-05-09 03:29:38 +02:00
|
|
|
output of the parse in a list of Module objects in PFORM. The pform
|
|
|
|
|
(see pform.h) is mostly a direct reflection of the compilation
|
1999-09-19 00:24:24 +02:00
|
|
|
step. There may be dangling references, and it is not yet clear which
|
1999-05-09 03:29:38 +02:00
|
|
|
module is the root.
|
|
|
|
|
|
1999-05-10 02:29:35 +02:00
|
|
|
One can see a human readable version of the final PFORM by using the
|
2000-09-17 21:06:58 +02:00
|
|
|
``-P <path>'' flag to the compiler. This will cause iverilog to dump
|
|
|
|
|
the PFORM into the file named <path>.
|
1999-05-10 02:29:35 +02:00
|
|
|
|
1999-10-16 23:22:06 +02:00
|
|
|
3.3 Elaboration
|
1999-05-09 03:29:38 +02:00
|
|
|
|
|
|
|
|
This phase takes the pform and generates a netlist. The driver selects
|
|
|
|
|
(by user request or lucky guess) the root module to elaborate,
|
|
|
|
|
resolves references and expands the instantiations to form the design
|
1999-09-19 00:24:24 +02:00
|
|
|
netlist. (See netlist.txt.) Final semantic checks are performed during
|
2000-09-17 21:06:58 +02:00
|
|
|
elaboration, and some simple optimizations are performed. The netlist
|
|
|
|
|
includes all the behavioral descriptions, as well as gates and wires.
|
1999-05-09 03:29:38 +02:00
|
|
|
|
|
|
|
|
The elaborate() function performs the elaboration.
|
|
|
|
|
|
1999-05-10 02:29:35 +02:00
|
|
|
One can see a human readable version of the final, elaborated and
|
|
|
|
|
optimized netlist by using the ``-N <path>'' flag to the compiler. If
|
|
|
|
|
elaboration succeeds, the final netlist (i.e. after optimizations but
|
|
|
|
|
before code generation) will be dumped into the file named <path>.
|
|
|
|
|
|
2000-03-08 05:36:53 +01:00
|
|
|
Elaboration is actually performed it two steps: scopes and parameters
|
|
|
|
|
first, followed by the structural and behavioral elaboration.
|
|
|
|
|
|
|
|
|
|
3.3.1 Scope Elaboration
|
|
|
|
|
|
2000-06-07 05:53:16 +02:00
|
|
|
This pass scans through the pform looking for scopes and parameters. A
|
|
|
|
|
tree of NetScope objects is built up and placed in the Design object,
|
|
|
|
|
with the root module represented by the root NetScope object. The
|
|
|
|
|
elab_scope.cc and elab_pexpr.cc files contain most of the code for
|
2000-03-08 05:36:53 +01:00
|
|
|
handling this phase.
|
|
|
|
|
|
|
|
|
|
The tail of the elaborate_scope behavior (after the pform is
|
|
|
|
|
traversed) includes a scan of the NetScope tree to locate defparam
|
|
|
|
|
assignments that were collected during scope elaboration. This is when
|
|
|
|
|
the defparam overrides are applied to the parameters.
|
|
|
|
|
|
|
|
|
|
3.3.2 Netlist Elaboration
|
|
|
|
|
|
|
|
|
|
After the scopes and parameters are generated and the NetScope tree
|
2000-06-07 05:53:16 +02:00
|
|
|
fully formed, the elaboration runs through the pform again, this time
|
2000-03-08 05:36:53 +01:00
|
|
|
generating the structural and behavioral netlist. Parameters are
|
|
|
|
|
elaborated and evaluated by now so all the constants of code
|
|
|
|
|
generation are now known locally, so the netlist can be generated by
|
|
|
|
|
simply passing through the pform.
|
|
|
|
|
|
1999-10-16 23:22:06 +02:00
|
|
|
3.4 Optimization
|
1999-05-09 03:29:38 +02:00
|
|
|
|
|
|
|
|
This is actually a collection of processing steps that perform
|
|
|
|
|
optimizations that do not depend on the target technology. Examples of
|
|
|
|
|
some useful transformations would be,
|
|
|
|
|
|
|
|
|
|
- eliminate null effect circuitry,
|
|
|
|
|
- combinational reduction
|
2002-01-19 20:22:39 +01:00
|
|
|
- constant propagation
|
1999-05-09 03:29:38 +02:00
|
|
|
|
2000-09-17 21:06:58 +02:00
|
|
|
The actual functions performed are specified on the ivl command line by
|
1999-05-09 03:29:38 +02:00
|
|
|
the -F flags (See below).
|
|
|
|
|
|
1999-10-16 23:22:06 +02:00
|
|
|
3.5 Code Generation
|
1999-05-09 03:29:38 +02:00
|
|
|
|
|
|
|
|
This step takes the design netlist and uses it to drive the code
|
|
|
|
|
generator. (See target.h.) This may require transforming the
|
|
|
|
|
design to suit the technology.
|
|
|
|
|
|
|
|
|
|
The emit() method of the Design class performs this step. It runs
|
|
|
|
|
through the design elements, calling target functions as need arises
|
|
|
|
|
to generate actual output.
|
|
|
|
|
|
2000-09-17 21:06:58 +02:00
|
|
|
The user selects the target code generator with the -t flag on the
|
1999-05-09 03:29:38 +02:00
|
|
|
command line.
|
|
|
|
|
|
2000-09-17 21:06:58 +02:00
|
|
|
3.6 ATTRIBUTES
|
|
|
|
|
|
2002-01-19 20:22:39 +01:00
|
|
|
The parser accepts, as an extension to Verilog, the $attribute module
|
2000-09-17 21:06:58 +02:00
|
|
|
item. The syntax of the $attribute item is:
|
|
|
|
|
|
|
|
|
|
$attribute (<identifier>, <key>, <value>);
|
|
|
|
|
|
|
|
|
|
The $attribute keyword looks like a system task invocation. The
|
|
|
|
|
difference here is that the parameters are more restricted then those
|
|
|
|
|
of a system task. The <identifier> must be an identifier. This will be
|
|
|
|
|
the item to get an attribute. The <key> and <value> are strings, not
|
|
|
|
|
expressions, that give the key and the value of the attribute to be
|
|
|
|
|
attached to the identified object.
|
|
|
|
|
|
|
|
|
|
Attributes are [<key> <value>] pairs and are used to communicate with
|
|
|
|
|
the various processing steps. See the documentation for the processing
|
|
|
|
|
step for a list of the pertinent attributes.
|
|
|
|
|
|
|
|
|
|
Attributes can also be applied to gate types. When this is done, the
|
|
|
|
|
attribute is given to every instantiation of the primitive. The syntax
|
|
|
|
|
for the attribute statement is the same, except that the <identifier>
|
|
|
|
|
names a primitive earlier in the compilation unit and the statement is
|
|
|
|
|
placed in global scope, instead of within a module. The semicolon is
|
|
|
|
|
not part of a type attribute.
|
|
|
|
|
|
|
|
|
|
Note that attributes are also occasionally used for communication
|
|
|
|
|
between processing steps. Processing steps that are aware of others
|
|
|
|
|
may place attributes on netlist objects to communicate information to
|
|
|
|
|
later steps.
|
|
|
|
|
|
|
|
|
|
4.0 Running iverilog
|
1999-09-19 00:24:24 +02:00
|
|
|
|
2000-11-01 07:05:44 +01:00
|
|
|
The preferred way to invoke the compiler is with the iverilog(1)
|
1999-09-19 00:24:24 +02:00
|
|
|
command. This program invokes the preprocessor (ivlpp) and the
|
|
|
|
|
compiler (ivl) with the proper command line options to get the job
|
2000-05-13 22:55:15 +02:00
|
|
|
done in a friendly way. See the iverilog(1) man page for usage details.
|
1999-09-19 00:24:24 +02:00
|
|
|
|
2000-09-17 21:06:58 +02:00
|
|
|
4.1 Running IVL Directly (not recommended)
|
1999-05-09 03:29:38 +02:00
|
|
|
|
2001-05-22 04:07:08 +02:00
|
|
|
NOTE: The preferred method of running Icarus Verilog is the
|
|
|
|
|
iverilog command described above. The instructions below may
|
|
|
|
|
change at any time without notice.
|
|
|
|
|
|
1999-05-09 03:29:38 +02:00
|
|
|
The ivl command is the compiler driver, that invokes the parser,
|
2000-06-07 05:53:16 +02:00
|
|
|
optimization functions and the code generator, but not the preprocessor.
|
1998-11-18 05:25:22 +01:00
|
|
|
|
1999-05-05 05:27:14 +02:00
|
|
|
Usage: ivl <options>... file
|
|
|
|
|
ivl -h
|
2001-07-16 20:14:56 +02:00
|
|
|
ivl -V
|
1998-11-18 05:25:22 +01:00
|
|
|
|
|
|
|
|
-F <name>
|
|
|
|
|
Use this flag to request an optimization function be applied
|
|
|
|
|
to the netlist before it is sent to the target output
|
|
|
|
|
stage. Any number of -F options may be given, to specify a
|
|
|
|
|
variety of processing steps. The steps will be applied in
|
|
|
|
|
order, with the output of one uses as the input to the next.
|
|
|
|
|
|
1999-05-09 03:29:38 +02:00
|
|
|
The function is specified by name. Use the "ivl -h" command to
|
1998-11-18 05:25:22 +01:00
|
|
|
get a list of configured function names.
|
|
|
|
|
|
2001-07-16 20:14:56 +02:00
|
|
|
-h
|
|
|
|
|
Print usage information, and exit.
|
|
|
|
|
|
2000-01-13 06:11:24 +01:00
|
|
|
-m <module>
|
|
|
|
|
Cause a named VPI module to be included in the module
|
|
|
|
|
list. This parameter appends the named module to the end of
|
|
|
|
|
the VPI_MODULE_LIST. This is an ordered list of modules to be
|
|
|
|
|
loaded into the simulation at runtime.
|
|
|
|
|
|
|
|
|
|
This list can also be set with -fVPI_MODULE_LIST=<list> which
|
|
|
|
|
sets the list completely. Then, -m after this will append
|
2002-01-19 20:22:39 +01:00
|
|
|
module names to the list specified. The default list
|
2000-01-13 06:11:24 +01:00
|
|
|
includes "system".
|
|
|
|
|
|
1999-04-25 23:54:33 +02:00
|
|
|
-N <file>
|
|
|
|
|
Dump the elaborated netlist to the named file. The netlist is
|
1999-05-09 03:29:38 +02:00
|
|
|
the folly elaborated netlist, after all the function modules
|
1999-04-25 23:54:33 +02:00
|
|
|
are applied and right before the output generator is
|
|
|
|
|
called. This is an aid for debugging the compiler, and the
|
|
|
|
|
output generator in particular.
|
|
|
|
|
|
1998-11-18 05:25:22 +01:00
|
|
|
-o <file>
|
|
|
|
|
Normally, the generated result is sent to standard
|
|
|
|
|
output. Use the -o flag to specify an output file for the
|
|
|
|
|
generated result.
|
|
|
|
|
|
1999-04-25 23:54:33 +02:00
|
|
|
-P <file>
|
|
|
|
|
Write the PForm of the parsed input to the specified file.
|
|
|
|
|
The pform is the compiler's understanding of the input after
|
|
|
|
|
parsing and before elaboration. This is an aid for debugging
|
|
|
|
|
the compiler.
|
|
|
|
|
|
2001-01-20 20:02:04 +01:00
|
|
|
-p <assign>
|
|
|
|
|
Use this flag to set a parameter value. The format of the
|
|
|
|
|
assignment is <key>=<value> where key is any string up to the
|
|
|
|
|
first '=', and <value> is the rest of the option. If the '='
|
|
|
|
|
is omitted, then the key is assigned the empty string.
|
|
|
|
|
|
|
|
|
|
The useful keys are defined by the functions and the target in
|
|
|
|
|
use. These assignments are specifically useful for passing
|
|
|
|
|
target specific information to the target back-end, or
|
|
|
|
|
options/parameters to optimization functions, if any are defined.
|
|
|
|
|
|
1998-11-18 05:25:22 +01:00
|
|
|
-s <module>
|
2001-10-23 02:36:54 +02:00
|
|
|
Normally, ivl will locate all the modules that are defined but
|
|
|
|
|
never instantiated, and use these as the design roots for
|
|
|
|
|
elaboration. This flag allows the choice of root module(s) to
|
|
|
|
|
be manually overridden. It can be used more than once on the
|
|
|
|
|
command line if multiple root modules are needed.
|
|
|
|
|
|
2000-07-31 00:09:09 +02:00
|
|
|
-T [min|typ|max]
|
|
|
|
|
Normally, ivl will select typ values from min:type:max
|
|
|
|
|
expressions and print a warning. This flag tells the compiler
|
|
|
|
|
exactly which value to choose, and suppresses the warning.
|
|
|
|
|
|
1998-11-18 05:25:22 +01:00
|
|
|
-t <name>
|
|
|
|
|
Select the output format for the compiled result. Use the
|
1999-05-09 03:29:38 +02:00
|
|
|
"ivl -h" command to get a list of configured targets.
|
1998-11-18 05:25:22 +01:00
|
|
|
|
2001-07-16 20:14:56 +02:00
|
|
|
-v Print progress indications, and (if supported by the system)
|
|
|
|
|
executions times in ivl precessing steps.
|
|
|
|
|
|
|
|
|
|
-V
|
|
|
|
|
Print version and copyright information for ivl, and exit.
|
1999-06-19 23:06:16 +02:00
|
|
|
|
2001-10-23 02:36:54 +02:00
|
|
|
-y <dir>
|
|
|
|
|
Add the specified directory to the library search path. If
|
|
|
|
|
missing modules are discovered during elaboration, ivl will
|
|
|
|
|
attempt to locate an implementation by searching the library
|
|
|
|
|
directories for a Verilog source file with the same name as
|
|
|
|
|
the module.
|
|
|
|
|
|
2000-09-17 21:06:58 +02:00
|
|
|
4.2 EXAMPLES
|
1998-11-18 05:25:22 +01:00
|
|
|
|
1999-05-09 03:29:38 +02:00
|
|
|
Example: Compiling "hello.vl"
|
1998-11-18 05:25:22 +01:00
|
|
|
|
1999-05-09 03:29:38 +02:00
|
|
|
------------------------ hello.vl ----------------------------
|
|
|
|
|
module main();
|
|
|
|
|
|
|
|
|
|
initial
|
|
|
|
|
begin
|
|
|
|
|
$display("Hi there");
|
|
|
|
|
$finish ;
|
|
|
|
|
end
|
1998-11-18 05:25:22 +01:00
|
|
|
|
1999-05-09 03:29:38 +02:00
|
|
|
endmodule
|
1998-11-18 05:25:22 +01:00
|
|
|
|
1999-05-09 03:29:38 +02:00
|
|
|
--------------------------------------------------------------
|
1998-11-18 05:25:22 +01:00
|
|
|
|
2000-05-13 22:55:15 +02:00
|
|
|
Insure that "iverilog" is on your search path, and the vpi library
|
1999-09-19 00:24:24 +02:00
|
|
|
is available.
|
1998-11-18 05:25:22 +01:00
|
|
|
|
2000-09-17 21:06:58 +02:00
|
|
|
To compile the program:
|
1998-11-18 05:25:22 +01:00
|
|
|
|
2000-05-13 22:55:15 +02:00
|
|
|
iverilog hello.vl
|
1998-11-18 05:25:22 +01:00
|
|
|
|
1999-05-10 02:29:35 +02:00
|
|
|
(The above presumes that /usr/local/include and /usr/local/lib are
|
1999-09-19 00:24:24 +02:00
|
|
|
part of the compiler search path, which is usually the case for gcc.)
|
1999-05-10 02:29:35 +02:00
|
|
|
|
2000-09-17 21:06:58 +02:00
|
|
|
To run the program:
|
1998-11-18 05:25:22 +01:00
|
|
|
|
2000-05-13 22:55:15 +02:00
|
|
|
./a.out
|
1998-11-18 05:25:22 +01:00
|
|
|
|
2000-09-17 21:06:58 +02:00
|
|
|
You can use the "-o" switch to name the output command to be generated
|
|
|
|
|
by the compiler. See the iverilog(1) man page.
|
1998-11-18 05:25:22 +01:00
|
|
|
|
1999-05-09 03:29:38 +02:00
|
|
|
5.0 Unsupported Constructs
|
1998-11-18 05:25:22 +01:00
|
|
|
|
2000-09-17 21:06:58 +02:00
|
|
|
Icarus Verilog is in development - as such it still only supports a
|
|
|
|
|
(growing) subset of Verilog. Below is a description of some of the
|
2002-01-19 20:22:39 +01:00
|
|
|
currently unsupported Verilog features. This list is not exhaustive,
|
2000-09-17 21:06:58 +02:00
|
|
|
and does not account for errors in the compiler. See the Icarus
|
2001-01-20 20:02:04 +01:00
|
|
|
Verilog web page for the current state of support for Verilog, and in
|
|
|
|
|
particular, browse the bug report database for reported unsupported
|
|
|
|
|
constructs.
|
1999-06-09 05:00:05 +02:00
|
|
|
|
1999-09-30 23:28:34 +02:00
|
|
|
- block disable not supported, i.e.:
|
|
|
|
|
|
|
|
|
|
begin : foo
|
|
|
|
|
[...]
|
|
|
|
|
disable foo; // sorry
|
|
|
|
|
[...]
|
|
|
|
|
end
|
|
|
|
|
|
2001-01-20 20:02:04 +01:00
|
|
|
- real data types not supported. This includes real and
|
|
|
|
|
realtime. However, floating point constants in delay expressions
|
|
|
|
|
are supported so that `timescale works properly.
|
1999-09-30 06:51:14 +02:00
|
|
|
|
2000-06-07 05:53:16 +02:00
|
|
|
- System functions are supported, but the compiler presumes that
|
|
|
|
|
they return 32 bits. This is the typical case.
|
1999-09-30 23:28:34 +02:00
|
|
|
|
2000-05-13 22:55:15 +02:00
|
|
|
- Specify blocks are parsed but ignored in general.
|
1999-06-19 23:06:16 +02:00
|
|
|
|
2000-12-05 23:31:38 +01:00
|
|
|
- trireg is not supported. tri0 and tri1 are supported.
|
|
|
|
|
|
2002-01-28 01:52:41 +01:00
|
|
|
- force to nets are not supported. Force to variables, and
|
|
|
|
|
assign/deassign, are supported.
|
1999-07-08 04:06:47 +02:00
|
|
|
|
|
|
|
|
6.0 CREDITS
|
|
|
|
|
|
2000-09-17 21:06:58 +02:00
|
|
|
Except where otherwise noted, Icarus Verilog, ivl and ivlpp are
|
|
|
|
|
Copyright Stephen Williams. The proper notices are in the head of each
|
2001-01-20 20:02:04 +01:00
|
|
|
file. However, I have early on received aid in the form of fixes,
|
|
|
|
|
Verilog guidance, and especially testing from many people, including
|
|
|
|
|
(in alphabetical order):
|
1999-07-08 04:06:47 +02:00
|
|
|
|
1999-10-01 17:26:28 +02:00
|
|
|
Eric Aardoom <eric_aardoom@yahoo.com>
|
2000-02-18 06:15:02 +01:00
|
|
|
Stephan I. Boettcher <stephan@nevis.columbia.edu>
|
1999-07-08 04:06:47 +02:00
|
|
|
Ed Carter <r47652@email.sps.mot.com>
|
1999-08-18 06:00:02 +02:00
|
|
|
Larry Doolittle <LRDoolittle@lbl.gov>
|
1999-10-01 17:26:28 +02:00
|
|
|
Guy Hutchison <ghutchis@pacbell.net>
|
1999-07-08 04:06:47 +02:00
|
|
|
Ales Hvezda <ahvezda@seul.org>
|
2001-06-13 01:32:49 +02:00
|
|
|
Venkat Iyer <venkat@comit.com>
|
2000-02-23 05:42:49 +01:00
|
|
|
Yasuhisa Kato <ykato@mac.com>
|
2001-01-06 05:32:56 +01:00
|
|
|
James Lee <jml@jmlzone.com>
|
1999-08-23 18:48:39 +02:00
|
|
|
Peter Monta <pmonta@halibut.imedia.com>
|
1999-09-29 03:50:35 +02:00
|
|
|
Daniel H. Nelsen <dhn@qedinc.com>
|
1999-08-18 05:45:21 +02:00
|
|
|
Stefan Petersen <spe@geda.seul.org>
|
2002-05-04 05:19:35 +02:00
|
|
|
Michael Ruff <mruff@chiaro.com>
|
|
|
|
|
Mike Runyan <mrunyan@chiaro.com>
|
2000-02-13 05:05:47 +01:00
|
|
|
Jason Schonberg <schonm@yahoo.com>
|
1999-07-08 04:06:47 +02:00
|
|
|
Stuart Sutherland <stuart@sutherland.com>
|
1999-07-11 01:29:28 +02:00
|
|
|
Stephen Tell <tell@cs.unc.edu>
|
1999-07-08 04:06:47 +02:00
|
|
|
Stefan Theide <Stefan.Thiede@sv.sc.philips.com>
|
2002-01-28 01:52:41 +01:00
|
|
|
Tom Verbeure
|
1999-07-08 04:06:47 +02:00
|
|
|
Steve Wilson <stevew@home.com>
|
|
|
|
|
|
|
|
|
|
and others. Testers in particular include a larger community of people
|
1999-10-15 04:55:21 +02:00
|
|
|
interested in a GPL Verilog for Linux. Special thanks to Steve Wilson
|
|
|
|
|
for collecting and organizing the test suite code for all those testers.
|
2000-09-17 21:06:58 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
6.1 PORT MAINTAINERS
|
|
|
|
|
|
|
|
|
|
This is a list of people who have created ports and precompiled
|
|
|
|
|
packages for various operating systems. These folks have graciously
|
|
|
|
|
taken on the task of building Icarus Verilog on their systems and
|
2001-01-20 20:02:04 +01:00
|
|
|
bundled it into neat packages.(+) If you want to be added to the list (or
|
2000-09-17 21:06:58 +02:00
|
|
|
removed from the list) send e-mail to me.
|
|
|
|
|
|
|
|
|
|
FreeBSD/{Intel,alpha}
|
2001-02-15 07:59:35 +01:00
|
|
|
Ying-Chieh Liao <ijliao@FreeBSD.org>
|
2000-09-17 21:06:58 +02:00
|
|
|
|
2000-12-05 23:31:38 +01:00
|
|
|
Linux/{alpha,Intel} (RPMS)
|
2000-09-17 21:06:58 +02:00
|
|
|
Stephen Williams <steve@icarus.com>
|
|
|
|
|
|
|
|
|
|
Linux/* (.debs)
|
|
|
|
|
Hamish Moffatt <hamish@rising.com.au>
|
|
|
|
|
|
|
|
|
|
Macintosh -- MacO/S
|
|
|
|
|
Yasuhisa Kato <ykato@mac.com>
|
|
|
|
|
|
2001-09-20 05:21:01 +02:00
|
|
|
Mac O/S X
|
|
|
|
|
Timothy J. Wood <tjw@omnigroup.com>
|
|
|
|
|
|
2000-09-17 21:06:58 +02:00
|
|
|
NetBSD/*
|
2001-01-20 20:02:04 +01:00
|
|
|
Dan McMahill <mcmahill@mtl.mit.edu>
|
2000-09-17 21:06:58 +02:00
|
|
|
|
|
|
|
|
Solaris/SPARC packages (.pkg)
|
|
|
|
|
Dan McMahill <mcmahill@mtl.mit.edu>
|
|
|
|
|
|
2000-09-30 05:20:47 +02:00
|
|
|
Cygwin32/*
|
|
|
|
|
Venkat Iyer <venkat@comit.com>
|
|
|
|
|
|
2001-05-22 04:07:08 +02:00
|
|
|
Mingw32
|
|
|
|
|
Venkat Iyer <venkat@comit.com>
|
|
|
|
|
|
2001-01-20 20:02:04 +01:00
|
|
|
(+) These are not the only systems where Icarus Verilog has been run,
|
2000-09-17 21:06:58 +02:00
|
|
|
just the systems where precompiled binaries are publicly available.
|
|
|
|
|
|
2001-05-22 04:07:08 +02:00
|
|
|
|
2000-09-17 21:06:58 +02:00
|
|
|
6.2 TEST SUITE MANAGER
|
|
|
|
|
|
|
|
|
|
Steve Wilson <stevew@home.com> or <stevew@intrinsix.com> has taken on
|
|
|
|
|
the large task of managing the test suite. He has maintained the
|
|
|
|
|
regression test scripts, the driver list, received submissions from
|
|
|
|
|
myself and others, and has written a great many tests on his own. Any
|
|
|
|
|
compiler writer, for any language, will tell you that the test suite
|
|
|
|
|
is at least as important as the compiler code itself.
|
|
|
|
|
|