Hallo Leute, ich habe ein Problem mit meiner Delay Line, die ich mir aus IODELAY2-Blöcken im Spartan 6 zusammengebaut habe. In der Simulation funktioniert soweit auch alles korrekt. Sobald ich das Design aber auf dem FPGA laufen lasse geht mein Ausgangssignal DelayLineOut nicht mehr so oft auf 0 zurück wie es sollte (und in der Simulation auch tut). Kann mir jemand erklären woran das liegt? Ich rätsel jetzt schon seit einigen Tage und komme auf keinen grünen Zweig. Wenn weitere Informationen benötigt werden bitte nachfragen. Ich bin für jeden Hinweis dankbar!
Schrammler schrieb: > Wenn weitere Informationen benötigt werden bitte nachfragen. Hast Du eine Testbench dazu? Kannst Du mal einen Screenshot von der Simulation und einen von Oszi/Chipscope/Logicanalyzer machen? Duke
Der IODELAY2-Block bei Spartan 6 arbeitet nur bis zu bestimmten Delays korrekt, es gibt ein Design Advisory dazu: <http://www.xilinx.com/support/answers/38408.html> In den Spartan 6 Errata ist es auch aufgeführt. Schau also mal nach, ob du die Bedingungen einhältst...
Hier nochmal der aktuelle Code mit den Screenshots dazu. @ Thosch: Deinen Link habe ich mir angeschaut. Da meine maximale Datenrate aber unterhalb der 200Mg/s liegen sollte und mein maximales Delay 2 ns beträgt, dürfte das nicht die Ursache sein. Trotzdem Danke! ;)
Schrammler schrieb: > Sobald ich das Design aber auf > dem FPGA laufen lasse geht mein Ausgangssignal DelayLineOut nicht mehr > so oft auf 0 zurück wie es sollte (und in der Simulation auch tut). "auf 0 zurück" was meinst Du damit? Den Signalpegel oder die Verzögerungszeit? Das untere Signal auf dem Oszi sieht doch prinzipiell ganz gut aus. Duke
Das gelbe Signal auf dem Oszi entspricht dem DelayLineIn und das grüne dem DelayLineOut der Simulation. Das DelayLineIn wird auch richtig ausgegeben. Nur beim DelayLineOut stimmt eben Simulation und Oszi/Chipscope nicht überein.
schreib doch anstelle von --Verzögerung ausgeben DelayLineOut <= '1' when (DelayOBUF1In = '1' or DelayCompOut(7) = '1') and (STATE = SetData or STATE = ResetData) else '0'; einfach nur ein DelayLineOut <= DelayOut(0); Dann kannst du zumindest mal unterscheiden, ob wirklich die IODelay das Problem machen oder die Logik. Momentan siehst du ein Gemisch von beidem.
Ok, habe den Fehler gefunden. Habe mich beim Ermitteln der IDELAY_VALUEs verrechnet. Eine Frage hätte ich aber noch: Kann ich mit den IODELAY2-Blöcken keine Verzögerung von weniger als 5,32 ns erzeugen? Auf der folgenden Seite heißt es: "This specification is essentially indicating that the minimum delay available in the IODELAY2 is 5.32nS." http://www.xilinx.com/support/answers/35783.html
Hallo Leute, leider hat sich meine Aufgabe etwas geändert und ich muss euch noch einmal um Rat fragen. Derzeit gebe ich einen 5 ns Impuls als Eingangssignal an 128 parallel verdrahtete IODELAY2-Blöcke. Alle Ausgangssignale der IODELAY2-Blöcke werden immer nacheinander mit einem Multiplexer an den Ausgang DelayLineOut gegeben. Einen Delay-Value habe ich für die IODELAY2-Blöcke nicht angegeben, sodass diese den Eingangsimpuls lediglich um 5,32 ns verzögern sollten. Ich hätte somit erwartet, dass sich folgendes ergibt: Nach jedem gelben Eingangsimpuls im obigen Bild sollte immer genau 5,32 ns später ein grüner Impuls folgen. Leider verhält sich die Realität nicht so und ich erhalte das verwaschene grüne Ausgangssignal. Simuliert habe ich das Ganze auch schon. Da verhält sich alles korrekt. Bei Bedarf kann ich auch noch die Testbench hochladen. Es wäre toll, wenn mir jemand einen Tip geben könnte was die Ursache meines Problems ist, oder mir sogar sagen könnte wie ich es beheben kann. Danke im vorraus!
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.