Constant
Used In
- Entity
- Package
- Process
- Architecture
- Procedure
- Function
Reference Manual
VHDL-93:- Section 4.3.1.1
Syntax
constant constant_name : type := value;
Rules and Examples
constant BUS_WIDTH : integer := 8;
constant FOUR_ONES :
std_logic_vector(3 downto 0):= "1111";
constant PERIOD : time := 10 ns;
constant MAX_SIM_TIME : time:= 50 * PERIOD;
The values of array constants other than string, bit_vector, and std_logic_vector must be set using aggregates.
type T_CLOCK_TIME is ARRAY(3 downto 0) of
integer range 0 to 9;
constant TWELVE_O_CLOCK :
T_CLOCK_TIME := ( 1, 2, 0, 0);
In a package, a constant may be deferred. This means its value is defined in the package body, and the value may be changed only by re-analyzing the package body.
package P is
constant C : integer;
end P;
package body P is
constant C : integer := 200;
end P;
Provided they are of the correct type, constants may be used in any expression. They may be associated with generics of component instances and passed into procedures.
process
type T_DATA is array (0 to 3) of
bit_vector(7 downto 0);
constant DATA : T_DATA :=
("00001000",
"00010001",
"00100010",
"01000011");
begin
for I in DATA'range loop
serialize_byte( DATA(I), DOUT);
end loop;
end process;
Constants and constant expressions may also be associated with input ports of component instances.
Synthesis Issues
Constants are supported for synthesis, providing they are of a type acceptable to the logic synthesis tool. They are either synthesized as connections to logic ‘1’ or ‘0’, or are used to help minimize the number of gates required. Deferred constants may not be supported.