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.