If a flip-flop is clocked at the wrong time (when the D input is changing) it may go meta-stable. You need to ensure this doesn't happen.
Synchronous RTL logic is the mechanism which can ensure this. The outputs of flip-flops go to so called combinatorial logic which perform logical operations (the exact operations are usually described with VHDL's "process" statement). The outputs of the combinatorial logic return back to the inputs of flip-flops. It takes tome for the combinatorial logic to settle. Once it settles, the inputs of the flip-flops become stable. At this point in time it is safe to clock the flip-flops.
The timing goes like that:
- All the flip-flops are clocked with the same clock
- Once they're clocked, their outputs change
- The change of the outputs causes the combinatorial logic to change
- The combinatorial logic changes for some time (often in unpredictable way)
- The combinatorial logic settles and produces desired outputs. Flip-flop inputs are now stable. It is safe now to clock them.
- Next clock edge comes. All the flip-flops are clocked at the same time. Hence the logic is called "synchronous".
The design tools make sure that the time necessary to settle the combinatorial logic is shorter than the period between clock edges. This limits how fast you can clock.
Now imagine a single asynchronous signal (not clocked by the same clock) comes into the system. The transition of the asynchronous signal may come at any time. If it comes exactly at the wrong time then some of the flip-flops may become metastable. The metastable flip-flops will oscillate. This will produce asynchronous changes in combinatorial logic, which may cause other flip-flops to become metastable causing system instability.
Not that you cannot deal with asynchronous signals, but it's better to avoid them if you can. At least, if you're just starting, better spend time getting familiar with the synchronous RTL logic.