Estaba leyendo esta página http://www.asic-world.com/verilog/verilog_one_day3.html cuando me encontré con lo siguiente:
Normalmente tenemos que resetear los flip-flops, por lo que cada vez que el reloj hace la transición de 0 a 1 (posedge), comprobamos si el reset está afirmado (reset síncrono), luego seguimos con la lógica normal. Si nos fijamos bien vemos que en el caso de la lógica combinacional teníamos "=" para la asignación, y para el bloque secuencial teníamos el operador "<=". Pues bien, "=" es asignación bloqueante y "<=" es asignación no bloqueante. "=" ejecuta el código secuencialmente dentro de un principio / fin, mientras que "<=" no bloqueante lo ejecuta en paralelo.
Estaba bastante seguro de que las asignaciones no bloqueantes eran secuenciales mientras que las bloqueantes eran paralelas. Después de todo, puedes hacer asignaciones bloqueantes con sentencias assign fuera de los bloques always, y todas ellas se ejecutan en paralelo. ¿Es un error, o el comportamiento es diferente dentro de un bloque always? Y, si el comportamiento ES diferente dentro de un bloque always, ¿pueden hacerse asignaciones no bloqueantes fuera de un bloque always?