Think of an immediate assertion as a "Sanity Check" embedded in your procedural code. Unlike concurrent assertions, they do not depend on clock cycles or temporal sequences. If the condition evaluates to false, the assertion fails immediately.
They are widely used inside always blocks, tasks, and
functions to verify logic correctness (e.g., checking invalid enum values).