Structured procedures provide a means of modeling blocks of
Functions and tasks are described in the section: Task and Functions.
The initial statement (Example
1) is executed only during a simulation run. The always
procedural block statement (Example
2) is executed continuously during simulation, i.e. when the
flow of program reaches the last statement in the block, the flow
continues with the first statement in the block.
The always statement should
contain at least one procedural timing control because otherwise it
may hang the simulation.
Module definition can contain more than one initial
or always statement.
Care must be taken when same reg type variables are used in multiple
procedural blocks, initial or always. This is because these blocks
run in parallel and changing or assigning to one variable affects the
same variable in another parallel block.
initial out = 1'b0;
a = 1'b0;
a = 1'b1;
a = 1'bz;
always @(posedge clk)
q = d;
always #10 clk = ~clk;
initial clk = 0;
The first initial statement sets clk to 0 at time 0, and the second
initial block toggles the clk 20 times every 10 time units.