20 votos

VHDL: ¿enteros para síntesis?

Estoy un poco confundido sobre si debo usar enteros en VHDL para señales de síntesis y puertos, etc.

Yo uso std_logic en los puertos de nivel superior, pero internamente me fue usando enteros ranqueados por todas partes. Sin embargo, me he topado con algunas referencias a la gente diciendo que sólo se debe utilizar firmado / sin firmar para la síntesis de código dirigido.

He rehecho mi proyecto actual para utilizar unsigned... y, bueno, es notablemente más feo.

¿Es una mala práctica utilizar números enteros? ¿Cuál es el problema? ¿Existe alguna incertidumbre sobre la anchura a la que la herramienta asignará los números enteros?

17voto

Martin Thompson Puntos 6509

Los números enteros están bien en síntesis, yo los uso todo el tiempo.

Yo uso std_logic en los puertos de nivel superior, pero internamente estaba usando enteros ranged por todas partes

¡Está bien!

Ten cuidado:

  • Primero estás simulando, ¿no? :) - Los tipos enteros no se "rolan" automáticamente en simulación - es un error salirse del rango que has especificado para ellos. Si quieres que se produzca este comportamiento, tienes que codificarlo explícitamente.
  • Sólo están especificados para ir de \$-(2^{31}-1)\$ a \$+2^{31}-1\$ (es decir, no todo el rango de un entero de 32 bits, no puede utilizar \$-2^{31}\$ y seguir siendo portátil), lo que a veces resulta un poco pesado. Si necesitas utilizar números "grandes", tendrás que usar unsigned et signed .
  • Si no los constriñes, puedes a veces acabar con contadores de 32 bits donde bastaría con menos (si el sintetizador y las herramientas posteriores no pueden "ver" que podrían optimizar los bits).

En el lado positivo:

  • Son mucho más rápidos de simular que los vectores sin signo/signo
  • No se vuelcan automáticamente en simulación (sí, está en ambas listas :). Esto es útil: por ejemplo, te avisa con antelación de que tu contador es demasiado pequeño.

Cuando utilice tipos vectoriales, estará utilizando ieee.numeric_std , no ieee.std_logic_arith ¿verdad?

Utilizo integer s siempre que puedo, pero si quiero explícitamente "contadores de n bits que se vuelcan", tiendo a utilizar unsigned .

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