One problem most people have with VHDL or any other HDL languages is that they do not understand that this is not a sequential code. EVERYTHING you have inside a process happens in parallel.
The example from Ahmed is a good one:
PROCESS (count)
BEGIN
count <= not count;
END PROCESS;
An HDL simulator tries to set the value of the count to "not count" after each simulation tick, and the change will trigger another tick since the value of the count is changed and it keeps going on until it either crashes or gives you the above problem.
For an HDL to work properly you must use delays, either in form of a clock or if it is not for synthesis, to use an actual valued delay.
By changing the above code to
PROCESS (count)
BEGIN
count <= not count after 1 ns;
END PROCESS;
The simulation will work and the count will toggle every 1 ns.