declaración de rango constante VHDL

4

Tengo un montón de paquetes de red y estoy tratando de especificar campos en ellos, algo así como

constant UPPER_BOUND : natural := 15;
constant LOWER_BOUND : natural := 7;

Sé que esta sintaxis es CORRECTA

El rango no cambia a lo largo de la aplicación y estaba pensando si es posible en la sintaxis VHDL declarar constant range si lo desea. Algo en el efecto de:

constant FIELD_RANG : natural range := (15 downto 7);

Sé que esta sintaxis es INCORRECTA

Pero, ¿estaba tratando de entender si es posible especificar un rango genérico? ¿Es la primera sintaxis mencionada la única forma de hacer esto?

    
pregunta boffin

1 respuesta

14

Creo que la segunda línea debería ser

constant LOWER_BOUND : natural := 7;

arriba. (OK, es ahora! :-) Pero de todos modos ... ¡Bienvenido a un idioma con un sistema de tipos adecuado! Aprende a usarlo, y te encantará. O aprende a luchar contra él, y lo odiarás. Tu elección ...

Lo que estás buscando es cualquiera de los dos

type Field_Range is range UPPER_BOUND downto LOWER_BOUND;

o

subtype Field_Range is Natural range UPPER_BOUND downto LOWER_BOUND;

según si desea seguridad de tipo, o una mezcla fácil de Field_Range con otras cantidades de enteros.

De cualquier manera usted puede decir

Field : Array(Field_Range) of Something;

for i in Field_Range loop
   ...
end loop

y (¡casi!) nunca más te preocupes por los errores de límites.

¿Cuál es la diferencia entre Tipo y Subtipo? Eso tomará un poco de aprendizaje, pero he aquí un comienzo:

si tiene lo siguiente,

constant N : Natural := 7;
constant F : Field_Range := N;

el subtipo lo permitirá, el nuevo tipo no lo hará, deberías convertir:

constant F : Field_Range := Field_Range(N);
    
respondido por el Brian Drummond

Lea otras preguntas en las etiquetas