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;
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
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 ?
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
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?
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 ?
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.
@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 !
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.