In Verilog, continuous assignments can only drive nets, and not variables.
SystemVerilog removes this restriction, and permits continuous assignments to drive nets any type of variable.
Nets can be driven by multiple continuous assignments, or a mixture of primitives and continuous assignments.
Variables can only be driven by one continuous assignment or one primitive output. It shall be an error for a variable driven by a continuous assignment or primitive output to have an initializer in the declaration or any procedural assignment.
The fork...join construct enables the creation of concurrent processes from each of its parallel statements.
The syntax to declare a fork...join block is:
statement1; // one process with 2 statements