Blocking or non-blocking statement (= vs. <=)

In reply to stefaniemcg:

Your conclusions are mainly correct, but not for the reasons mentioned.

The body of code inside tasks and functions are inlined/expanded in the place where they are called for synthesis. After expansion, that code follows the same synthesis coding guidelines for blocking and nonblocking assignments in any procedural code block.

However, assignments to the function’s return value, and task/function output arguments must use blocking assignments because they get copied out upon returning from the task/function. If you used non-blocking assignment, the argument values will not have been updated before being copied out.