Declaration | ---- used in ----> | Entity Component |
Syntax |
entity entity_name is generic (generic list); port (port list); end entity_name; |
component component_name generic (generic_list); port (port_list); end component; |
instance_label: component_name generic map (generic_association_list) port map (port_association_list); |
Rules and Examples |
Generics are a means of passing specific information into an entity.
They do not have a mode (direction):
entity PARITY is generic (N : integer); port (A : in std_ulogic_vector (N-1 downto 0); ODD : out std_ulogic); end PARITY; |
In the corresponding component declaration, the generics are also
declared before the ports:
component PARITY generic (N : integer); port (A : in std_ulogic_vector (N-1 downto 0); ODD : out std_ulogic); end component; |
An instance of a component with generics, has a generic map
declared before the port map (note: there is no semicolon between
them!). This allows a value to be set for the generic:
U1: PARITY generic map (N => 8) port map (A => DATA_BYTE, ODD => PARITY_BYTE); |
By declaring generics of type time, delays may be
programmed on an instance-by-instance basis. Generics may be given a
default value, in case a value is not supplied for all instances:
entity AN2_GENERIC is generic (DELAY: time := 1.0 ns); port (A,B : in std_ulogic; Z : out std_ulogic); end AN2_GENERIC; architecture BEH of AN2_GENERIC is begin Z <= A and B after DELAY; end A; |
The value of a generic may be read in either the entity or any of its architectures. It may even be passed into lower-level components. | Default values for generics may be given in an entity declaration or in a component declaration. generics may be set (via a generic map) in an instantiation, or a configuration. The rules regarding different combinations of these are complex: see "VHDL" by Douglas Perry, page 218. |
Synthesis Issues |
Whats New in '93 |
Generics have not changed in VHDL-93.