Woher weiß eine strukturelle Architektur, welche Entität sie verwenden soll?

Also folge ich diesem Tutorial, in dem sie einige grundlegende VHDL erklären, indem sie einen Vier-Bit-Addierer als Beispiel verwenden:

-- 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;

Ich versuche zu verstehen, warum der componentTeil in die fouradder_structurein der FULLADDER-Entität verwendeten Ports neu definieren muss; Beide enthalten die folgenden Teile:

port(a, b, c: in std_logic;
sum, carry: out std_logic);

Ich habe dann irgendwo gelesen , dass componentdie Schnittstelle definiert wird, die der fouradder_structureerwartet. Das würde erklären, warum entityund componentbeide die verwendeten Ports deklarieren müssen, aber woher weiß der dann, dass er die zuvor definierte Entität fouradder_structureverwenden soll ? FULLADDERIst es eine Namenskonvention?

TL; DR , wie ist sich die Architektur fouradder_structurebewusst, dass sie die Entität verwenden muss FULLADDER?

Antworten (2)

Wenn Sie nicht angeben, welche Architektur eine Entitätsinstanziierung verwenden wird, verwendet sie die zuletzt kompilierte Architektur für diese Entität.

Persönlich würde ich die direkte Instanziierung von Entitäten verwenden. Um dies zu verwenden, löschen Sie die Komponentendeklaration ( component FULLADDER ...) und instanziieren Sie sie folgendermaßen:

FA0: entity work.FULLADDER(fulladder_behav)
port map ( ...

Auf diese Weise können Sie leicht erkennen, welche Architektur verwendet wird, und Sie sparen sich die Pflege einer Komponentendeklaration sowie der Instanziierung.

Wenn Sie dies aus irgendeinem Grund nicht tun möchten, sehen Sie sich die Verwendung von configurations an.

Wie würden Sie die zu verwendende Architektur spezifizieren?
@ user1534664 Ich habe meine Antwort aktualisiert, hoffe das hilft.
Ihre Antwort ist jetzt vollständig :) Vielen Dank für die schnelle Antwort.
Ich hasse die Komponentendeklarationen. Leider sind sie in VHDL 1987 (kein Tippfehler) erforderlich, was immer noch von vielen Synthesewerkzeugen benötigt wird. Obwohl VHDL 2008 oder zumindest VHDL 1993 an Boden gewinnt.
@Michael welche Tools unterstützen nicht einmal VHDL'93? Das verdient sicherlich einen Namen und eine Schande!

configurationSie können mit einer Anweisung steuern, welche Entität (und welche ihrer Architekturen) an eine bestimmte Komponente gebunden ist (vorausgesetzt, sie hat kompatible Schnittstellen, dh Port- und generische Listen). Dies kann entweder Teil der Architektur sein – eine eingebettete Konfiguration – oder eine separat kompilierte Einheit, z. B. in einer separaten Datei.

Wenn Sie sich nicht um Konfigurationen kümmern, erhalten Sie die Standardkonfiguration. Oder Sie können sowohl Komponenten als auch Konfigurationen mit direkter Entitätsinstanziierung umgehen – beide Ansätze werden in Jeffs Antwort beschrieben. (Die direkte Instanziierung von Entitäten ist am einfachsten und scheint heutzutage oft der bevorzugte Ansatz zu sein).