¿Cómo se sintetizará esta línea Verilog?

3

¿Cómo se sintetizará esta línea Verilog?

data = (s == 0) ? bus0 : 16’hz

El problema es que si uso mux / buffer no pondrá Z si s!=0 porque la salida de mux / buf es x (no definida) si la entrada es z.

    
pregunta 0x90

2 respuestas

6

Supondré que estás trabajando en un FPGA. Si está hablando de un ASIC, espere una respuesta de alguien que sepa algo sobre los ASIC.

Primero, es datos un cable o un registro, ¿y está conectado a un pin? Si es un cable, la línea debe comenzar con la palabra "asignar". Si es un registro, la línea debería incluirse en algún tipo de bloque siempre o inicial o similar. También sería mejor usar '< =' en lugar de '=' para obtener una simulación que se adapte mejor a la síntesis.

Si datos es un pin de salida, esto se sintetizará como un búfer de estado de estado.

Si datos es un registro interno, es probable que no sea un código sintetizable, a menos que esté trabajando en un FPGA muy antiguo (¿era XC4000 o anterior?). Lo que realmente se produce es un capricho de su herramienta de síntesis y puede ser diferente para diferentes herramientas. Sería mucho más preferible establecer todos los 0 o todos los 1, y luego explícitamente O o Y juntos todos los controladores diferentes para el bus de datos .

En cualquier caso, si está simulando este código, en lugar de sintetizarlo, y no hay otros controladores para datos , el simulador es bastante correcto para establecer el valor en 'x', porque no hay manera de predecir de qué manera se desviará la señal de triple estado en el uso real.

La mayoría de los simuladores simplemente simulan el código exactamente como es, en lugar de adivinar qué sintetizará y luego simularlo. Eso significa que el código no sintetizable simulará perfectamente bien, aunque no necesariamente se comportarán correctamente cuando se implemente en su FPGA.

    
respondido por el The Photon
-2

No deberías estar escribiendo código como este. Recuerde que el trabajo de los compiladores es tratar de simplificar la lógica, su trabajo es ser lo más claro posible al definir el requisito, no intentar impresionar con trucos "inteligentes". Además, tenga en cuenta que la salida de los compiladores puede variar dependiendo del conjunto de herramientas y precompiladores que utilice.

    
respondido por el bob

Lea otras preguntas en las etiquetas