Behavioural RTL resembles software.
A behavioural thread assigns to variables, makes reference to variables already updated and can re-assign new values.
Unlike 'pure RTL', the order of the statements has an effect.
The following behavioural code
if (k) x = y; z = !x;can be compiled down to the following, unordered 'pure RTL'.
x <= (k) ? y: x; z <= !((k) ? y: x);
Not all behavioural RTL is defined to `synthesisable' (see later, and also synthesis algorithm in additional material).