VHDL y Verilog se diseñaron originalmente como lenguajes para describir el hardware para la simulación. Más tarde se reutilizaron como lenguajes para describir hardware para síntesis.
Hay dos estrategias para describir hardware, comportamiento y estructural. En la descripción del comportamiento, usamos el código del programa para describir cómo se comporta nuestro hardware. En la descripción estructural describimos nuestra pieza de hardware en términos de piezas más pequeñas de hardware.
La mayoría de los diseños prácticos utilizarán una mezcla de ambos. Por lo tanto, tiene pequeños bloques de comportamiento (siempre bloques en verilog, procesos en VHDL) dentro de un diseño estructural general.
Normalmente tenemos dos tipos principales de bloque de comportamiento. Los bloques "combinatorios" definen una función combinatoria de sus entradas. Lógicamente, se ejecutan cuando cambia alguna entrada y no tienen memoria.
Los bloques secuenciales normalmente se escriben para definir lo que sucede después del borde del reloj en términos de lo que sucedió antes del borde del reloj. Así es como conseguimos mantener un diseño determinista aunque todos los bloques activados por el mismo borde del reloj se ejecutan en un orden no determinista en el simulador y al mismo tiempo en el hardware sintetizado.
Si planeas sintetizar tu código, entonces debes pensar qué significan las cosas estructuralmente, incluso al definirlas de manera conductual, porque lo primero que hará el sintetizador es traducir tu descripción de comportamiento a una estructural. Los bucles se desenrollarán, las declaraciones aritméticas y lógicas se convertirán en bloques de hardware aritméticos y lógicos. Las declaraciones de control de flujo se convertirán en multiplexores (potencialmente muy amplios).