Saltar al contenido

¿Cómo puedo especificar señales de “no me importa” en VHDL?

Te recomendamos que pruebes esta resolución en un entorno controlado antes de enviarlo a producción, un saludo.

Solución:

Dejaré que un experto en LRM brinde una respuesta más detallada, pero en resumen, su enfoque debería ser válido: realicé una prueba rápida con una versión reciente de Quartus y maneja '-' como se supone que debe hacerlo: la lógica generada se reduce como se esperaba cuando la salida está predeterminada en '-' ('X' también funciona, por cierto). Más sobre los enfoques que enumeró:

  • No asignar la señal no es realmente una opción para su ejemplo, por supuesto, si no quiere pestillos. Si se trata de un proceso cronometrado, está un poco mejor, pero aún obtendrá habilitaciones donde quizás no las necesite. Tal vez me estoy perdiendo tu intención aquí.

  • '-', como se señaló anteriormente, es probablemente la mejor opción, tanto por razones semánticas como prácticas.

  • Depende de lo que entiendas por “indefinido”. 'X' es técnicamente “desconocido”. 'U' es para señales no inicializadas, que ModelSim muestra como "X" para representaciones hexadecimales. 'X' Sin embargo, parece funcionar, como señalé anteriormente.

Otra alternativa sería realizar la optimización usted mismo y eliminar un caso para que no se pruebe explícitamente:

if instruction(15 downto 8) = "11111001" then
  write_data <= std_ulogic_vector(resize(signed(instruction(7 downto 4)), 16));
else
  write_data <= std_ulogic_vector(resize(signed(instruction(7 downto 0)), 16));
end if;

Sin embargo, esto tiene desventajas significativas (principalmente relacionadas con la claridad del código), y probablemente optaría por una solución más ideal.

De paso, '-' también se usa comúnmente con std_match(), que consideraría usar para su decodificación, por ejemplo:

if std_match(instruction(15 downto 8), "1100----") then

Aunque llegados a ese punto, probablemente sea mejor que utilices case?.

En resumen: es VHDL legal y normalmente es compatible con herramientas de síntesis.

Sin embargo, es bastante raro verlo usado. Realmente no sé por qué. Me parece que su código es un buen ejemplo de cuándo sería significativo usarlo.

Sin embargo, hay un inconveniente que uno debe tener en cuenta: en la síntesis, las funciones que impulsan las salidas donde están involucradas las que no importan podrían ser diferente entre ejecuciones de síntesis. Esto hace que la síntesis sea menos determinista. Si se utilizan salidas que se han definido como no importantes (por error), esto puede hacer que el error sea más difícil de encontrar.

Soporte de herramientas

Al menos las siguientes herramientas aceptarán "no importa" y harán uso de las posibilidades de optimización:

  • Xilinx (ref.: "Guía del usuario de XST")
  • Altera (ref.: "Estilos de codificación HDL recomendados")
  • Synplify (ref.: "Manual de referencia de Synplify")

Xilinx y Altera tratarán '-' y 'X' como no importa, Synplify los tratará y además 'U' y 'W' (débil) como no me importa.

Te mostramos comentarios y puntuaciones

Ten en cuenta compartir esta noticia si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *