Synchron arbeitende Bausteine
(EN google-translate)
(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.
Bild 0-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 0-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 0-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 0-2: Constraints dfliflop.ucf
Wichtiger Hinweis zu ISE 14.7
|
Bild 0-2: Design-Fehler, wenn P142 benutzt wird.
Bild 0-3: Kein Design-Fehler, bei P130, P56 usw.
Bild 0-4: Darstellung der bisher insgesamt aufgebauten Beschaltung des DLP-FPGA-Boards und Bezeichnung der zur Ansteuerung des D-Flip-Flops benötigten Elemente.
Bild 0-5: Foto der Gesamtschaltung.
Bild 0-6: Zweites Foto der Gesamtschaltung.