Merge pull request #998 from esola-thomas/esola-thomas/Enhance_README

README file enhancements
This commit is contained in:
Cary R 2023-09-11 21:03:17 -07:00 committed by GitHub
commit 778b6d937e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 46 additions and 5 deletions

View File

@ -2,6 +2,35 @@
Copyright 2000-2019 Stephen Williams Copyright 2000-2019 Stephen Williams
<details>
<summary><h2>Table of Contents</h2></summary>
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)
</details>
## What is ICARUS Verilog? ## What is ICARUS Verilog?
@ -30,6 +59,8 @@ not required, but helpful in case of problems.
### Compile Time Prerequisites ### 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 You need the following software to compile Icarus Verilog from source
on a UNIX-like system: on a UNIX-like system:
@ -77,6 +108,9 @@ on a UNIX-like system:
### Compilation ### Compilation
<details>
<summary><h4><a href="https://github.com/steveicarus/iverilog/releases">From Release</a></h4></summary>
Unpack the tar-ball and cd into the `verilog-#########` directory Unpack the tar-ball and cd into the `verilog-#########` directory
(presumably, that is how you got to this README) and compile the source (presumably, that is how you got to this README) and compile the source
with the commands: with the commands:
@ -85,6 +119,10 @@ with the commands:
./configure ./configure
make make
``` ```
</details>
<details>
<summary><h4>From GitHub</h4></summary>
If you are building from git, you have to run the command below before 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 compiling the source. This will generate the "configure" file, which is
@ -92,6 +130,8 @@ automatically done when building from tarball.
``` ```
sh autoconf.sh sh autoconf.sh
./configure
make
``` ```
Normally, this command automatically figures out everything it needs 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 i686-w64-mingw32 for building 32-bit Windows executables
Both options require installing the required mingw-w64 packages. Both options require installing the required mingw-w64 packages.
``` ```
</details>
### (Optional) Testing ### (Optional) Testing
@ -251,7 +292,7 @@ to generate actual output.
The user selects the target code generator with the `-t` flag on the The user selects the target code generator with the `-t` flag on the
command line. 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. > 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. done in a friendly way. See the `iverilog`(1) man page for usage details.
## EXAMPLES ### EXAMPLES
Example: Compiling `"hello.vl"` 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 Icarus Verilog will override the `$timeformat` minimum width and
use the explicit minimum width. 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 In the VPI, the normal way to iterate over vpiScope objects
contained within a vpiScope object, is the vpiInternalScope 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 where one wants to iterate over all the objects in a scope
without iterating over all the contained types explicitly. without iterating over all the contained types explicitly.
### time 0 race resolution. ### Time 0 Race Resolution
Combinational logic is routinely modelled using always Combinational logic is routinely modelled using always
blocks. However, this can lead to race conditions if the blocks. However, this can lead to race conditions if the
@ -504,7 +545,7 @@ are new keywords. Typical syntax is:
flag to iverilog. flag to iverilog.
## CREDITS ## Credits
Except where otherwise noted, Icarus Verilog, ivl and ivlpp are Except where otherwise noted, Icarus Verilog, ivl and ivlpp are
Copyright Stephen Williams. The proper notices are in the head of each Copyright Stephen Williams. The proper notices are in the head of each