From To constraint bei Lattice

Gast #3309547
Lesenswert?

Servus,

wenn ich bei Xilinx das Timing für einen Übergang zwischen 2 
clockdomains constrainen möchte, mache ich das so:

NET "CLK_1" TNM_NET = "TIMEGROUP_CLK_1";
NET "CLK_2" TNM_NET = "TIMEGROUP_CLK_2";

TIMESPEC "TS_1_TO_2" = FROM TIMEGROUP_CLK_1 TO TIMEGROUP_CLK_2 8 ns;
TIMESPEC "TS_2_TO_1" = FROM TIMEGROUP_CLK_2 TO TIMEGROUP_CLK_1 8 ns;

Wie sieht ein solches Konstrukt bei Lattice aus?
Gast #3310479
Lesenswert?

Wenn ich mehrere Signale parallel (Adress- und Datenbus) übertrage, 
stelle ich so sicher, dass sie innerhalb einer gewissen Zeit, also 
einigermaßen synchron eintreffen. Sonst kann es doch theoretisch 
passieren, dass ich ein Strobe-Signal detektiere, während z.B. die 
Adresse noch gar nicht gültig ist. Mag sein, dass das in einem schnellen 
FPGA relativ theoretisch ist, aber ich halte es für möglich, 
insbesondere wenn das Eintakten mit einem schnellen Takt geschieht.
Persönliche Seite #3311177
Lesenswert?

Irgendein constraint muss man setzen und sei es ein TIG. Das Problem ist 
aber dann die konsistente Übernahme von Daten aus Bussen. Wenn die 
einzelnen routings zu weit auseinanderlaufen, klappt das Einsynchen gfs 
nicht mehr wie gewünscht:

pks schrieb:
> Mag sein, dass das in einem schnellen
> FPGA relativ theoretisch ist, aber ich halte es für möglich,
> insbesondere wenn das Eintakten mit einem schnellen Takt geschieht.

Die Bedenken sind begründet. Wenn man das Timing mit einem TIG 
entspannt, könnte es passieren, dass die unterschiedlichen Laufzeiten 
zugehöriger Signale so stark gespreizt sind, dass man sie nicht mit 
derselben Flanke des Zieltaktes erwischt und man niemals (auch bei noch 
so starkem oversampling) einen konsistenen Bus sieht. Da nutzt dann das 
beste strobe nichts.

Leider ist es mir noch nicht gelungen herauszubekommen, ob die 
Synthestools das automatisch berücksichtigen, oder ob es gfs durch die 
Art des Platzierens (timing driven) mehr oder weniger automatisch 
hinhaut oder ob nict viele Designs einfach Glück haben. Bei einigen 
zurückliegenden Designs habe ich diesbezügliche constraints nicht 
gebraucht. Grundsätzlich schaden sie aber nicht, meine ich.
Gast #3311708
Lesenswert?

Du hast absolut recht, mit deinen Befürchtungen.
Wenn die Takte keinen Bezug haben, dann kann das echt ein Problem 
werden.

Das Risiko steigt, je knapper die Zeit zwischen anlegen der Daten und 
dem Strobe-Signal an der Quelle wird.
Ich würde hier auch auf jeden Fall ein Constraint vergeben, das 
sicherstellt, dass das Strobe-Signal die Daten nicht überholen kann.
Also einen Max-Delay der kleiner ist, als der Abstand zwischen Daten an 
der Quelle gültig und Strobe an der Quelle gültig.

MULTICYCLE, wie Lattice User ja bereits angegeben hat, ist da das 
passende Constraint. Meines Wissens kann man anstelle eines Faktors auch 
eine absolute Zeit angeben.

MAXDELAY müsste auch gehen. Wobei du hier vermutlich mit DATA PATH ONLY 
oder so ähnlich klar machen musst, dass der Quell-Takt und der 
Zielt-Takt keinen Bezug zueinander haben..

Aber musst mal nachlesen, wie das mit den Constraints genau geht. 
Stichworte zum googeln hast ja ;-)
#3313572
Lesenswert?

Hallo pks,

meiner Einschätzung nach geht deine Frage am eigentlichen Problem 
vorbei. Wenn Du ganze Busse von einer Taktdomäne in eine andere 
hinüberführen muss, dann hift da kein Constraining. Da muss man die 
Logik richtig bauen und dann ist das Timing schlicht egal. Das Problem 
hat man ja nicht nur zwischen zwei Taktdomänen im FPGA, sondern auch 
wenn man einen externen uC an ein FPGA mittels eines parallelen 
Interfaces anschließt.
Meine Vorgehensweise ist da üblicherweise, den (Adress-)Bus überhapt 
nicht einzusynchronisieren, sondern nur das Strobe-Signal. Durch drei 
Flipflops durch, Differenzsignal von 2. und 3. Stufe als enable für 
nachfolgende Logik nehmen, und gut ist's. Funktioniert zuverlässig.

Grüße,
Harald
Gast #3313648
Lesenswert?

Harald Flügel schrieb:
> Meine Vorgehensweise ist da üblicherweise, den (Adress-)Bus überhapt
> nicht einzusynchronisieren, sondern nur das Strobe-Signal. Durch drei
> Flipflops durch, Differenzsignal von 2. und 3. Stufe als enable für
> nachfolgende Logik nehmen, und gut ist's. Funktioniert zuverlässig.

Hallo Harald,

Genau so mach ich es ja auch. Es ging mir um den Fall, dass ein Bit des 
Adressbusses eine längere Signallaufzeit hat, als die Eintaktung des 
Strobes dauert.
#3314690
Lesenswert?

Hallo pks,

den Fall, dass ein Bit des Adressbusses eine längere Signallaufzeit hat, 
als die Eintaktung des Strobes dauert, den vermeide ich zuverlässig 
dadurch, dass die Eintaktung lange genug dauert. Die zwei ohnehin 
nötigen Flipflops hintereinander reichen da üblicherweise aus, und wenn 
nicht, dann kommt halt noch ein drittes oder ein viertes rein.

Grüße,
Harald
Gast #3314799
Lesenswert?

Das klappt gut bei entsprechenden Timingvorschriften für den Sender.

Also in diesem Fall, dass die Daten nach dem Strobe noch mindestens für 
die Zeit 3x FPGA interne Taktzyklen anliegen müssen. (Thold)

Das schränkt die erreichbare Geschwindigkeit natürlich ein.


Wenn der ganze Adress-/Daten-/Steuerbus einsynchronisiert wird, können 
die nötigen Setup- und Hold Zeiten natürlich kürzer sein (bei 
entsprechend höherem Resourcenverbrauch).
Gast #3318311
Lesenswert?

pks schrieb:
> TIMESPEC "TS_1_TO_2" = FROM TIMEGROUP_CLK_1 TO TIMEGROUP_CLK_2 8 ns;
> TIMESPEC "TS_2_TO_1" = FROM TIMEGROUP_CLK_2 TO TIMEGROUP_CLK_1 8 ns;
Kann ich diesen Konstruktu auch für einen timing ignore verwenden? Bei 
mir spukt der Synthesizer, dass er das nicht verarbeiten kann, weil es 
mit der Clock time spec interferiert:

Beitrag "Problem mit Timing Constraint bei Xilinx"

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren