Wait construct

what is the difference between wait(event) with and without semicolon at the end???

wait(expression), like Delay and @event are not statements in themselves, they are procedural timing controls. Any number of procedural timing controls can precede a procedural statement.

wait(A) @B #C D<=E;

is considered a single procedural statement

wait(A); @B #C D<=E;

is two procedural statements, the first being a null or empty statement.

This only matters when you have conditional or looping statements that enable another statement.

if (expression) wait(A) @B #C D<=E;

executes the assignment with all of the timing controls conditionally, whereas

if (expression) wait(A); @B #C D<=E;

only executes the wait timing control conditionally, but the rest of the line is an unconditionally executed statement.