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!
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 always
bloques (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.
usuario_1818839
Ali