Как преобразовать строку в целое число в VHDL? - PullRequest
5 голосов
/ 01 сентября 2011

Я загружаю текстовые данные в тестовый стенд VHDL и хочу преобразовать входные строки в целочисленные значения.

Например: "123" => 123

Может кто-нибудь порекомендовать"способ преобразования строк в целые числа в VHDL?

Ответы [ 2 ]

6 голосов
/ 01 сентября 2011

readline и read функции должны достичь того, что вы ищете.

В основном:

  1. Откройте ваш файл
  2. Используйте readline, чтобы получить следующую строку из файла в буфер строк.
  3. Используйте read, чтобы разобрать буфер строк в полезные данные.
  4. (Необязательно) преобразовать проанализированное значение при необходимости

Фрагмент кода:

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
...
4 голосов
/ 14 января 2015

Ради справки. Также возможно преобразовать строку в целое число, используя атрибут 'value:

variable str : string := "1234";
variable int : integer;
...

int := integer'value(str);

В зависимости от потребностей это может быть более желательным, чем процедура read(), поскольку она не приводит к деструктивному изменению исходной строки. Однако он работает только в том случае, если строка является допустимым целочисленным литералом без окружающих символов, кроме пробела.

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()
...