$fatal vs $error - Runtime errors

$fatal and $error cause simulation to stop when they are executed. I am not able to understand why we have two system tasks for the same purpose.

In reply to Krishna9:

Only $fatal is guaranteed to stop the simulation. A simulator can choose to stop on any other construct. $fatal usually means it’s pointless to continue, whereas some poeple want to collect as many $errors as they can while the test is running.