In reply to Akhil Mehta:
They both have similar functionality, but very different purposes.
Both exclude values from existing implicit or explicit bin specifications and can be used for debugging purposes.
Sometimes it’s easier to create a broad value bin range and then explicitly exclude specific values from coverage versus trying to create many disjoint ranges (e.g. 1-20 except 6 and 12, versus 1-5, 7-11, 13-20).
Hitting an illegal bin is something that should never happen in a testbench and generates an error. Whether it stops the simulation or not is a tool specific implementation. In any case hitting an illegal bin should throw out all of the coverage collected for that test.