Ich habe eine externe PLL, die meinen FPGA speist, welche beim Start nicht immer zuverlässig anläuft, weshalb der Takt nicht sehr stabil ist und die PLL im FPGA nicht sauber anschwingt. Daher soll die PLL resettet werden. Tue ich das mit einem Knopf im Testdesign per Hand, klappt das bestens. Dies möchte ich nun automatisieren. Wie kann ich - ohne einen Takt - im FPGA einen Reset erzeugen, der etwa 150ms nach Start der Schaltung den asynch rst der PLL bedient? Ich kann an der Schaltung/Layout nichts mehr ändern, der FPGA muss das selber tun. Bisher habe ich probiert, einen Zähler mit dem Inputtakt zu treiben, bin mir aber über das Routing unsicher: Die Schaltung sieht so aus: CLK_PIN -> IBUFG -> PLL_IN PLL_OUT -> BUFG -> FPGA-TAKT -> ZÄHLER ZÄHLER_ENDE -> ASYNCH_PLL_RESET Vom IBUFG geht es also einmal in die PLL und parallel in den Zähler. Dabei packt er das Timing nicht. Wenn ich vom IBUFG auf einen BUFG gehe, um den Zähler zu bedienen, kommt das bekannte "dedicated route" Problem.
Karl schrieb: > Wie kann ich - ohne einen Takt - im FPGA einen Reset erzeugen, der etwa > 150ms nach Start der Schaltung den asynch rst der PLL bedient? Karl schrieb: > Bisher habe ich probiert, einen Zähler mit dem Inputtakt zu treiben, bin > mir aber über das Routing unsicher: Hast du nun einen Takt am FPGA oder nicht? Irgendwie erscheint mir das widersprüchlich, was du schreibst.
Wenn man einen FPGA-internen Reset verwenden würde, dann würde ich das so machen: Das Locked-Signal der PLL ist das Enable-Signal eines Zählers (der mit dem PLL-Takt läuft). Wenn dieser Zähler einen bestimmten Zählstand erreicht hat, wird der FPGA-interne Reset losgelassen. Ach ja, erwähnte ich, dass man einen FPGA-internen Reset verwenden müsste?
> Wie kann ich - ohne einen Takt - im FPGA einen Reset erzeugen Mit einem Takt im FPGA mit nem Ringoszillator (ist zwar ungenau sollte aber reichen).
Nochmal zu Verdeutlichung: Es geht um die Erzeugung eines ASYNCHRONEN Resets für die interne PLL des FPGA, damit ich garantieren kann, dass die sich fängt, wenn draussen der Takt stabil ist. Wenn diese PLL dann läuft nutze ich wie gehabt, deren locked um die Schaltung loszulassen. Interner Oszillator ist gut, möchte ich aber vermeiden. Habe auf die Schnelle ein Bild gemalt: Frage1: Brauche ich den bufg vor dem Zähler? (Der Zähler läuft nur gegen den Anschlag und erzeugt einen einzigen Puls) Frage2: Ich bekomme ein Timingproblem vom asynch Reset zu dem PLL Ausgang für den System-Talt und auch dem RAM-TAKT, das mir nicht ganz klar ist. Wie kann ich ein TIG ansetzen, das diese Pfade ignoriert werden? Welche Namen nimmt man da?
> Der Zähler läuft nur gegen den Anschlag und erzeugt einen einzigen Puls
Du weißt doch gar nicht wie schnell die externe PLL gerade ist. Wenn sie
nicht gelockt ist könnte sie doch 200MHz oder 20MHz haben. Da ist der
Ringoszillator ja berechenbarer.
>wenn draussen der Takt Dann nimm doch zur Überwachungslogik einfach den PLL-Eingangstakt. Der ist stabil und schwingt nicht (unter der Annahme dass der externe Taktbaustein sich viel schneller stabilisiert als das FPGA konfiguriert)
allo schrieb: > Dann nimm doch zur Überwachungslogik einfach den PLL-Eingangstakt so mache ich das auch: Den Eingangstakt in ein Schieberegister packen, um damit nach PON die PLL fuer soundsoviele Takte im Reset zu halten. Dann das Locked-Signal der PLL (zur Sicherheit auch noch mal durch ein SR, hier aber mit der PLL-clk) als globalen synchronen Reset verwenden. Hatte noch nie ein Problem damit...
Uwe schrieb: >> Der Zähler läuft nur gegen den Anschlag und erzeugt einen einzigen Puls > Du weißt doch gar nicht wie schnell die externe PLL gerade ist. Wenn sie > nicht gelockt ist könnte sie doch 200MHz oder 20MHz haben. Da ist der > Ringoszillator ja berechenbarer. Es reicht, wenn ich ungefähr weiss, wie oft der maximal taktet und ich ein Minimum von 150ms (SPEC!) einstellen kann. Wenn es dann 300ms sind ist es mir auch Wurscht. allo schrieb: > Dann nimm doch zur Überwachungslogik einfach den PLL-Eingangstakt. An den komme ich nicht ran und der wäre auch noch schlechter. Das Grundproblem ist, dass der Takt manchmal abgeschaltet wird und dann nach Einschalten die PLL etwas spinnt und Zeit braucht. So wie die Schaltung jetzt ist, arbeitet sie ja auch , nur die Synthese will nicht formell korrekt timen. Daher nochmal meine beiden Fragen: Wie muss ich das TIG setzen und brauche ich den Buffer? Wenn ich den Buffer vor dem Counter setzte kommt die Meldung mit dem "dedicated route" Problem und ohne Buffer finded die Synthese ein timing Problem zwischen dem Eingangstakt und dem RAM-Takt. Ich nehme an, dass er den Pfad vom Counterreset getrieben durch den Eingangstakt OSCCLK und den PLL-Ausgang verfolgt.
Nun ja: Du verwendest einen oszillierenden Takt, um ein Stabilitätskriterium zu erhalten.
Mit "oszillierend" meine ich : bezüglich der Frequenz zeitweise unbestimmt
Wieso nicht einen zweite FPGA-interne PLL verwenden, die nur den Eingangstakt überwacht und den Reset für die erste PLL erzeugt? Die PLL dürfte natürlich nicht als Eingangstakt den gleichen bekommen, wie die andere ...
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.