Asignando x en verilog

1

Suponga que existe un puerto de salida de datos de 1 bit y un puerto de salida dataValid de 1 bit para un módulo. ¿Está bien asignar 1'dx a la salida de datos cuando se asigna 0 a dataValid? ¿Creará esto problemas de síntesis?

EDITAR: las optimizaciones de X parecen ocurrir tanto en Synopsys DC como en Cadence RC. Considere este código (ayb son entradas de 1 bit y c es una salida de 1 bit).

always_comb
if ( !a && !b ) c= 0;
else if ( a && !b ) c = 1;
else if ( !a && b ) c = 1;
else c = 1'dx; // Don't care about this value.

proporciona una compuerta OR que es una solución optimizada en lugar de una XOR que se habría inferido si c se estableciera como 1'd0. Este es un ejemplo simple, pero parece probar que las herramientas de síntesis realizan la optimización X. Teniendo en cuenta los errores de propagación de X desagradables y los problemas de verificación, ¿valen las asignaciones de X el área guardada?

    
pregunta Revanth Kamaraj

4 respuestas

2

Nunca asigne una X en una ruta de código accesible, solo use X para propagar incógnitas de simulación. Esto hará la vida un poco más fácil a largo plazo. Si desea optimizar la lógica no importa, hágalo explícitamente (y elija el valor óptimo para el estado no utilizado). De esa manera, obtienes un comportamiento consistente más tiempo (con suerte siempre)

    
respondido por el Sean Houlihane
2

Dicha asignación es útil durante la simulación, para hacer que los gráficos de forma de onda sean un poco más claros.

La mayoría de las herramientas de síntesis simplemente ignorarán cualquier asignación a x . YMMV.

La asignación de z a un pin externo se puede usar para denotar un controlador de tres estados, pero la mayoría de los FPGA tienen soporte limitado para los autobuses de estados internos .

    
respondido por el Dave Tweed
1

El soporte de herramientas para 'x ya que no importa parece ser bastante bueno. DC lo admite, al igual que las herramientas Intel FPGA (Altera) y Xilinx.

Creo que generalmente es una buena idea. Normalmente, y para su ejemplo, la propagación de 'x en la simulación no debería ocurrir, ya que a otra lógica no debería importarle el valor de c en las condiciones que escriben 'x . (De lo contrario, no es "no importa", ¿verdad?) De hecho, el uso de 'x cuando crea que el valor no importa puede ayudar a identificar errores.

Sin embargo, hay casos en los que puede causar problemas. Por ejemplo, los protocolos de transceptor en serie a menudo utilizan codificadores de sincronización automática, que se descompondrían en la simulación si algunos de los bits en los datos de entrada son 'x , incluso si no le importa lo que esos bits terminen como en el receptor, incluso si funciona bien en hardware.

    
respondido por el pc3e
0

No hay nada como X para la síntesis. Se utiliza principalmente para la simulación para detectar cualquier problema relacionado con la línea de datos.

    
respondido por el Sourabh

Lea otras preguntas en las etiquetas