Así que estoy siguiendo este tutorial en el que explican algunos VHDL básicos mediante el uso de un sumador de cuatro bits como ejemplo:
-- Example of a four bit adder
library ieee;
use ieee.std_logic_1164.all;
-- definition of a full adder
entity FULLADDER is
port (a, b, c: in std_logic;
sum, carry: out std_logic);
end FULLADDER;
architecture fulladder_behav of FULLADDER is
begin
sum <= (a xor b) xor c ;
carry <= (a and b) or (c and (a xor b));
end fulladder_behav;
-- 4-bit adder
library ieee;
use ieee.std_logic_1164.all;
entity FOURBITADD is
port (a, b: in std_logic_vector(3 downto 0);
Cin : in std_logic;
sum: out std_logic_vector (3 downto 0);
Cout, V: out std_logic);
end FOURBITADD;
architecture fouradder_structure of FOURBITADD is
signal c: std_logic_vector (4 downto 0);
component FULLADDER
port(a, b, c: in std_logic;
sum, carry: out std_logic);
end component;
begin
FA0: FULLADDER
port map (a(0), b(0), Cin, sum(0), c(1));
FA1: FULLADDER
port map (a(1), b(1), C(1), sum(1), c(2));
FA2: FULLADDER
port map (a(2), b(2), C(2), sum(2), c(3));
FA3: FULLADDER
port map (a(3), b(3), C(3), sum(3), c(4));
V <= c(3) xor c(4);
Cout <= c(4);
end fouradder_structure;
Estoy tratando de entender por qué la parte component
en fouradder_structure
tiene que redefinir los puertos utilizados en la entidad FULLADDER; ambos contienen las siguientes partes:
port(a, b, c: in std_logic;
sum, carry: out std_logic);
Luego leí en alguna parte que component
define la interfaz que el fouradder_structure
está esperando. Eso explicaría por qué tanto entity
como component
necesitan declarar los puertos usados, pero ¿cómo sabe fouradder_structure
para usar la entidad FULLADDER
que se definió anteriormente? ¿Es una convención de nomenclatura?
TL; DR , ¿cómo conoce la arquitectura fouradder_structure
que tiene que usar la entidad FULLADDER
?