Plantilla de lenguaje ISE de Xilinx para máquinas de estado

En Xilinx ISE, si revisa los ejemplos de máquina de estado proporcionados en "Plantilla de idioma" (VHDL->Construcciones de síntesis->Ejemplos de codificación->Máquinas de estado y Verilog->Construcciones de síntesis->Ejemplos de codificación->Máquinas de estado) tenga en cuenta que los ejemplos para VHDL se proporcionan en el estilo de "dos procesos" que separa la lógica de decodificación (o dirección) del siguiente estado del proceso de almacenamiento de estado (este es el estilo que practico y sé que muchos profesionales recomiendan este estilo). Sin embargo, los ejemplos de Verilog son solo un gran bloque "siempre".

Tengo curiosidad por saber por qué las plantillas de máquina de estado de Verilog se proporcionan de manera diferente, ¿alguien tiene alguna idea sobre esta diferencia?

¡Gracias!

Uso el estilo de proceso único en VHDL. Es más simple, más corto, más fácil de hacer bien y lo usan la mayoría de los profesionales que conozco. Pero no se enseña en muchos libros de texto. Algunos académicos parecen tener opiniones negativas al respecto, pero nunca he visto ninguna razón sustancial detrás de eso.
@BrianDrummond: gracias por tu comentario. Realmente no estaba discutiendo sobre qué método es el mejor y el más práctico, y tampoco tengo fuertes objeciones en su contra. Supongo que todos deberían seguir el método que les funcione mejor.

Respuestas (1)

Creo que tiene que ver con quien escribió el ejemplo y cuándo se escribió originalmente. Ambos bloques individuales y dos siempre funcionan. Para conocer las diferencias en los estilos de codificación de Verilog, sugiero leer este artículo de Cliff Cummings. El documento ahora está un poco anticuado, pero los puntos siguen siendo válidos. Experimente con su propio sintetizador. Siempre uso los dos alwaysbloques (un decodificador combinacional, una asignación secuencial) como se recomienda en el documento. Me da la mejor área, sincronización y es ECO amigable con mi juego de herramientas.

El IEEE Std 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 bloque único siempre más declaraciones de asignación para evitar el riesgo de cometer un error al administrar la lista de confidencialidad. Algunos usaron (o escribieron allí) scripts para administrarlo por ellos; ejemplo, el script de Emacs Verilog-Mode .

En IEEE Std 1364-2001, el estándar se introdujo @*como una lista de sensibilidad automática. Pero tomó algunos años para que fuera compatible con diferentes simuladores, sintetizadores y otras herramientas de verilog. Los ejemplos en su Xilinx ISE probablemente se escribieron antes de @*que Xilinx fuera compatible y desde entonces nadie ha realizado una revisión de actualización de los ejemplos.