1 votos

¿En qué casos debo utilizar Z como salida en HDL?

He creado un multiplexor simple que se alimenta de entrada diferente en la salida en función de statemachine. Ahora bien, hay estados en los que no necesito la salida, así que suelo ponerla a 0.

INST <= "01" WHEN fsm_state =  read_first_half
                OR fsm_state =  read_second_half 
                OR fsm_state =  next_r ELSE
      "10" WHEN fsm_state =  write_first_half   
                OR  fsm_state =  write_second_half 
                OR  fsm_state =  next_w 
                ELSE  "00";

Que yo recuerde había un tercer valor sintetizable 'Z'. Que yo recuerde es un valor flotante con alta impedancia. ¿Cuándo lo uso y es seguro usarlo? ¿Será sintetizable en todas las FPGAs?

3voto

Rob Lachlan Puntos 7880

Cuando no te importa un valor de salida dado un conjunto de entradas, utiliza '-', que significa "no me importa". El sintetizador simplemente asignará valores que optimicen los recursos/rendimiento. Tenga en cuenta que un simulador sin embargo tiene la opción de mantener "-" como un valor real, y esto realmente le ayudará a asegurarse de que tener un "no me importa" no afectará a las partes pertinentes de su diseño.

La 'Z' o "alta impedancia" en las FPGAs sólo se utiliza para las salidas tri-state, que hoy en día sólo están disponibles en los pines reales del chip, no para la lógica interna. Los fabricantes de FPGAs modernas simplemente no asignan recursos de enrutamiento interno para ellas, y sólo están pensadas para la interconexión con chips/componentes externos. Para la lógica interna, la misma funcionalidad (como el arbitraje de bus) se puede conseguir con puertas lógicas normales.

Estas definiciones se encuentran en la biblioteca IEEE std_logic_1164.vhdl: http://standards.ieee.org/downloads/1076/1076.2-1996/std_logic_1164.vhdl

0voto

javada Puntos 61

No hay realmente una razón para poner una salida en tristate ('Z') si el IO es sólo una salida y no un 'inout'. Además, tener un '1' o un '0' en la salida facilita la depuración (medición).

0voto

FarhadA Puntos 1008

Se me ocurren muchos casos en los que utilizarías la Z en señales, tanto internas como en los pines. Por ejemplo, si tienes un bus que es conducido desde múltiples fuentes, puedes controlarlo poniendo todas las otras señales de conducción a Z. Algunas FPGAs soportan esto internamente, pero no todas.

En cuanto a las señales de salida, muchas veces, no quieres conducir señales, como datos fuera de tu FPGA, porque esas señales pueden ser compartidas entre múltiples dispositivos. Algunos optan por cambiar la dirección de las señales en lugar de poner la salida a Z, lo que facilita la depuración.

0voto

Martin Thompson Puntos 6509
INST <= "01" WHEN fsm_state =  read_first_half
                OR fsm_state =  read_second_half 
                OR fsm_state =  next_r ELSE
      "10" WHEN fsm_state =  write_first_half   
                OR  fsm_state =  write_second_half 
                OR  fsm_state =  next_w 
       ELSE  "--"; -- don't cares

El sintetizador debería llegar a algo óptimo (pero no necesariamente predecible)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X