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

1

Creé un multiplexor simple que alimenta diferentes entradas a la salida dependiendo de la máquina de estadísticas. Ahora hay estados en los que no necesito el resultado, por lo que normalmente lo configuro en 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";

Por lo que recuerdo, había un tercer valor sintetizable 'Z'. Por lo que recuerdo, es de valor flotante con alta impedancia. ¿Cuándo lo uso y es seguro usarlo? ¿Se podrá sintetizar en todos los FPGA?

    
pregunta SharkyLV

4 respuestas

3

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

'Z' o "alta impedancia" en FPGA solo se usa para salidas de tres estados, que en la actualidad solo están disponibles en los pines reales del chip, no para lógica interna. Los fabricantes de FPGA modernos simplemente no asignan recursos de enrutamiento internos para ellos, y solo están diseñados para interactuar con chips / componentes externos. Para la lógica interna, la misma funcionalidad (como el arbitraje de bus) se puede lograr con puertas lógicas regulares en su lugar.

Estas definiciones se pueden encontrar en la biblioteca IEEE std_logic_1164.vhdl: enlace

    
respondido por el apalopohapa
0

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

    
respondido por el vermaete
0

Puedo pensar en muchos casos en los que usarías la Z en las señales, tanto internas como en los pines. Por ejemplo, si tiene un bus que es manejado desde múltiples fuentes, puede controlarlo poniendo todas las demás señales de conducción en Z. Algunos FPGA son compatibles internamente, pero no todos.

En lo que respecta a las señales de salida, muchas veces, no desea controlar las señales, como los datos de su FPGA, porque esas señales pueden compartirse entre varios dispositivos. Algunos optan por cambiar la dirección de las señales en lugar de poner la salida en Z, lo que facilita la depuración.

    
respondido por el FarhadA
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  "--"; -- don't cares

El sintetizador debería ofrecer algo óptimo (pero no necesariamente previsible)

    
respondido por el Martin Thompson

Lea otras preguntas en las etiquetas