Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert a string to integer in VHDL?

I am loading text data into a VHDL test bench and I want to convert input strings into integer values.

eg: "123" => 123

Can someone recommend a "best" way of converting strings to integers in VHDL?

like image 539
Tom Ravenscroft Avatar asked Sep 01 '11 13:09

Tom Ravenscroft


2 Answers

For the sake of reference. It is also possible to convert a string to integer using the 'value attribute:

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

int := integer'value(str);

Depending on one's needs this may be more desirable than the read() procedure because it does not destructively alter the source string. It does, however, only work if the string is a valid integer literal with no surrounding characters other than whitespace.

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()
like image 158
Kevin Thibedeau Avatar answered Sep 22 '22 12:09

Kevin Thibedeau


readline and read functions should achieve what you are looking for.

Basically:

  1. Open your file
  2. Use readline to get the next line from file into a line buffer
  3. Use read to parse the line buffer to useful data
  4. (Optional) convert the parsed value as necessary

Code Snippet:

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
...
like image 24
Josh Avatar answered Sep 21 '22 12:09

Josh