Table of Contents Previous page Next page Index

ModelSim Documentation Bookcase

Model Technology Inc.


TextIO implementation issues

Writing strings and aggregates

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:

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 /modeltech/examples/io_utils.vhd.


Model Technology Inc.
Model Technology Incorporated
Voice: (503) 641-1340
Fax: (503)526-5410
www.model.com
sales@model.com
Table of Contents Previous page Next page Index

ModelSim Documentation Bookcase