Forum: FPGA, VHDL & Co. Sinnvolle Werte für IO-timing (Xilinx)


von Michael (Gast)


Lesenswert?

Wie setze ich sinnvolle Werte für das IO-timing?

Ich habe konkret eine 100MHz Clock und bekomme Daten parallel von einem 
Wandler (16Bit-Bus). Wie setzt man da die Constraints?

Halbe Taktbreite, oder etwas weniger, als voll Taktbreite, also 10ns?

Für den Eingang habe ich 7ns gewählt, dasselbe für den Ausgang.

Ohne die Ausgangsconstraints synthetisiert es, mit ihnen nicht. Es gibt 
ein "did not meet timing" - Fehler.

Ich habe aber sowohl am Eingang, als auch am Ausgang noch mal extra FFs 
instanziiert und auch das Rücken in die IO-Zellen aktiviert.

Was wäre zu tun?

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


Lesenswert?

Michael schrieb:
> Ohne die Ausgangsconstraints synthetisiert es
Die Synthese schert sich einen feuchten Kehricht um Timing-Constriants.

> Für den Eingang habe ich 7ns gewählt, dasselbe für den Ausgang.
Man wählt nicht einfach irgendwelche beliebige Werte, sondern man 
zeichnet sich das Timing mal auf und sieht nach, wie lange der 
AD-Wandler braucht, um nach dem Takt die Daten bereitzustellen. Daraus 
kannst du dann ausrechnen, wieviel Zeit bis zu nächsten steigenden 
Flanke in deinem FPGA bleibt. Interessant ist hierbei allerdings die 
Frage, wie der AD-Wandler getaktet ist.

> Ich habe konkret eine 100MHz Clock und bekomme Daten parallel von einem
> Wandler (16Bit-Bus).
Zusammen mit dem Takt?

von Michael (Gast)


Lesenswert?

>Die Synthese schert sich einen feuchten Kehricht um Timing-Constriants.

Wieso das denn? Oder meinst Du damit, daß es nicht die Synthese, sondern 
der Mapper ist, der das tut?

Bitte um Aufklärung.

>AD-Wandler

Der Wandler bringt die Daten 2-4ns nach der Flanke und hält sie dann 
konstant. Also kann ich spätestens 4ns mit den Daten rechnen und bis zu 
2ns nach der Flanke vermuten.

Ich habe daher 10ns - 2ns = 8ns angesetzt.

Die Frage ist noch, wann der Wandler die Flanke sieht und wann es der 
FPGA tut. Beide kommen aus demselben Quarz. Das FPGA wird aber so 
geskewed, daß es auf der Flanke des Wandlers sitzt / sitzen kann.

von Michael (Gast)


Lesenswert?

Das Ding will um's Verrecken nicht synthetisieren!
Habe jetzt nochmal jeweils 2 zusätzliche Input- und Output-FFs (volle 
Latches über alle Daten) eingebaut sowie Input- und Output-Delays von 
10ns angegeben, was schon an der Grenze des Machbaren ist.

Komisch: Er meldet bei der Synthese ...
1
Minimum period: 5.521ns (Maximum Frequency: 181.122MHz)
2
Minimum input arrival time before clock: 2.547ns
3
Maximum output required time after clock: 4.677ns
4
Maximum combinational path delay: No path found

Heisst das denn nicht, daß er einen 3ns-Input bauen können müsste (zzgl. 
routing)?

von Salvatore (Gast)


Lesenswert?

Was sagt denn der Mapper?

von Klaus F. (kfalser)


Lesenswert?

Michael schrieb:
> Wieso das denn? Oder meinst Du damit, daß es nicht die Synthese, sondern
> der Mapper ist, der das tut?
>
> Bitte um Aufklärung.

Man unterscheidet zumeist 3 Schritte :
1) Umwandlung von VHDL in generische Hardware-Komponenten, also FF, 
And-, Oder- Gitter usw.
Diesen Schritt bezeichnet man als die Synthese.
2) Umwandlung der generischen Hardware-Komponenten in spezifische für 
das FPGA -> And und Oder-Gitter in LUTs z.B.
Diesen Schritt bezeichnet man als das Mappen.
3) Die Plazierung der spezifischen Hardware-Komponenten im FPGA.
Dieser Prozess ist kompliziert und langsam, weil das Programm nur 
aufgrund von Try und Error die Komponeneten solange herumschiebt, bis 
die Verbindungswege dazwischen kurz genug sind.
Diesen Schritt bezeichnet man als Place & Route und erst dabei kann 
festgestellt werden, ob das Timing erreicht wird oder nicht, und erst 
dort kommt meines Wissens eine Fehlermeldung "Timing not met".
Bei den vorigen Schritten kann das Timing höchstens abschätzen, ich habe 
nie erlebt, dass die Synthese selbst schon Timing-Problemen als Fehler 
meldet und abbricht.

von Michael (Gast)


Lesenswert?

Warum nur bekommt man hier keine inhaltlich vernünftige Antwort?

Ihr zieht euch dran hoch, daß ich mit Synthese den gesamten 
Erzeugungsschritt benannt habe, nur weil Xilinx damit 
unverständlicherweise nur die VHDL-Umsetzung meint und erklärt mir die 
konfuse Xilinx-Deklarationsmethodik, statt einfach mal auf die Frage zu 
antworten.


Wie setze ich sinnvolle Werte für das IO-timing?

Ich habe eine 100MHz Clock und bekomme Daten parallel von einem
Wandler (16Bit-Bus). Wie setzt man da die Constraints?

Halbe Taktbreite, oder etwas weniger, als volle Taktbreite?

von Klaus F. (kfalser)


Lesenswert?

Michael schrieb:
> Warum nur bekommt man hier keine inhaltlich vernünftige Antwort?
Die Antworten sind meist schon vernünftig, nur das Wissensniveau der 
Fragesteller ist unterschiedlich. Der eine braucht nur ein Detail, der 
andere ein ganzes Kochrezept. Du scheinest eher ein Kochrezept-Type zu 
sein.

>
> Ihr zieht euch dran hoch, daß ich mit Synthese den gesamten
> Erzeugungsschritt benannt habe, nur weil Xilinx damit
> unverständlicherweise nur die VHDL-Umsetzung meint und erklärt mir die
> konfuse Xilinx-Deklarationsmethodik, statt einfach mal auf die Frage zu
> antworten.
Nun, wenn Du zu einem Mechaniker gehst, und sagst ihm das Auto sei 
kaputt, der Vergaser funktioniert nicht, dann kannst Du auch nicht 
später sagen, ja eigentlich waren es die Bremsen, aber egal das Auto war 
kaputt.
Korrekte Bezeichnungen helfen den Fehler zu lokalisieren. Und wenn 
jemand die falschen Bezeichnungen verwendet, dann erkennt man eben dass 
jemand noch nicht weiss was er tut.
Aufgrund Deiner ein wenig arroganten Antwort scheint es so, dass Du auch 
in Zukunft noch nicht wissen will, was Du tust, sondern nur möchtest, 
dass man Dir sagt, welche Zahlen Du wohin schreiben sollst.
>
> Wie setze ich sinnvolle Werte für das IO-timing?
>
> Ich habe eine 100MHz Clock und bekomme Daten parallel von einem
> Wandler (16Bit-Bus). Wie setzt man da die Constraints?
a) Du spezifizierst die Taktperiode 10 ns. Du kannst die Taktperiode 
genau angeben, brauchst also keinen Sicherheitsfaktor dazugeben, weil 
der FPGA-Hersteller dies schon getan hat.
b) Für Ein- und Ausgänge gibt es die INPUT und OUTPUT constraints. Diese 
erlauben, Setup und Hold-Zeiten für die ANGESCHLOSSENEN Bausteine zu 
garantieren. Das hängt als nur von deiner Beschaltung ab. Dazu gibt es 
aber Dokumentation von Xilinx, suche nach INPUT constraint.
>
> Halbe Taktbreite, oder etwas weniger, als volle Taktbreite?
nein, siehe oben.

von M. (Gast)


Lesenswert?

Ich habe keine Arrogante Antwort gegeben, sonder zurecht kritisiert, daß 
man mir auf ganz konkrete Fragen keine konkrete Antwort gab. Du selbst 
hast ja nun in deinem zweiten Teilpost bewiesen, daß man die Fragen sehr 
wohl beantworten konnte.

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.