Constante literal numérica en el tratamiento de VHDL

1

Me preguntaba si hay una forma especial de tratar la constante literal numérica de manera similar al lenguaje C ... es decir, en C podemos hacer algo como:

1LL //signed long long
1ULL //unsigned long long

etc

¿hay algo similar en VHDL que no conozco?

    
pregunta user8469759

3 respuestas

1

En VHDL, la declaración constante requiere que se especifique el tipo. La longitud es generalmente al horno en el tipo. Por ejemplo

constant my_constant : unsigned(63 downto 0):= X"0000000000000001";

Cada vez que una señal es activada por una constante numérica, es necesario hacer coincidir la longitud constante con la longitud de la señal.

Por ejemplo:

signal my_signal : unsigned(63 downto 0);
....
my_signal <= X"0000000000000001";

Dado que VHDL está fuertemente tipada, si la longitud literal no coincide con la declaración de la señal, producirá un error.

Como mencionó jeff, también es posible usar to_unsigned, de la siguiente manera:

my_signal <= x + y + to_unsigned(1,my_signal'length);
    
respondido por el stanri
0

Todos los literales de enteros son enteros de 32 bits con signo. Así que a partir de ahora, VHDL tiene solo un tipo entero, por lo que no se necesita ningún prefijo o sufijo para distinguir los literales.

Por causa puede declarar subtipos de entero:

subtype T_INT_8  is INTEGER range -128 to 127;
subtype T_UINT_8 is INTEGER range 0 to 255;

Hay una discusión si VHDL debería extenderse para admitir enteros de 64 bits (y literales) o incluso más.

Discusiones sobre el twiki "P1076 Working Group":

respondido por el Paebbels
0

Un objeto con un tipo de firmado o sin firmar de los paquetes IEEE numeric_bit y numeric_std es un tipo de matriz compuesto por elementos ordenados secuencialmente de un tipo enumerado.

Un objeto de un tipo de matriz con un tipo de elemento enumerado puede tener un valor proporcionado por la cadena literal, siempre que la cadena solo contenga valores de caracteres de literales que comprendan los valores de elementos de los tipos de enumeración.

Además de los literales de cadena, hay literales de cadena de bits que en -2008 con la adición de un prefijo de longitud, el valor entero puede recortar o extender un valor literal de cadena derivado de la evaluación de un literal basado.

Además, en -2008 hay prefijos firmados y sin firmar para los especificadores de base B, O y X, y un especificador de base adicional D.

Usando la sintaxis -2008 puede expresar 1ULL como 64X "1" y 1LL como 64SX "1" por un largo compuesto de un valor de 32 bits. Hay otras representaciones literales basadas.

Vale la pena leer la sección correspondiente de los literales de cadena de 15.8 bits estándar de -2008, ya que puede haber otras referencias.

    
respondido por el user8352

Lea otras preguntas en las etiquetas