Technical data
TextIO implementation issues
ModelSim EE/PLUS Reference Manual The TextIO Package
-
427
TextIO implementation issues
Writin
g
strin
g
s and a
gg
re
g
ates
A common error in VHDL source code occurs when a call to a WRITE procedure
does not specify whether the argument is of type STRING or BIT_VECTOR. For
example, the VHDL procedure:
WRITE (L, "hello");
will cause the following error:
ERROR: Subprogram "WRITE" is ambiguous.
In the TextIO package, the WRITE procedure is overloaded for the types STRING
and BIT_VECTOR. These lines are reproduced here:
procedure WRITE(L: inout LINE; VALUE: in BIT_VECTOR;
JUSTIFIED: in SIDE:= RIGHT; FIELD: in WIDTH := 0);
procedure WRITE(L: inout LINE; VALUE: in STRING;
JUSTIFIED: in SIDE:= RIGHT; FIELD: in WIDTH := 0);
The error occurs because the argument "hello" could be interpreted as a string or
a bit vector, but the compiler is not allowed to determine the argument type until
it knows which function is being called.
The following procedure call also generates an error:
WRITE (L, "010101");
This call is even more ambiguous, because the compiler could not determine, even
if allowed to, whether the argument "010101" should be interpreted as a string or
a bit vector.
There are two possible solutions to this problem:
• Use a qualified expression to specify the type, as in:
WRITE (L, string’("hello"));
• Call a procedure that is not overloaded, as in:
WRITE_STRING (L, "hello");
The WRITE_STRING procedure simply defines the value to be a STRING and
calls the WRITE procedure, but it serves as a shell around the WRITE procedure
that solves the overloading problem. For further details, refer to the
WRITE_STRING procedure in the io_utils package, which is located in the file
io_utils.vhd
.