kramann.info
© Guido Kramann

Login: Passwort:










8 Synchron arbeitende Bausteine

8 (EN google-translate)

8 (PL google-translate)

Bisher wurden hauptsächlich konkurrierende Elemente kodiert. Nun sollen synchron arbeitende eingeführt werden.

Ein Basis-Element, das wiederum Grundlage für viele synchrone Implementierungen ist, ist das D-Flip-Flop.

Es soll hier in seiner elementarsten Form implementiert und anschließend ein Schieberegister damit realisiert werden.

Schaltsymbol eines D-Flip-Flops.

Bild 8-1: Schaltsymbol eines D-Flip-Flops.

reset clock q
1 x 0
0 0 q (alter Wert)
0 1 q (alter Wert)
0 steigende Flanke d (Übernahme von d)

Tabelle 8-1: Funktion des D-Flip-Flops

Beim D-Flip-Flop wird der aktuelle Zustand bei d nur nach q übernommen, wenn eine steigende Flanke am Clock-Eingang auftritt.

Über einen asynchronen Reset, kann der Zustand von q auf Null gesetzt werden.

In einer minimalen Implementierung soll der Zustand von d über P135 / IO25 gesetzt werden und das Clock-Signal über P142 / IO28. Der Ausgang soll mit einer LED bei P125 / IO19 verbunden werden. Das Reset-Signal soll über P12 / IN1 gegeben werden können.

Alle äußeren Signale sollen mit invertierender Logik implementiert werden, damit ein "Einschalten" des Dip-Schalters zu einem Logischen High-Pegel auf den Flip-Flop führt.

In dem nachfolgenden VHDL-Quelltext taucht in runden Klammern hinter dem Schlüsselwort "process" eine s.g. Sensitivitäts-Liste auf (sensivity list). Sämtliche Variablen, durch die der Prozeß beeinflußt wird, sollten hier aufglistet werden, um den Kompilierungsprozeß zu optimieren.

Im Fall hier sind das das Clock-Signal und das Reset-Signal.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity dflipflop is
    Port ( D : in  STD_LOGIC;
           CLOCK : in  STD_LOGIC;
           RESET : in  STD_LOGIC;
           Q : out  STD_LOGIC);
end dflipflop;

architecture Verhalten_Dflipflop of dflipflop is
    signal sig_d       : std_logic := '0';
    signal sig_clock   : std_logic := '0';
    signal sig_reset   : std_logic := '0';
    signal sig_q       : std_logic := '0';
begin
    process(sig_clock,sig_reset)
	 begin
	     if (sig_reset='1') then
		      sig_q <= '0';
		  elsif (sig_clock'event and sig_clock='1') then
		      sig_q <= sig_d;
		  end if;
    end process;
    sig_clock <= not CLOCK;
    sig_reset <= not RESET;
    sig_d     <= not D;
    Q         <= sig_q;	 
end Verhalten_Dflipflop;

Code 8-1: Quelltext dfliflop.vhd

NET "RESET"  LOC = "P12"  | PULLUP | IOSTANDARD = LVCMOS33;
NET "CLOCK"  LOC = "P142" | PULLUP | IOSTANDARD = LVCMOS33;
NET "D"      LOC = "P135" | PULLUP | IOSTANDARD = LVCMOS33;

NET "Q"      LOC = "P125" | IOSTANDARD = LVCMOS33 | SLEW = SLOW ;

Code 8-2: Constraints dfliflop.ucf

dflipflop.zip - ISE-Projekt zu D-Flip-Flop.
Wichtiger Hinweis zu ISE 14.7
  • Hier kann NICHT P142 als CLOCK benutzt werden, weil P142 nicht die nötigen Hardwareeigenschaften dafür besitzt.
  • Es könnte aber beispielsweise P130 und alle anderen Pins benutzt werden, die mit GCLK ausgewiesen sind.
  • Vergl. dazu Bild 3-5:
69_FPGA/03_DLP_FPGA
Design-Fehler, wenn P142 benutzt wird.

Bild 8-2: Design-Fehler, wenn P142 benutzt wird.

Kein Design-Fehler, bei P130, P56 usw.

Bild 8-3: Kein Design-Fehler, bei P130, P56 usw.

Darstellung der bisher insgesamt aufgebauten Beschaltung des DLP-FPGA-Boards und Bezeichnung der zur Ansteuerung des D-Flip-Flops benötigten Elemente.

Bild 8-4: Darstellung der bisher insgesamt aufgebauten Beschaltung des DLP-FPGA-Boards und Bezeichnung der zur Ansteuerung des D-Flip-Flops benötigten Elemente.

Foto der Gesamtschaltung.

Bild 8-5: Foto der Gesamtschaltung.

Zweites Foto der Gesamtschaltung.

Bild 8-6: Zweites Foto der Gesamtschaltung.