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 ...
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.