IF A = '0' THEN
[assignment #1]
ELSIF B = '0' THEN
[assignment #2]
ELSIF C = '0' THEN
[assignment #3]
END IF;
Assignment #1 obviously occurs when (A = '0'). The equation for assignment #2 is actually (A /= '0' AND B = '0'). The equation for assignment #3 is (A /= '0' AND B /= '0' AND C = '0'). When expanded in this fashion it becomes obvious that the delay for the ending ELSIF will be longer than the delay through the top IF. This should be considered when organizing an IF/ELSIF construct. In summary, if a priority encoder is desired, then the IF statement is the method of achieving it. But if a decoder is needed, a CASE statement is a much better choice.