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?
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?
>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.
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)?
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.
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.