Configurations 191
to map the delays back to the model. Modifying the architecture involves
changing the values in all of the generic map clauses used to map the
delays in the architecture. This method has a big drawback. Modifying the
architecture that contains the component instantiation statements
requires recompilation of the architecture and the configuration for the
design unit. This can be an expensive proposition in a very large design.
The second method, which creates a configuration that maps all of the
delays to the generics of the entity, is much more efficient. A configuration
of this type contains a generic map value for each generic to be specified
in the configuration. Any generics not specified in the configuration are
mapped in the architecture or defaulted.
Let’s use the decoder example again but now assume that it represents
part of an ASIC that has delays back-annotated to it. The invand and3
devices have an intrinsic propagation delay through the device that is
based on the internal characteristics of the device, and these devices have
an external delay that is dependent on the driver path and device loading.
The intrinsic and external delays are passed into the model as generic
values. The intrinsic delay is passed into the model to allow a single model
to be used for model processes. The external delay is passed to the
model, because it may vary for every instance, as loading may be dif-
ferent for each instance. (A more accurate model of delays is obtained us-
ing input delays.)
The entity and architecture for the invand and3gates look like this:
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY inv IS
GENERIC(int_rise, int_fall, ext_rise,
GENERIC(ext_fall : time);
PORT( a: IN std_logic; b: OUT std_logic);
END inv;
ARCHITECTURE inv_gen1 OF inv IS
BEGIN
inv_proc : PROCESS(a)
VARIABLE state : std_logic;
BEGIN
state := NOT(a);
IF state = ‘ 1 ’ THEN
b <= state AFTER (int_rise + ext_rise);
ELSIF state = ‘ 0 ’ THEN
b <=state AFTER (int_fall + ext_fall);
ELSE
b <= state AFTER (int_fall + ext_fall);
END IF;
END PROCESS inv_proc;