Forum: FPGA, VHDL & Co. Latch mit CPLD


von macke_a (Gast)


Lesenswert?

Hallo! Ich versuche zur Zeit mir ein Latch mit dem XC9572XL von Xilinx
aufzubauen. Den Quelltext habe ich hier definiert. Fällt jemanden dabei
irgendwas auf, was nicht in Ordnung ist?
Das Ale soll bei der negativen Flanke, die Anweisung ausführen!
Danke schon mal vorab!

AB       : out    STD_LOGIC_VECTOR (7 downto 0)
DB   : inout  STD_LOGIC_VECTOR (7 downto 0)
ALE    : in      STD_LOGIC;

process (ALE)
begin
if (ALE'event and ALE ='0') then
AB(7 downto 0) <= DB(7 downto 0);
end if;
end process;

von Alex H. (alex123)


Lesenswert?

Latch und Flanke passt nicht ;-)
Ist ein Flipflip.
Falls Du ein Register aus FFs willst, ist das ok.
Ich würde allerdings noch nen Reset verwenden:
process (Clock, Reset)
begin
  if Reset ...
    ...
  elsif Clock event ...
    ...
  end if;
end process;

Gruss,

Alex

von macke_a (Gast)


Lesenswert?

Hi Alex,
wie das verstehe ich jetzt nicht genau?
Das Latch ist doch ein D-FF.
Als Takt verwende ich meine ALE Signal.
Was ist daran nicht so gut ?

von Alex H. (alex123)


Lesenswert?

Wenn bei Dir ein "Latch" ein D-FF ist, ist Deine
Beschreibung ok.

Unter einem "Latch" versteht man aber manchmal
(normalerweise?) auch ein zustandsgesteuertes FF (nicht
ein flankengesteuertes FF wie oben bschrieben). Diese Art
der Latche ist nicht immer einfach zu behandeln, man
versucht sie zu vermeiden wenn möglich.

Wie gesagt, als Register, das aus (flankengesteuerten)
FFs (oder D-FFs) besteht, ist Deine Beschreibung ok.

Gruss,

Alex

von macke_a (Gast)


Lesenswert?

Ok! Danke für die Bestätigung!
Allerdings habe ich trotzdem noch Probleme.
Die Eingangssignale kommen am Ausgang ( Adress- und Datenbus ) leider
nicht heraus.
Falls ich die PORTS einmal 1:1 durchschalte ist das System wiederrum in
Ordnung.
Hast Du vielleicht noch ne Idee, woran das liegen könnte?

von macke_a (Gast)


Lesenswert?

Also folgendes habe ich noch einmal herausgefunden.
Falls ich das ALE'event weg lasse...dann bekommen die Pins die
richtigen Pegel am Ausgang !
Nun, kann mir jemand dabei weiterhelfen ?

von T.M. (Gast)


Lesenswert?

wenn du
1
process (ALE)              
2
begin                 
3
  if (ALE'event and ALE ='0') then        
4
    AB(7 downto 0) <= DB(7 downto 0);        
5
  end if;
6
end process;

schreibst, dann bekommst du ein flankengesteuertes DFF.
Dieses legt den Eingang nur bei jede fallende Flanke an den Ausgang.

...wenn du aber
1
process (ALE)              
2
begin                 
3
  if ALE ='0' then        
4
    AB(7 downto 0) <= DB(7 downto 0);        
5
  end if;
6
end process;

schreibst, dann bekommst du ein zustandsgesteuertes Latch.
Dieses legt den Eingang an den Ausgang, wenn ALE = 0 ist, das heißt, es
wirkt transparent, weil jede Veränderung vom Eingang bei ALE=0 direkt
auf den Ausgang wirkt.

Nun kommt es drauf an, welches Verhalten von dir gewünscht ist. Latches
versucht man (eigentlich) zu vermeiden, weil sie oft nicht dem
entsprechen was man will und weil sie nicht wirklich einem synchronen
Entwurfsstil entsprechen.

von macke_a (Gast)


Lesenswert?

@T.M
Danke für Deinen Beitrag. Ich möchte gerne ein flankengesteuertes DFF
haben. Genau so habe ich es auch programmiert!
Die Eingangssignale liegen 100% an.
Nur der Ausgang streikt. Habe auch schon die Timming Diagramme
kontrolliert...alles im grünen Bereich !

Hat die Sofware von Xilinx eventuell nen Problem ?
Habe sonst keine Ahnung wie ich mein Problem in den Griff bekommen
sollte.....und bin für jede Hilfe dankbar !

von T.M. (Gast)


Lesenswert?

Test per Simulation oder auf der HW?

von macke_a (Gast)


Lesenswert?

Auf der HW !

von T.M. (Gast)


Lesenswert?

Also die Beschreibung an sich ist ok, da muss es woanders dran liegen.
Vielleicht am drumherum. Ist das dein ganzer Code, oder nur ein Teil?
Vielleicht stimmt ja was mit dem Takt ALE nicht...

von T.M. (Gast)


Lesenswert?

Achso, wieso benutzt du eigentlich für Signal DB einen inout-Port? In
deinem Code wird das Signal doch nur gelesen, da würde ich einen
in-Port bevorzugen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.