Forum: FPGA, VHDL & Co. Xilinx Constraint Problem mit externem Takt


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


Lesenswert?

Ich habe ein Problem mit Xi constraints: Das Design kann nicht korrekt 
geroutet werden - irgendwo hängt er sich auf.

Ich habe das hier schon mal bezüglich der Outputs angesprochen:
Beitrag "Re: Spartan3 - DDR / DCM - Timing-Constraint-Probleme"

Mir ist nicht klar auf welchen Takt ich mich jeweils beziehen muss, 
damit XI versteht, was ich will.

In meinem Design habe ich inputmässig 2 Fälle:

Ich synchronsiere u.a. Schalterstellungen ein und habe diese in FFs 
registriert. Takt ist der Systemtakt im FPGA "Takt1" , der über einen 
DCM kommt. (QUARZ -> DCM -> TAKT1 , TAKT2 , TAKT3)

Praktisch sind "QUARZ" = 50MHz -> 20ns und TAKT1 = 150 MHz -> ~6ns

Wie muss das constraint beschaffen sein:

TIMEGRP "switches" OFFSET = IN 6.6 ns BEFORE "TAKT1" RISING oder die 
Bezugnahme auf den Eingangstakt

TIMEGRP "switches" OFFSET = IN 20 ns BEFORE "QUARZ" RISING  bzw

TIMEGRP "switches" OFFSET = IN 6,6 ns BEFORE "QUARZ" RISING?

Mir geht es einmal darum diese Schalterstellungen zeitlich zu 
entspannen, zum anderen darum, andere wichtige Signale genau zu 
spezifizieren.

Dies wäre dann Fall2:

Ich habe einen Datenbus mit seinem Clock, die nicht abgetastet werden, 
sondern die Register werden mit dem Takt geschrieben.

EXT_DATA (15 downto 0) -> FF-Dateneingang
EXT_CLOCK (125 MHz) -> FF-Takteingang

Wie constraine ich das?

Ich habe eine timegroup für die Daten und benutze den EXT_CLOCK als 
Bezug.

TIMEGRP "Data_INs" OFFSET = IN 4 ns BEFORE "EXT_CLOCK " RISING (Mitte 
des Bits, da 8ns Timespec).

Das wird auch gefressen, aber seither habe ich die Probleme oben.

Ich habe auch  TIGs gesetzt, kriege aber immer mehr Timing-Fehler.

von Michi (Gast)


Lesenswert?

R. K. schrieb:
> Mir geht es einmal darum diese Schalterstellungen zeitlich zu
> entspannen,

wozu?

R. K. schrieb:
> TIMEGRP "switches" OFFSET = IN 20 ns BEFORE "QUARZ" RISING  bzw
> TIMEGRP "switches" OFFSET = IN 6,6 ns BEFORE "QUARZ" RISING?

Soweit mir bekannt, müssen die Angaben immer auf den jeweiligen Tlt 
bezogen sein. Da der Quarz-Takt, also der Eingang der PLL benutzt wird, 
müssten die SPECs auch hinsichtlich des Offsets so beschaffen sein, also 
Vesion 1 stimmen.

Ich lasse mich aber gern vom Gegenteil überzeugen.

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


Lesenswert?

Für Eingäng, die sowieso eingetaktet werden (wie zum Beispiel die 
erwähnten Schalter) gibt es ein TIG (timing ignore) Constraint. Das 
entspannt die Sache extrem... ;-)

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


Lesenswert?

Wie müsste das aussehen?

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


Lesenswert?

Robert K. schrieb:
> Wie müsste das aussehen?
Siehe dort Abschnitt "Timing Ignore":
http://www.xilinx.com/support/answers/2449.htm

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


Lesenswert?

und ich brauche dann kein constraint mehr?

von Michael (Gast)


Lesenswert?

Robert K. schrieb:
> und ich brauche dann kein constraint mehr?
Das TIG ist das constraint :-)

Ansonsten versucht die Software ständig, die Taktflanken zu berechnen 
und die Zeiten dazwischen einzuhalten.

von CZM (Gast)


Lesenswert?

Ich habe ein ähnliches Problem mit zwei verschiedenen Eingangstakten, 
wobei der eine seine Daten mit der fallenden Flanke sendet. Damit kommen 
diese Daten bei mir dann mittenzentriert an.

Beide Takte nehmen somit (ohne PLL) ihre Daten in Register rein, daher 
verstehe ich das hier nicht:

Lothar Miller schrieb:
> Für Eingäng, die sowieso eingetaktet werden (wie zum Beispiel die
> erwähnten Schalter) gibt es ein TIG (timing ignore) Constraint. Das
> entspannt die Sache extrem... ;-)

Angenommen, ich habe die Daten mit ihren eigenen Takten drin, dann sind 
sie intern ja nun synchron. Wozu brauche ich dann das TIG? Wie sollte 
das "entspannend" wirken?

Das constraint gibt ihm doch vor, dass er die Daten in der valid-Zeit 
verarbeiten muss und Dank der Nutzung von IO-FFs sollte er das dann auch 
schaffen. Das constraint müsste dann lediglich geprüft werden.

Oder nicht?

Jetzt zur Frage:

Wie wäre es, wenn die Daten gemultiplext werden sollen?

Der ein Takt sendet auf 33MHz, der andere auf 48MHz. Beide Datenströme 
werden mit 100 MHz gesampelt und analysiert. Dann brauch ich ein TIG 
zwischen beiden Eingangstaken und dem Sampletakt.

Wie formuliere ich da?

Der Sampletakt kommt aus einer PLL mit eigenem Quarz und hat mit den 
Eingangstakten keinen Bezug.

von Duke Scarring (Gast)


Lesenswert?

CZM schrieb:
> Der ein Takt sendet auf 33MHz, der andere auf 48MHz. Beide Datenströme
> werden mit 100 MHz gesampelt und analysiert. Dann brauch ich ein TIG
> zwischen beiden Eingangstaken und dem Sampletakt.
Wenn Du die Eingangstakte absampelst, sind es keine Takte mehr, sondern 
nur noch ganz normale Signale.

Alternativ führst Du Deine Datenströme auf asynchrone FIFOs. Da wird mit 
externem Takt geschrieben und mit dem internen Takt gelesen. Und schon 
ist die Welt wieder synchron.

Duke

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.