¿Cómo asignar un valor hexadecimal al tipo entero en VHDL?

0

ModelSim no puede compilar esto en VHDL:

constant mem_size_bytes: integer := x"FFFFFFFF";

Dice:

Bit string literal found where non-array type std.STANDARD.INTEGER was expected.

Del mismo modo para;

if address< x"3FFFFF" then

dice

Operator "<" is ambiguous

Sigo corriendo en este problema. ¿Cómo en el mundo se supone que debo usar números hexadecimales en VHDL con tipos enteros como entero, natural y positivo? Es solo que especificar algo hexadecimal es más conveniente a veces que tener que usar la calculadora para determinar qué es algo en la raíz-10. Esperaba que la herramienta supiera automáticamente lo que significa el literal, ya que está precedida por x, que la marca como cantidad numérica hexadecimal.

Entonces, al asignar literales a constantes o al usar literales en el operador de comparación, ¿cómo califica uno el literal? En otras palabras, para un valor de constante literal como "1010", ¿cómo se le dice explícitamente al compilador si se trata de una cadena o std_logic_vector o no está firmado o firmado?

    
pregunta quantum231

1 respuesta

1

VHDL admite valores aritméticos, pero debe saber si están firmados o no. Recomiendo usar la biblioteca numeric_std para soportar estos tipos.

VHDL está fuertemente tipado. Para su primera pregunta, usaría:

EDITAR: He borrado una forma anterior más compleja y he usado una más simple después del comentario de Brian Dummond

constant mem_size   : integer := x"FFFF_FFFF";

La segunda dirección, suponiendo que es un std_logic_vector, debe escribirse:

if unsigned(address) < x"3FFFFF" then
    
respondido por el Claudio Avi Chami

Lea otras preguntas en las etiquetas