www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Latch mit CPLD


Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Alex H. (alex123)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Alex H. (alex123)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du
process (ALE)              
begin                 
  if (ALE'event and ALE ='0') then        
    AB(7 downto 0) <= DB(7 downto 0);        
  end if;
end process;

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

...wenn du aber
process (ALE)              
begin                 
  if ALE ='0' then        
    AB(7 downto 0) <= DB(7 downto 0);        
  end if;
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.

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Test per Simulation oder auf der HW?

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf der HW !

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.