Forum: FPGA, VHDL & Co. Spartan3 - DDR / DCM - Timing-Constraint-Probleme


von Michael O. (mischu)


Lesenswert?

Hallo zusammen,

Webpack optimiert mir meine schönen Timing - Constraints für einen 
differentiellen DDR Ausgang einfach weg ....
Ich habe mich schon durch diverse "Anleitungen" und Tutorials geklickt, 
aber keine passenden Vorschlag gefunden der exakt für mein System passt.

Mein System sieht so aus:

Eingangstakt: 50MHz
Datentakt:   200MHz (0° & 180°) (intern per DCM erzeugt)
Datenströme: (16bit) jeweils für rising und falling edge
DDR - FlipFlop: FDDRCPE  (DDR-FF ohne Ausgangspad)
Ausgangsbuffer: OBUFDS (Differentieller Ausgangsbuffer)
Datentaktausgang: 200MHz werden (leider nicht anders möglich) per OBUF 
ausgegeben

Damit die externen differentiellen Datan zum Clock in einer Beziehung 
stehen habe ich folgende UCF Constraints gesetzt.
(clock_ext: 50MHz Eingang;  clock200: 200MHz Takt aus DCM)
-----------------------------------
NET "clock_ext" TNM_NET = clock_int;
TIMESPEC TS_clock_ext = PERIOD "clock_int" 20 ns HIGH 50%;

NET "clock200" TNM_NET = clock200;
TIMESPEC "TS_clock200" = PERIOD "clock200_int" 5 ns HIGH 50%;

Alle Datenausgänge (exemplarisch):
INST "Data_out_P_ext<x>" TNM = Data_Out_pads;
...

TIMEGRP "Data_Out_pads" OFFSET = OUT 2.5 ns AFTER "clock_ext" RISING;
TIMEGRP "Data_Out_pads" OFFSET = OUT 2.5 ns AFTER "clock_ext" FALLING;

-----------------------------------
Dazu bekomme ich folgende Warnings :
WARNING:Timing:3224 - The clock clock_ext associated with TIMEGRP
   "Data_Out_pads" OFFSET = OUT 1.25 ns VALID 2.5 ns AFTER COMP 
"clock_ext"
   "FALLING" does not clock any registered output components.
WARNING:Timing:3225 - Timing constraint TIMEGRP "Data_Out_pads" OFFSET =
   OUT 1.25 ns VALID 2.5 ns AFTER COMP "clock_ext" "FALLING" ignored 
during
   timing analysis


Sofern ich statt clock_ext die 200MHz Clock als Bezug angebe erhalte ich 
dieselben Warnings.

Hat jemand dieselben Probleme??
Irgend welche Vorschläge??

VIelen Dank für Eure Unterstützung!!

von Duke Scarring (Gast)


Lesenswert?

Du kannst mal in den Clock Report schauen, wie die erkannten Takte 
aktuell benannt werden:
1
**************************
2
Generating Clock Report
3
**************************
4
5
+---------------------+--------------+------+------+------------+-------------+
6
|        Clock Net    |   Resource   |Locked|Fanout|Net Skew(ns)|Max Delay(ns)|
7
+---------------------+--------------+------+------+------------+-------------+
8
|          box_i0/clk | BUFGMUX_X2Y10| No   | 1081 |  0.073     |  0.175      |

Wenn ich mir den Takt z.B. auf ein Pin lege, ist XST der Meinung einen 
anderen Namen verwenden zu müssen. :-(

Duke

von Michael O. (mischu)


Lesenswert?

Ich habe erstmal ein Workarround gefunden für das Problem.
Ich verwende eine DCM um den Takt Ausgangstakt relativ zum Datentakt zu 
verschieben ...   Try - and error.

Das Routing inklusive Delays habe ich mir angesehen. Er behandelt die 
zugehörigen Clocksignala via BUFG als Clocks und verwendet diese an den 
finalen DDR-FFs.

In meinem Design gebe ich ein Clocksignal mit den Daten aus.
Die Daten laufen am PAD durch ein DDR-FF mit nachgeschaltetem 
differentiellen Buffer. Da kann man an den Timings der Datenströme doch 
gar nichts mehr drehen.
Das Clocksignal habe ich schon auf diverse Arten erzeugt - final nehme 
ich ebenfalls jeweils einen DDR-FF und lasse bei z.B. steigender Flanke 
ein 1 und bei fallender Flanke eine 0 ausgeben. Somit müssten alle 
Ausgänge von Typ her sich änhlich verhalten.

von Robert K. (Firma: Medizintechnik) (robident)


Lesenswert?

Ich habe gerade ein ähnliches Problem und hänge mich mal hier dran:

Michael O. schrieb:
> TIMEGRP "Data_Out_pads" OFFSET = OUT 2.5 ns AFTER "clock_ext" RISING;

Ist das korrekt so?  Muss statt clock_exgt nicht der erzeugende Takt der 
DCM rein?

Michael O. schrieb:
> "FALLING" does not clock any registered output components.
Geht es bei Rising?

So ein Fehler kommt ja meistens dann, wenn man ein statisches Signal 
ausgibt. Bei DDR wird aber immer umgeschaltet, sofoern vorne wirklich 0 
und 1 an den Eingängen liegen.

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.