Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> VHDL

VHDL port map instantiation onder de knie krijgen: een praktische gids

In VHDL is een module een zelfstandige eenheid die communiceert met de buitenwereld via zijn entity. De port map-clausule van een instantie verbindt de formele poorten van de entity met signalen in het omringende ontwerp.

Modules, Entiteiten en Testbenches

Wanneer we voor een FPGA of ASIC ontwikkelen, leeft de ontwerplogica in modules met duidelijk gedefinieerde in- en outputpoorten. Een module zonder poorten is een testbench – een simulatie-wrapper die stimuli voedt aan het device under test (DUT) maar nooit op een fysieke chip verschijnt.

In eerdere posts schreven we alle VHDL in een enkel bestand, wat handig is voor snelle experimenten maar niet geschikt voor productieontwerpen. Het scheiden van de DUT van zijn testbench verbetert leesbaarheid, herbruikbaarheid en maakt de simulatiehiërarchie duidelijk.

Gebruikelijke naamconventies

Veel teams volgen een simpel schema: het ontwerpbestand is MyModule.vhd, terwijl de testbench MyModuleTb.vhd heet. De architectuur van de DUT heet vaak rtl (register-transfer level), en de testbench-architectuur heet sim. Deze conventie vertelt je direct of een bedoeld is voor synthetisering of voor simulatie.

VHDL port map instantiation onder de knie krijgen: een praktische gids

VHDL-syntax voor port map instantiation

Definieer een module-interface met het entity-sleutelwoord:

 entity <entity_name> is port( <entity_signal_name> : in|out|inout <signal_type>; ... ); end entity; 

Instantieer de module in een ander VHDL-bestand met een expliciete port map:

 <label> : entity <library_name>.<entity_name>(<architecture_name>) port map( <entity_signal_name> => <local_signal_name>, ... ); 

De <label> verschijnt in de simulatorhiërarchie, <library_name> is standaard work, en elke formele poort moet gebonden worden aan een lokaal signaal.

Praktisch voorbeeld: 4-naar-1 MUX

Hieronder staat een complete testbench- en DUT-paar die een 4-naar-1 multiplexer implementeert met unsigned 8-bits signalen.

Testbench-code

 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T15_PortMapTb is end entity; architecture sim of T15_PortMapTb is signal Sig1 : unsigned(7 downto 0) := x"AA"; signal Sig2 : unsigned(7 downto 0) := x"BB"; signal Sig3 : unsigned(7 downto 0) := x"CC"; signal Sig4 : unsigned(7 downto 0) := x"DD"; signal Sel : unsigned(1 downto 0) := (others => '0'); signal Output : unsigned(7 downto 0); begin -- Instantieer de MUX met architectuur rtl i_Mux1 : entity work.T15_Mux(rtl) port map( Sel => Sel, Sig1 => Sig1, Sig2 => Sig2, Sig3 => Sig3, Sig4 => Sig4, Output => Output); -- Stimulus-proces process is begin wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= "UU"; wait; end process; end architecture; 

Module-code

 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T15_Mux is port( -- Inputs Sig1 : in unsigned(7 downto 0); Sig2 : in unsigned(7 downto 0); Sig3 : in unsigned(7 downto 0); Sig4 : in unsigned(7 downto 0); Sel : in unsigned(1 downto 0); -- Output Output : out unsigned(7 downto 0) ); end entity; architecture rtl of T15_Mux is begin process(Sel, Sig1, Sig2, Sig3, Sig4) is begin case Sel is when "00" => Output <= Sig1; when "01" => Output <= Sig2; when "10" => Output <= Sig3; when "11" => Output <= Sig4; when others => Output <= (others => 'X'); end case; end process; end architecture; 

Golfform-analyse

Het draaien van de testbench in ModelSim produceert een golfform die overeenkomt met het verwachte gedrag van de MUX. De onderstaande golfform-snapshot bevestigt dat de DUT correct schakelt tussen de vier invoersignalen naarmate het Sel-signaal verandert.

VHDL port map instantiation onder de knie krijgen: een praktische gids

Belangrijkste opmerkingen

  • Modules blootleggen in- en outputs via hun entity-poorten.
  • Testbenches bevatten geen poorten en zijn puur voor simulatie.
  • Expliciete port mapping is de meest transparante manier om een VHDL-module te instantieren.
  • Consistente naamgeving (bijv. rtl voor DUT, sim voor testbench) verbetert leesbaarheid over projecten heen.

Ga door naar de volgende tutorial voor diepere inzichten in VHDL-ontwerppatronen.

VHDL

  1. Freesmes Slijper Technieken Beheersen: Een Praktische Gids
  2. Hoe molybdeen de moderne industrie vormt: toepassingen, voordelen en leveringsdynamiek
  3. Dynamische string-lijsten in VHDL: Best Practices & Voorbeeld
  4. Een Tcl-gedreven testbench maken voor een VHDL code-lock module
  5. Een VHDL-testbench netjes beëindigen: methoden en best practices
  6. Een PWM-controller implementeren in VHDL: Ontwerp, Simulatie en FPGA-demo
  7. Willekeurige getallen genereren in VHDL: Van Uniform naar OSVVM
  8. In-process procedures benutten voor schonere VHDL FSM-ontwerpen
  9. Impure functies in VHDL gebruiken: FSM-leesbaarheid en onderhoudbaarheid verbeteren
  10. VHDL-functies onder de knie krijgen: een praktische gids voor efficiënt ontwerp
  11. Een eindige-toestandsmachine in VHDL ontwerpen: een praktisch verkeerslichtvoorbeeld