Block statements provide a mechanism to group sets of statements together. Sequential blocks have a begin and end around the statement. The block can declare its own variables, and those variables are specific to that block. The sequential block can also have a name associated with that block. The format is as follows:
begin [: block name]
end [: block name]
begin : my_block
temp = in1 & in2;
out1 = temp;
end : my_block
In the previous example, the block name is also specified after the end statement. This makes the code more readable, but it is not required.
Note: Parallel blocks (or fork join blocks) are not supported in Vivado synthesis.