-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Just to be clear, you don't need to know any of this in order
to use Icarus Verilog. The vvp format can be treated as a compiled
form generated by the iverilog -tvvp compiler, and run by the vvp
engine. I'm assuming from the detail you are requesting that you
want to know "how and why" in order to poke and prod for pleasure
or to work on the compiler generator or vvp engine.

Karthik Parashar wrote:

> As i understand, broadly, there are 2 types of 
> arithmetic and logical instruction.
> 
> The structural type and the procedeural(supposedly
> generated from the behavioral code)
> What does it mean in terms of verilog code, to
> generate 
> 
> 1.a structural addition like .arith/add
> 2.an indexed addition like %ix/add
> 3.a behavioral addition %add

Structural addition (or any structural operation) comes from
things like continuous assignments or module port bindings.
They are things that react to stimulus and are simulated by
passing events around through nets. An example:

  wire [7:0] foo = a + b;

This is a continuous assignment, and you will get an .arith/add
node out of it. There are similar nodes for the whole bunch of
different operators that are available in continuous assign and
similar contexts.

What's distinct about these is that they are connected together
in a graph of links, and they are simulated by propagating
values through the netlist. Propagations create scheduling
items that are enqueued and scheduled.

> Also since the above class of instructions exist for
> other arithmetic and logical instructions, it is
> important to understand this distiction so as to
> understnad VVP.

It helps, I think.

> Similarly, there are thread load/store and the index
> register load store instructions. 
> As i understand, all the nets and vars are modeled as
> thread wise, single bit registers where as the index
> registers are used to load and store from memory or
> store temporary states of nets and vars.

Not quite. The nets and variables are structural items line
.net, .var, etc. The threads contain private registers that
it uses for doing processing on values. There are bit registers
that carry 01xy values, and there are word (formally index) and
real registers that carry word and real values.

The "%foo ..." statments are sequentially executed statements
that look and smell a lot like a typical CPU assembly language.
There are statements to read values from the netlist, write
values to variables in the netlist, and process values that
are read into thread working registers. Behavioral code, which
is inherintly sequential, is translated into this sort of
code much the way that C compilers make assembly statements.
The obvious difference is that the "memory" is actually the
netlist made up by the structural statements, and there are
different classes of registers for holding values.

- --
Steve Williams                "The woods are lovely, dark and deep.
steve at icarus.com           But I have promises to keep,
http://www.icarus.com         and lines to code before I sleep,
http://www.picturel.com       And lines to code before I sleep."
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFD6N0OrPt1Sc2b3ikRAsMJAJ4qKsqbr44dlFTHBSKgIfKafR0fiACcCWY1
xEuzjJhC3KWQ1H6pTpR02ig=
=s+3c
-----END PGP SIGNATURE-----

Reply via email to