VHDL signal is the object used to describe an electrical wire connection or a register. VHDL signal is the way to have a communication between VHDL processes, whereas variable were meant to store a value inside a VHDL process. A variable is assigned without any delay whereas signal assignment lead to an event after a delta delay. This difference can induce design errors or simulation and synthesis mismatch. Thus, variable should only be used in processes, functions and procedures.
entity e is -- Noncompliant: Variable v not declared in process or function or procedure variable v : std_logic; begin ... end;
process -- Compliant: Variable v declared in process variable v : std_logic; begin ... end process;