Throughout Icarus Verilog descriptions and source code, I use a variety of terms and acronyms that might be specific to Icarus Verilog, have an Icarus Verilog specific meaning, or just aren’t widely known. So here I define these terms.
- LRM - Language Reference Manual
This is a generic acronym, but in the Verilog world we sometimes mean the language reference manual, the IEEE1364 standard.
- PLI - Programming Language Interface
This is a C API into Verilog simulators that is defined by the IEEE1364. There are two major interfaces, sometimes called PLI 1 and PLI 2. PLI 2 is also often called VPI.
- UDP - User Defined Primitive
These are objects that Verilog programmers define with the “primitive” keyword. They are truth-table based devices. The syntax for defining them is described in the LRM.
- VPI - Verilog Procedural Interface
This is the C API that is defined by the Verilog standard, and that Icarus Verilog partially implements. See also PLI.
- VVM - Verilog Virtual Machine
This is the Icarus Verilog runtime that works with the code generator that generates C++.
- VVP - Verilog Virtual Processor
This is the Icarus Verilog runtime that reads in custom code in a form that I call “VVP Assembly”.
- LPM - Library of Parameterized Modules
LPM (Library of Parameterized Modules) is EIS-IS standard 103-A. It is a standard library of abstract devices that are designed to be close enough to the target hardware to be easily translated, yet abstract enough to support a variety of target technologies without excessive constraints. Icarus Verilog uses LPM internally to represent idealized hardware, especially when doing target neutral synthesis.