The if statement is a statement that depending on the value of one or more corresponding conditions, selects for execution one or none of the enclosed sequences of statements,.
if condition then
sequential_statements
end if;
if condition then
sequential_statements
else
sequential_statements
end if;
if condition then
sequential_statements
elsif condition then
sequential_statements
else
sequential_statements
end if;
The if statement controls conditional execution of other sequential statements. It contains at least one Boolean condition (specified after the if keyword). The remaining conditions are specified with the elsif clause. The else clause is treated as elsif true then. Conditions are evaluated one by one until any of them turns to be true or there are no more conditions to be checked for. When a condition is true then the sequence of statements specified after the then clause is executed. If no condition is met then the control is passed to the next statement after the if statement.
The if statement can be used in a simplified form, often called if-then statement, where neither elsif nor else clause is supported (example 1).
In case when meeting a condition should cause some statements to be executed, but when it is not met some other actions should be performed, the else clause is used (example 2).
The elsif clause is used when different nested conditions have to be checked (example 3). This can be used for prioritizing conditions and signals.
The if statements can be nested (example 4).
Example 1
I1: if Status_Signal = hold
then
A1: Outputs <= 'X';
end if I1;
The assignment will be realized only when the condition Status_Signal
= hold is true. Otherwise, the statement that follows the end if I1
will be executed.
Example 2
function AND_FUNC (x, y: in
Bit) return Bit is
begin
I2: if x = '1' and
y = '1'
then return '1';
else return '0';
end if I2;
end AND_FUNC;
When the variables x and y are both equal to '1', then the function
returns the value '1'. Otherwise, '0' is returned.
Example 3
Signal Code_of_Operation :
Bit_Vector(1 downto 0);
I3: if Code_of_Operation(1)
= '1'
then
F := Operand_1 + Operand_2;
elsif
Code_of_Operation(0) = '1'
then
F := Operand_1 - Operand_2;
else
F := "00000000";
end if I3;
In this example, the bit number 1 of the Code_of_Operation has a
higher priority than bit number 0. When the bit number 1 has a
'1'value, then the two operands are added. If not (i.e. it is '0'),
then the bit number 0 is checked. If it is '1', then the two operands
are subtracted. Otherwise, when both bits of the Code_of_Operation
are '0', the F signal is assigned all zeros.
Example 4
if Status = RUN
then
if
Code_of_Operation = CONC
then
F := Operand_1 &
Operand_2 ;
else
F := "00000000";
end if;
Output_1 <= F;
end if;
Nesting of if statements is legal, but you should be careful not to
confuse the statement levels.
One of the most typical errors with the if statements is to skip the space between end and if, at the end of the statement, and writing it as endif.
If is a sequential statement that cannot be used in the concurrent statements section of an architecture. If assigning a new value to a signal must be influenced by a specific condition, then a conditional signal assignment should be used (which in turn cannot be used inside processes and procedures).