Ich muss ein uraltes Spartan 3E-Programm umschreiben und neu anpassen. Dabei bin ich auf ein Problem gestossen: Im Xilinx constraint Editor gibt es zwei Optionen, wie man den Takt spezifizieren kann. Einmal wird der interne Systemtakt verwendet, einmal der externe Quelltakt, um die Datenlage anzugeben. Dabei habe ich jeweils die Möglichkeit auf edge und einmal Center zu gehen. Meines Erachtens müssten das - korrekt ausgeführt - zu nur 2 Fällen mit jeweils denselben Werten führen. Dies ist formell auch der Fall, führt aber dazu, dass das Design einmal nicht richtig timed. Der Grund ist wohl der, dass ich auf der fallenden Flanke sample. Dazu habe ich mir eine DCM genommen und einen 180 Grad Takt gemacht. Die alles entscheidende Frage ist nun, wie man den spezifiziert! Wenn ich auf das PAD gehe, muss ich das eigentlich ignorieren, oder? Das scheint nicht zu funktionieren. Umgekehrt kann ich aber die interne DCM-Clokc nicht nehmen, weil sie nicht angeboten wird. Wird das denn berücksichtigt, beim Timing?
Ingenieur schrieb: > dass ich auf der fallenden Flanke sample. WAS sampelst du denn mit WELCHEM Takt und WOHER kommt der (oder kommen die)?
Also, es gibt einmal einen Bus mit Daten und CTRLs: BUS_CLK (100 MHz) BUS_ADR BUS_DAT BUS_WEN Diese Daten liegen so, dass ich genau auf der fallenden Flanke des Taktes in der Mitte des Auges bin. Dann gibt es einen zu sampelnden "Bus" mit gestreamten Daten ohne Takt, die ich mit den internen 125 MHz des FPGAs (aus einer 5:4 PLL gewonnen) annehme. Die Daten dort sind MEM_ADR(8) und MEM_DAT (16). Sie kommen völlig asynchron, sobald das Messmodul was gefunden hat und es ausgibt. Sie liegen aber mindestens 20ns an, ändern sich also mit maximal 50MHz. Inklusive Jitter wäre die doppelte Datenrate zum Sampeln > 115 MHz. Die 125 MHz funktionieren. Ich habe als Lösung bisher den Takt des 100er PLL-Ausgangs und des 125er PLL-Ausgangs hin und her geschoben, bis ich stabile Daten hatte - würde das aber gerne richtig sauber constrainen. Es werden IO-FFs für alle Eingänge verwendet und soweit ich es sehe, gibt es auch keine Fehler mehr. Bei Zimmertemperatur und guter Spannung halt. Daher möchte ich gerne die formelle Sicherstellung nach Min-Max-Analyse durch das Tool. Als eine Möglichkeit habe ich mir Constraints generieren lassen, die aus einer "System Synchronous" Version stammen und bekomme: TIMEGRP "BUS_GRP" OFFSET = IN 10 ns VALID 10 ns BEFORE "BUS_CLK" RISING; In der Annahme, dass der Bus Unsicherheit hat, habe ich es so eingeschränkt: TIMEGRP "BUS_GRP" OFFSET = IN 8 ns VALID 6 ns BEFORE "BUS_CLK" RISING; Für mich bedeutet das, vor und nach der Flanke 1ns Luft. Stimmt das? Wie bestimme ich das Constraint nun so, dass ich auf die negative Flanke sampeln kann? Das packt er mit Setup/Hold nicht. Wenn ich auf "Falling" gehe, findet er keine FlipFlops. Beim MEM_BUS gibt es mit der Definition keine Probleme, weil ich immer auf der steigenden Sample. Der 125 Mem-Sampler steht auf 0 GRad, der 100er interne Muss auf 180.
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.