Functions are similar to tasks, but return a value. The format for a function is:
function data_type function_name(inputs);
declarations;
statements;
endfunction : function_name
The final function_name
is optional but does make the code easier to
read.
Because the function returns a value, it must either have a return statement or specifically state the function name:
function_name = ....
Like tasks, functions can also be automatic or static.
CAUTION:
Vivado synthesis
treats all functions as automatic. However, some simulators might behave differently. Be
careful when using these functions with third-party simulators.