Creo que tiene que ver con quien haya escrito el ejemplo y cuándo se escribió originalmente el ejemplo. Tanto el single como el dos siempre bloquean el trabajo. Para conocer las diferencias en los estilos de codificación de Verilog, sugiero leer este documento de Cliff Cummings. El papel ahora está un poco anticuado, pero los puntos siguen siendo válidos. Experimenta con tu propio sintetizador. Siempre uso los dos bloques always
(un decodificador combinacional, una asignación secuencial) como se recomienda en el documento. Me da la mejor área, tiempo y es amigable con ECO con mi conjunto de herramientas.
El estándar IEEE 1364-1995 original, requería bloques combinacionales siempre para indicar explícitamente cada señal en la lista de sensibilidad. Si pierde una señal, el sintetizador seguirá dando el resultado correcto, pero es posible que no coincida con el comportamiento de RTL en la simulación. Para una máquina de máquinas de estado con muchas entradas, administrar la lista de sensibilidad era tedioso. Muchos diseñadores optaron por el enfoque de enunciado de bloque único y asignación única para evitar el riesgo de cometer un error al administrar la lista de sensibilidad. Unos pocos usaron (o escribieron allí) scripts para administrarlos; por ejemplo, el script de Emacs Verilog-Mode .
En IEEE Std 1364-2001, el estándar introdujo @*
como una lista de sensibilidad automática. Pero tomó algunos años para que sea compatible con diferentes simuladores, sintetizadores y otras herramientas de verilog. Los ejemplos en su Xilinx ISE probablemente se escribieron antes de que @*
fuera compatible con Xilinx y desde entonces nadie ha realizado una actualización de los ejemplos.