One of the things you can do with customization (which depends on creating the component instance) is the use of virtual components.
You can write a description of VHDL that depends on some idealized object (with the name x here) and map it to another component with different port signal names:
entity a is port ( in1: in bit; in2: in bit; out1: out bit ); end entity; architecture fum of a is begin out1 <= in1 xor in2; end architecture; entity b is end entity; architecture foo of b is component x is port ( a: in bit; b: in bit; c: out bit ); end component; signal a, b, c: bit; begin TARG: x port map ( a => a, b => b, c => c ); STIMULI: process begin wait for 2 ns; a <= '1'; wait for 2 ns; b <= '1'; wait for 2 ns; a <= '0'; wait for 2 ns; b <= '0'; wait for 2 ns; a <= '1'; wait for 2 ns; wait; end process; end architecture; configuration fum of b is for foo for TARG: x use entity work.a port map ( in1 => a, in2 => b, out1 => c ); end for; end for; end configuration fum;
development and modeling of configuration gives:

When searching for TARG port signals.
This ability was to be used to map primitives from different vendor libraries to a standard component declaration.
The understandable complexity associated with configuration was contrasted with portability libraries such as LPM (Library of Parameterized Modules), which add another axis of complexity by using attributes and generics to standardize interface names and reduce the number of library primitives.
Behavioral synthesis is progressing to such an extent that both constructive design methods have fallen to the side.
FPGA vendor support for explicit configuration declarations has also historically lagged. You may notice that IEEE Std 1076.6-2004 (RTL Synthesis, now unchecked) required support for configuration declarations, and implicit configuration provides default binding instructions at design time.
source share