Pregunta de principiante: ¿cuáles son los atributos en VHDL?

2

¿Cuál es la diferencia entre constant s y attribute s en VHDL?

Sé que ambos pueden declararse y luego asignarse un valor dentro de la instalación. Hay algunos atributos predefinidos. Se accede a los atributos con ' . Tanto los atributos como las constantes se ven solo en su espacio de nombres principal, es decir, donde se declaran.

¿Cuándo se usa cada uno?

Más específicamente, estoy tratando de entender este código:

Entity TOP is  
   generic (
      DMA_BUFF_SZ_BYTES       :natural:= 1024;                          -- buffer size in bytes
      DATA_SZ                 :natural:=16 
   );
   port
   (
      n_flaga                 :in std_logic                            -- tx buffer is full
    );
   attribute syn_debug        :boolean;

   attribute syn_debug of     debug,
                              n_flaga   :signal is true; 
End TOP;

¿Para qué serían esos atributos? El nombre syn_debug no se usa en ningún otro lugar del proyecto.

    
pregunta Vorac

1 respuesta

4

Constantes independientes: puede crearlas de cualquier tipo con cualquier valor válido para ese tipo. Un uso típico es el Principio DRY : nombra una cantidad una vez (declarando una constante) y reutiliza la constante nombrada donde sea que necesites la cantidad. Facilita la comprensión y sobre todo el mantenimiento.

Los atributos VHDL siempre son atributos de algo. Si bien puede declarar sus propios atributos y adjuntarlos a objetos, la mayoría del uso es de atributos predefinidos, cuyos valores se toman directamente del objeto adjunto.

Entonces, si se le entrega una matriz, puede determinar su primer y último índice, su longitud o su rango (el tipo de datos usado para indexarlo), y así sucesivamente sin tener que pasar un montón de otros números. O, peor aún, ¡lee todo para encontrar el primer carácter NUL en él!

Entonces, por ejemplo, el atributo range da el tipo de la variable de índice, y puedes escribir funciones como

procedure foo (a : array (integer range <>) of integer) is
begin
  for i in a'range loop
    a(i) := ...
  end loop;
end foo;

y se itera correctamente sobre cualquier matriz, se puede pasar como parámetro.

Para más que este boceto, obtenga un buen libro sobre VHDL como la "Guía del diseñador para VHDL" de Ashenden

EDITAR: un uso común de los atributos creados por el usuario es adjuntar nuevos atributos a un objeto. En el ejemplo, el nuevo atributo es un valor booleano, y solo los dos objetos nombrados (señales en este caso) lo llevan.

En este caso, los atributos probablemente están documentados en el manual de la herramienta de síntesis (son específicos de esa herramienta), y la herramienta tratará cualquier señal que tenga ese atributo de una manera especial; en una conjetura, preservar esas señales y mantener su nombre original adjunto, para que sean más fáciles de encontrar en el diseño compilado. Vea también "Chipscope", una herramienta de análisis de lógica incorporada, mencionada en la respuesta de Martin a tu otra pregunta . Espero que Chipscope encuentre estas señales fácilmente.

Esto es importante porque las herramientas de síntesis suelen ser optimizadores agresivos; Si la señal probablemente no se usó o era un duplicado de otra señal, se eliminaría por completo sin el atributo.

    
respondido por el Brian Drummond

Lea otras preguntas en las etiquetas