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?
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()
readline and read functions should achieve what you are looking for.
Basically:
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
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With