Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> VHDL

Getakteten Prozess in VHDL erstellen: Praktischer Leitfaden

Die meisten VHDL-Designs nutzen getaktete Logik – synchron oder sequenziell genannt. Ein getakteter Prozess aktiviert sich ausschließlich an der Flanke des Master-Takts, unabhängig von Änderungen anderer Eingänge.

Das fundamentale Element ist der Flip-Flop. Wir betrachten den positiv-flankengesteuerten Flip-Flop mit negativem Reset. Schema:

Getakteten Prozess in VHDL erstellen: Praktischer Leitfaden

Als Sample-and-Hold-Element erfasst der Flip-Flop den Eingabewert an der steigenden Taktflanke und hält ihn bis zur nächsten steigenden Flanke oder bis Reset asserted wird.

Hinweis: Teil der Basic VHDL Tutorials Serie.

Alle getakteten Prozesse triggern simultan und sampeln Eingänge gleichzeitig. Der Takt diskretisiert die Zeit, erlaubt Aufteilung komplexer Logik in klare Zyklus-für-Zyklus-Ereignisse.

Flip-Flops (oder Arrays) heißen auch Register.

Sensitivity List eines getakteten Prozesses enthält typischerweise nur den Takt, da der Prozess nur an der Taktflanke erwacht. Zusätzliche Eingänge sind für Trigger-Zwecke irrelevant.

Wiederverwendbares Template für getakteten Prozess mit synchronem Reset:


process(Clk) is
begin
  if rising_edge(Clk) then
    if nRst = '0' then
      <alle Ausgänge zurücksetzen>
    else
      <Hauptlogik>
    end if;
  end if;
end process;

Übung

Im Video-Tutorial erstellen wir einen getakteten Prozess in VHDL.

Testbench-Code


library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity T17_ClockedProcessTb is
end entity;

architecture sim of T17_ClockedProcessTb is
  constant ClockFrequency : integer := 100e6; -- 100 MHz
  constant ClockPeriod : time := 1000 ms / ClockFrequency;
  signal Clk : std_logic := '1';
  signal nRst : std_logic := '0';
  signal Input : std_logic := '0';
  signal Output : std_logic;
begin
  i_FlipFlop : entity work.T17_FlipFlop(rtl)
    port map(Clk => Clk, nRst => nRst, Input => Input, Output => Output);

  Clk <= not Clk after ClockPeriod / 2;

  process is
  begin
    nRst <= '1'; wait for 20 ns;
    Input <= '1'; wait for 22 ns;
    Input <= '0'; wait for 6 ns;
    Input <= '1'; wait for 20 ns;
    nRst <= '0'; wait;
  end process;
end architecture;

Flip-Flop Modul


library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity T17_FlipFlop is
  port(
    Clk : in std_logic;
    nRst : in std_logic;
    Input : in std_logic;
    Output : out std_logic
  );
end entity;

architecture rtl of T17_FlipFlop is
begin
  process(Clk) is
  begin
    if rising_edge(Clk) then
      if nRst = '0' then
        Output <= '0';
      else
        Output <= Input;
      end if;
    end if;
  end process;
end architecture;

Wellenform-Beobachtung

Nach Simulation in ModelSim, Zoom in Timeline: Ausgabe aktualisiert nur an steigenden Taktflanken.

Getakteten Prozess in VHDL erstellen: Praktischer Leitfaden

Analyse

Ausgabe ändert sich ausschließlich an steigenden Taktflanken. Eingangsänderungen zwischen zwei Flanken (z. B. negativer Dip ab ~45 ns) werden nicht erfasst, da Flip-Flop nur an der Flanke sampelt.

Animation visualisiert Beziehung Eingabe, Takt, Ausgabe:

Getakteten Prozess in VHDL erstellen: Praktischer Leitfaden

Real benötigt Flip-Flop stabilen Eingang kurz vor und nach Taktflanke – Setup und Hold Time. Synthese-Tools handhaben diese Constraints automatisch beim Netlist-Generieren.

Mehr zu Simulationszeitschritten: Delta cycles explained.

Merksätze

Wissen testen? Basic VHDL Quiz – Teil 3 oder nächstes Tutorial.

VHDL

  1. String-Listen in VHDL erstellen: Best Practices & Beispiel
  2. Tcl-gesteuerter Testbench für ein VHDL Code-Lock-Modul erstellen
  3. VHDL-Testbench-Simulation sauber beenden
  4. PWM-Controller in VHDL implementieren: Design, Simulation & FPGA-Demo
  5. Zufallszahlen in VHDL generieren: Von Uniform zu OSVVM
  6. Ein robuster VHDL-Ringpuffer-FIFO im Block-RAM entwerfen
  7. Selbstprüfenden VHDL-Testbench erstellen – Praxisleitfaden
  8. Dynamische verkettete Liste in VHDL mit Protected Types und Access-Pointern
  9. In-Prozess-Prozeduren für saubere VHDL-FSM-Entwürfe nutzen
  10. VHDL-Funktionen meistern: Praktischer Leitfaden für effizientes Design