to_unsigned std_logic_vector entero convertir conv_integer binario string integer type-conversion vhdl

string - std_logic_vector - to_unsigned vhdl



¿Cómo convertir una cadena a entero en VHDL? (2)

Estoy cargando datos de texto en un banco de pruebas VHDL y quiero convertir cadenas de entrada en valores enteros.

por ejemplo: "123" => 123

¿Alguien puede recomendar una "mejor" forma de convertir cadenas en enteros en VHDL?


las funciones readline y read deberían lograr lo que estás buscando.

Básicamente:

  1. Abra su archivo
  2. Use readline para obtener la siguiente línea del archivo en un buffer de línea
  3. Use leer para analizar el buffer de línea a datos útiles
  4. (Opcional) convertir el valor analizado según sea necesario

Fragmento de código:

library STD; use std.textio.all; ... variable File_Name : string; file my_file : text; variable lineptr : line; variable temp : integer; ... file_open(my_file, File_Name, read_mode); -- open the file readline(my_file, lineptr); -- put the next line of the file into a buffer read(lineptr, temp); -- "parse" the line buffer to an integer -- temp now contains the integer from the line in the file ...


Por el bien de referencia. También es posible convertir una cadena en un entero utilizando el ''value atributo de ''value :

variable str : string := "1234"; variable int : integer; ... int := integer''value(str);

Dependiendo de las necesidades de uno, esto puede ser más deseable que el procedimiento de read() porque no altera de manera destructiva la cadena fuente. Sin embargo, solo funciona si la cadena es un literal entero válido sin caracteres circundantes que no sean espacios en blanco.

variable ln : line; variable int : integer; ... ln := new string''(" 456 "); -- Whitespace will be ignored int := integer''value(ln.all); -- Doesn''t consume contents of ln ln := new string''("789_000 more text"); int := integer''value(ln.all); -- This will fail unlike read()