Type Conversion
Used In
- Package
- Entity
- Architecture
- Process
- Procedure
- Function
Reference Manual
VHDL-93:- Section 7.3.5
Syntax
target_type (closely_related_expression)
conversion_function (expression)
Rules and Examples
Objects of user-defined types cannot directly be assigned to or from objects of even a closely related type. A type conversion allows the assignment to be made:
type BUS_VAL is range 0 to 255;
variable X_INT : integer := 22;
variable X_BUS : BUS_VAL;
--
X_BUS := X_INT; --illegal
X_BUS := BUS_VAL(X_INT);
Closely related types are:
- integer types and real types
- array types whose lengths, index types and element types match.
For instance:
type T_BYTE is array (7 downto 0) of std_ulogic;
signal TYPE_BUS : T_BYTE;
signal VEC_BUS : std_ulogic_vector(7 downto 0);
--
TYPE_BUS <= VEC_BUS; --illegal
TYPE_BUS <= T_BYTE(VEC_BUS);
If conversion is required between types which are not closely related, a user defined function must be used:
signal X_BOOL: boolean;
signal X_STD: std_ulogic;
function BOOL_TO_SL(
X : boolean
) return std_ulogic is
begin
if X then
return ('1');
else
return ('0');
end if;
end BOOL_TO_SL;
--
X_STD <= X_BOOL; --illegal
X_STD <= BOOL_TO_SL(X_BOOL);
A type conversion function may be called in a port map to match port type to signal type.
Synthesis Issues
Most logic synthesis tools support type conversion for appropriate array and integer types.
Most also accept the type conversion functions in the std_logic_1164 package.
Some synthesis vendors supply a VHDL package containing conversion functions which the synthesizer will support.