diff --git a/README.txt b/README.txt index c67a03c46..460091960 100644 --- a/README.txt +++ b/README.txt @@ -10,14 +10,15 @@ currently handle a mix of structural and behavioral constructs. For a view of the current state of Icarus Verilog, see its home page at . -IVL is not aimed at being a simulator in the traditional sense, but a -compiler that generates code employed by back-end tools. These back- -end tools currently include a simulator written in C++ called VVM -and an XNF (Xilinx Netlist Format) generator. See "vvm.txt" and -"xnf.txt" for further details on these back-end processors. In the -future, backends are expected for EDIF/LPM, structural Verilog, etc. +Icarus Verilog is not aimed at being a simulator in the traditional +sense, but a compiler that generates code employed by back-end +tools. These back- end tools currently include a simulator written in +C++ called VVM and an XNF (Xilinx Netlist Format) generator. See +"vvm.txt" and "xnf.txt" for further details on these back-end +processors. In the future, backends are expected for EDIF/LPM, +structural Verilog, etc. -2.0 Building/Installing IVL From Source +2.0 Building/Installing Icarus Verilog From Source If you are starting from source, the build process is designed to be as simple as practical. Someone basically familiar with the target @@ -36,9 +37,9 @@ on a UNIX-like system: satisfactory make. - ISO C++ Compiler - The ivl program is written in C++ and makes use of templates - and some of the standard C++ library. egcs compilers with - the associated libstdc++ are known to work. + The ivl and ivlpp programs are written in C++ and makes use + of templates and some of the standard C++ library. egcs + compilers with the associated libstdc++ are known to work. - bison @@ -66,7 +67,7 @@ root. make install -3.0 How IVL Works +3.0 How Icarus Verilog Works This tool includes a parser which reads in Verilog (plus extensions) and generates an internal netlist. The netlist is passed to various @@ -115,12 +116,10 @@ first, followed by the structural and behavioral elaboration. 3.3.1 Scope Elaboration -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 +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 handling this phase. The tail of the elaborate_scope behavior (after the pform is @@ -131,7 +130,7 @@ the defparam overrides are applied to the parameters. 3.3.2 Netlist Elaboration After the scopes and parameters are generated and the NetScope tree -fully formed, the elaboration runs through teh pform again, this time +fully formed, the elaboration runs through the pform again, this time 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 @@ -173,7 +172,7 @@ done in a friendly way. See the iverilog(1) man page for usage details. 4.1 Running IVL Directly The ivl command is the compiler driver, that invokes the parser, -optimization functions and the code generator. +optimization functions and the code generator, but not the preprocessor. Usage: ivl ... file ivl -h @@ -305,7 +304,7 @@ To run the program 5.0 Unsupported Constructs IVL is in development - as such it still only supports a (growing) subset -of verilog. Below is a description of some of the currently unsupported +of Verilog. Below is a description of some of the currently unsupported verilog features. This list is not exhaustive, and does not account for errors in the compiler. See the Icarus Verilog web page for the current state of support for Verilog. @@ -327,20 +326,10 @@ current state of support for Verilog. assign foo = user_function(a,b); // sorry always @(a or b) foo = user_function(a,b); // OK - - multiplicative operators (*, /, %) are not supported in - general. They do work if the compiler can evaluate them at compile - time. - - assign foo = a * b; // sorry - always @(a or b) foo = a * b; // sorry - - real data type not supported. - - system functions are not supported. (User defined functions are - supported, and system tasks are supported.) - - assign foo = $some_function(a,b); // sorry - always @(a or b) foo = $some_function(a,b); // sorry + - System functions are supported, but the compiler presumes that + they return 32 bits. This is the typical case. - non-constant delay expressions, i.e.: