Forum: FPGA, VHDL & Co. System Synchronous <-> Source Synchronous


von Ingenieur (Gast)


Lesenswert?

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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ingenieur schrieb:
> dass ich auf der fallenden Flanke sample.
WAS sampelst du denn mit WELCHEM Takt und WOHER kommt der (oder kommen 
die)?

von Ingenieur (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.