Immediate assertions evaluate a boolean expression at a single point in time to check if a condition is true. Concurrent assertions describe behavior over time using a clock and can check for conditions over multiple clock cycles. Concurrent assertions use special operators like ## and [*] to specify delays between boolean expressions and check sequences of expressions in linear time. Useful SystemVerilog functions in concurrent assertions check for signal rises, falls, stability, past values, and sampling based on a clock.