xGCFx
Stammgast ![](http://files.syk.de/c/img/rank/0.gif)
Beiträge: 33
|
Erstellt: 23.01.06, 01:38 Betreff: Re: flankengesteuertes D-Flip-Flop in VHDL! Notfall!!!!! |
|
|
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]
|
|