vlog95: Emit initial blocks for tasks or functions.
vlog95: Emit initial blocks for tasks or functions.

In SystemVerilog a task or function can initialize a variable in a task or
function. In Icarus this is done by creating an initial block that does
the assignment. We can translate this by emitting the initial block in the
enclosing module scope. This is not 100% correct since SystemVerilog
requires the initialization to be done before the other initial/always
blocks are processed. For SystemVerilog the current Icarus behavior is
incorrect, but even if it had a new process type that ran before the other
ones the best I can do for vlog95 is emit it before the normal module
processes which currently works.

CastMi/iverilog,CastMi/iverilog,CastMi/iverilog,themperek/iverilog,themperek/iverilog,themperek/iverilog