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:
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.
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:
- Eintaktiger Eingangs-Impuls bei 20 ns ist synchron zum Takt → verzögerte Ausgabe.
- In Simulation erfolgen Events in Nullzeit-Schritten (Delta-Zyklen). Da Flip-Flop Eingang liest und Ausgang im gleichen Delta-Zyklus aktualisiert, erfasst es den Wert vor der Flanke.
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
- Getaktete Prozesse mit synchronem Reset enthalten nur den Takt in der Sensitivity List.
if rising_edge(Clk)garantiert Aktivierung strikt an steigender Taktflanke.- In synchronem Design erfolgen alle Zustandsänderungen an der aktiven Taktflanke.
Wissen testen? Basic VHDL Quiz – Teil 3 oder nächstes Tutorial.
VHDL
- String-Listen in VHDL erstellen: Best Practices & Beispiel
- Tcl-gesteuerter Testbench für ein VHDL Code-Lock-Modul erstellen
- VHDL-Testbench-Simulation sauber beenden
- PWM-Controller in VHDL implementieren: Design, Simulation & FPGA-Demo
- Zufallszahlen in VHDL generieren: Von Uniform zu OSVVM
- Ein robuster VHDL-Ringpuffer-FIFO im Block-RAM entwerfen
- Selbstprüfenden VHDL-Testbench erstellen – Praxisleitfaden
- Dynamische verkettete Liste in VHDL mit Protected Types und Access-Pointern
- In-Prozess-Prozeduren für saubere VHDL-FSM-Entwürfe nutzen
- VHDL-Funktionen meistern: Praktischer Leitfaden für effizientes Design