gmadesign
Registrierter Benutzer
Beiträge: 1
|
Erstellt: 19.01.06, 14:48 Betreff: flankengesteuertes D-Flip-Flop in VHDL! Notfall!!!!!
drucken
Thema drucken weiterempfehlen
|
|
|
Hallo!
Ich bräuchte dringend eure Hilfe! Hab herausgefunden, dass ich mich in einer Technische Informatik-Lehrveranstaltung mit einem richtig gelösten Übungsbeispiel auf einen Vierer retten könnte. Das Problem dabei: Es handelt sich um VHDL, für mich als Medieninformatiker ein Fremdwort…
Die Aufgabe, die ich lösen möchte, ist Aufgabe 93, diese baut jedoch auf den vorher beschriebenen auf. Wie ein flankengesteuertes D-Flip-Flop funkt weiß ich noch, wie ich eines in VHDL umsetze ist mir jedoch ein Rätsel.
Ich weiß, es ist viel verlangt, aber kann mir vielleicht irgendjemand helfen, und wenns nur ein Ansatz ist, das wäre mir extrem wichtig!!!!
Tausend dank im Voraus für jede Antwort
LG
Aufgabe 85: VHDL NAND-Gatter Entwerfen Sie die Schnittstellenbeschreibungen und die Modellbeschreibungen (Verhal- tensmodelle) für ein NAND-Gatter mit 2 bzw. 3 Eingängen. Die Verzögerungszeit soll jeweils 10 ns betragen.
Aufgabe 86 VHDL Flankengesteuertes D-Flip-Flop Erstellen Sie aufbauend auf Aufgabe 85 die Schnittstellen- und Modellbeschreibung (Struk- turmodell) für ein flankengesteuertes D-Flip-Flop .
Aufgabe 88 VHDL Flankengesteuertes D-Flip-Flop Erweitern Sie Aufgabe 86 um eine zusätzliche Modellbeschreibung, die ausschließlich das Verhalten des °ankengesteuerten D-Flip-Flops beschreibt.
Aufgabe 93 VHDL Flankengesteuertes D-Flip-Flop Erstellen Sie aufbauend auf Übungsblatt 9 (Aufgabe 88) die Schnittstellen- und Modellbe- schreibung (Verhaltensmodell) für ein flankengesteuertes D-Flip-Flop, das als zusätzlichen Eingang ein Initialisierungssignal init besitzt, welches das Flip-Flop zu Simulationsbeginn setzt bzw. rücksetzt (steigende bzw. fallende Flanke). Verwenden Sie für alle Signale den Datentyp STD LOGIC.
|
|
xGCFx
Stammgast
Beiträge: 33 Ort: Dresden
|
Erstellt: 23.01.06, 01:34 Betreff: Re: flankengesteuertes D-Flip-Flop in VHDL! Notfall!!!!!
drucken
weiterempfehlen
|
|
|
Mhm, so richtig versteh ich das mit dem init-Signal nicht. Entweder es ist ein Setz-oder Rücksetzsignal. Ausserdem, wie ist das gemeint, am Anfang der Simulation? Wenn, dann geht das immer, nicht nur am Anfang.
Naja, hier mal ein flankengesteuertes D-FF mit synchronen Reset:
library IEEE; use ieee.std_logic_1164.all;
entity D_FF is port(clk: in std_logic; reset: in std_logic; d: in std_logic; q: out std_logic); end D_FF;
architecture Verhalten of D_FF is
begin
process(clk) begin if clk'event and clk = '1' then if reset = '1' then q <= '0' after 10 ns; else q <= d after 10 ns; end if; end if; end process;
end Verhalten;
[editiert: 23.01.06, 01:35 von xGCFx]
|
|
xGCFx
Stammgast
Beiträge: 33 Ort: Dresden
|
Erstellt: 23.01.06, 01:38 Betreff: Re: flankengesteuertes D-Flip-Flop in VHDL! Notfall!!!!!
drucken
weiterempfehlen
|
|
|
Mhm, ich glaube, ich habe das mit dem init-Signal jetzt verstanden, wie es gemeint ist. Also wenn init ne steigende Flanke hat, soll es setzen, bei ner fallenden rücksetzen. Dann kommt man auf folgenden Code :
library IEEE; use ieee.std_logic_1164.all;
entity D_FF is port(clk: in std_logic; init: in std_logic; d: in std_logic; q: out std_logic); end D_FF;
architecture Verhalten of D_FF is
begin
process(clk, init) begin if clk'event and clk = '1' then q <= d after 10 ns; end if; if init'event and init = '1' then q <= '1' after 10 ns; end if; if init'event and init = '0' then q <= '0' after 10 ns; end if; end process;
end Verhalten;
ABER: Vorsicht, sowas lässt sich höchstens simulieren, die Synthese bricht mit Fehlermeldung ab. Aber ich denke, es geht nur um Simulation, wenn ich das richtig verstanden habe.
Folgende Beschreibung hat (fast) das gleiche Verhalten und lässt sich anstandslos in Hardware giessen (Schnittstellenbeschreibung bleibt wie oben):
architecture Verhalten of D_FF is
signal init_alt: std_logic;
begin
process(clk, init, init_alt) begin if init = '1' and init_alt = '0' then q <= '1' after 10 ns; elsif init = '0' and init_alt = '1' then q <= '0' after 10 ns; elsif clk'event and clk = '1' then q <= d after 10 ns; init_alt <= init; end if; end process;
end Verhalten;
Hier wird das init-Signal immer um 1 Takt verzögert in ein internes Signal init_alt geschrieben. Damit kann man dann auf steigende Flanke (init = 1 & init_alt = 0) und fallende Flanke (init = 0 und init_alt = 1) detektieren.
Grüße
[editiert: 23.01.06, 01:51 von xGCFx]
|
|