diff --git a/README.md b/README.md
index b9e81da55..5f05311e0 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,35 @@
Copyright 2000-2019 Stephen Williams
+
+Table of Contents
+
+1. [What is ICARUS Verilog?](#what-is-icarus-verilog)
+2. [Building/Installing Icarus Verilog From Source](#buildinginstalling-icarus-verilog-from-source)
+ - [Compile Time Prerequisites](#compile-time-prerequisites)
+ - [Compilation](#compilation)
+ - [(Optional) Testing](#optional-testing)
+ - [Installation](#installation)
+3. [How Icarus Verilog Works](#how-icarus-verilog-works)
+ - [Preprocessing](#preprocessing)
+ - [Parse](#parse)
+ - [Elaboration](#elaboration)
+ - [Optimization](#optimization)
+ - [Code Generation](#code-generation)
+ - [Attributes](#attributes)
+4. [Running iverilog](#running-iverilog)
+ - [Examples](#examples)
+5. [Unsupported Constructs](#unsupported-constructs)
+6. [Nonstandard Constructs or Behaviors](#nonstandard-constructs-or-behaviors)
+ - [Builtin system functions](#builtin-system-functions)
+ - [Preprocessing Library Modules](#preprocessing-library-modules)
+ - [Width in %t Time Formats](#width-in-t-time-formats)
+ - [vpiScope iterator on vpiScope objects](#vpiscope-iterator-on-vpiscope-objects)
+ - [Time 0 Race Resolution](#time-0-race-resolution)
+ - [Nets with Types](#nets-with-types)
+7. [Credits](#credits)
+
+
## What is ICARUS Verilog?
@@ -30,6 +59,8 @@ not required, but helpful in case of problems.
### Compile Time Prerequisites
+You can use: `apt install -y autoconf gperf make gcc g++ bison flex`
+
You need the following software to compile Icarus Verilog from source
on a UNIX-like system:
@@ -77,6 +108,9 @@ on a UNIX-like system:
### 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:
@@ -85,6 +119,10 @@ with the commands:
./configure
make
```
+
+
+
+From GitHub
If you are building from git, you have to run the command below before
compiling the source. This will generate the "configure" file, which is
@@ -92,6 +130,8 @@ automatically done when building from tarball.
```
sh autoconf.sh
+ ./configure
+ make
```
Normally, this command automatically figures out everything it needs
@@ -126,6 +166,7 @@ configure script that modify its behaviour:
i686-w64-mingw32 for building 32-bit Windows executables
Both options require installing the required mingw-w64 packages.
```
+
### (Optional) Testing
@@ -251,7 +292,7 @@ to generate actual output.
The user selects the target code generator with the `-t` flag on the
command line.
-### ATTRIBUTES
+### Attributes
> NOTE: The $attribute syntax will soon be deprecated in favour of the Verilog-2001 attribute syntax, which is cleaner and standardized.
@@ -298,7 +339,7 @@ compiler (`ivl`) with the proper command line options to get the job
done in a friendly way. See the `iverilog`(1) man page for usage details.
-## EXAMPLES
+### EXAMPLES
Example: Compiling `"hello.vl"`
@@ -467,7 +508,7 @@ to specify a minimum width (i.e., `%5t`), then for that display
Icarus Verilog will override the `$timeformat` minimum width and
use the explicit minimum width.
-### vpiScope iterator on vpiScope objects.
+### vpiScope Iterator on vpiScope Objects
In the VPI, the normal way to iterate over vpiScope objects
contained within a vpiScope object, is the vpiInternalScope
@@ -477,7 +518,7 @@ the is contained in the current scope. This is useful in cases
where one wants to iterate over all the objects in a scope
without iterating over all the contained types explicitly.
-### time 0 race resolution.
+### Time 0 Race Resolution
Combinational logic is routinely modelled using always
blocks. However, this can lead to race conditions if the
@@ -504,7 +545,7 @@ are new keywords. Typical syntax is:
flag to iverilog.
-## CREDITS
+## Credits
Except where otherwise noted, Icarus Verilog, ivl and ivlpp are
Copyright Stephen Williams. The proper notices are in the head of each