Forum: FPGA, VHDL & Co. Syntheseergebnisse nach Lust und Laune


von Michael W. (Gast)


Lesenswert?

Wie bringt man der ISE bei, reproduzierbar zu synthetisieren?

Ich habe ein design auf dem Spartan 6, das die ISE so ziemlich an den 
Anschlag zu bringen scheint. Es ist zugegeben taktmäßig kompliziert mit 
mehreren Domains, Fifos und Taktübergängen aber eigentlich zielführend 
aufgebaut.

Ich beobachte mehr und mehr, dass die ISE sich einen abwürgt, es zu 
erzeugen, wobei er das Timing mal trifft und mal nicht. Momentan habe 
ich den Effekt, dass die erste Synthese mit frischem Projekt klappt, die 
Wiederholung nicht. Es ist kein inkrementales Compilieren eingestellt, 
trotzdem scheint er auf irgendwas zuzugreifen.

Was auch seltsam ist: Manchmal ist es nötig, die Platzierung von 
CLockBuffern zu contrainen, manchmal nicht. Teilweise ist es auch 
kontraproduktiv. Selbst, wenn ich ihm das vorgebe, was er zuvor selber 
herausgefunden hat, geht es schief und es kommt die bekannte "dedicated 
route"- Meldung. Ähnliches beobachte ich bei keep constraints auf 
Signalen, die nach der Optimierung nachweislich noch so existieren, also 
nicht verschwunden sind. Das Design kann mit keeps nicht gebaut werden.

von Duke Scarring (Gast)


Lesenswert?

Wie stark (ressourcenmäßig) ist den Dein FPGA ausgelastet?

von Georg A. (georga)


Lesenswert?

Platzierst du neben Spezialelementen (Buffer, BRAMs, etc) auch noch was 
anderes? Ich habe bei meinen Designs festgestellt, dass es in den 
meisten Fällen hilft, grosse Module (Toplevel, etc.) zumindest grob zu 
platzieren. Durchaus mit Überlappung und 30-40% mehr Raum als eigentlich 
nötig. Mit den Vorgaben war das Ergebnis deutlich reproduzierbarer. Ein 
paar "Blindgänger" gabs zwar immer noch, aber weniger als ohne das. 
Exakte Platzierung dagegen hat das wieder schlechter gemacht.

von Michael W. (Gast)


Lesenswert?

Nein, nur die buffer habe ich festgelegt, weil ich gemerkt habe, dass 
das was bringt. PLLs sind lose aber alle in gezielten Banken verwendet. 
Es sind 3 Ecken von denen ich reinkomme und 3 Daten/Takt-Regionen.

Der FPGA ist ansonsten zu 20% gefüllt. RAMs und MULs zur Hälfte.

Mich wundert am Meisten, daß er mal timed und mal nicht und das beim 
selben Design ohne vorherige Änderungen. Nur Projekt neu angelegt.

Beim Vivado habe ich gesehen, dass er im persönlichen Verzeichnis aus C 
eine Reihe temporärer Dateien anlegt, und zwar für reports und check 
points. Wenn man die löscht, geht es auch immer mal besser. Gibt es so 
einen Bereich auch bei ISE?

von Christian R. (supachris)


Lesenswert?

Ja, auch ISE legt Zeug an, was es beim nächsten Durchlauf nutzt. 
"Cleanup Project files" hilft bei ISE schon mindestens seit Version 6 
wahre Wunder.

von VHDL hotline (Gast)


Lesenswert?

Du kannst in ISE den smartxplorer nutzen. Dort kann man einen seed 
vorgeben, so dass die Ergebnisse reproduzierbar werden.

von Georg A. (georga)


Lesenswert?

> Der FPGA ist ansonsten zu 20% gefüllt.

Dann hat ISE viel zuviel Platz, um Unsinn anzustellen ;) Gib mal ein 
paar Bereiche vor...

von Michael W. (Gast)


Lesenswert?

Mich würde interessieren, warum die Ergebnisse nicht reproduzierbar sind 
und woher das kommt.

"Cleanup" mache ich ja. Ist trotzdem noch abweichend. Was könnte man 
noch wo weglöschen, um Xilinx in einen Urzustand zu versetzen?

von Duke Scarring (Gast)


Lesenswert?

Wird irgendwo ein Timestamp mit einsynthetisiert?
Sonst sollte bei identischen Einstellungen und identischen Quelldateien 
auch das Bitfile identisch sein (abgesehen vom Erstellzeitpunkt).

Duke

von bitwurschtler (Gast)


Lesenswert?


von J. S. (engineer) Benutzerseite


Lesenswert?

>"Cleanup" mache ich ja
Es kann hilfreich sein, dass komplette Syntheseverzeichnis zu löschen 
und nur die Projektdatei zu behalten.

von Christian R. (supachris)


Lesenswert?

Ich mach da immer ein svn cleanup, falls mal was hängt, aber ISE ist 
schon ne Weile her. Mit Vivado hat man andere Probleme.
Ich glaube trotz Clean Project Files bleibt eine Datei vom PAR noch 
immer drin, die muss man händisch löschen.

von daniel__m (Gast)


Lesenswert?

Jürgen S. schrieb:
> Es kann hilfreich sein, dass komplette Syntheseverzeichnis zu löschen
> und nur die Projektdatei zu behalten.

Beim Anlegen von Projekten kann man ein abweichendes Build-Verzeichnis 
angeben. Dieses kann man dann komplett löschen. Einzig Smartexplorer hat 
einen kleinen Bug: Der Smartexplorer erwartet eine Konfigurationsdatei 
im Build-Verzeichnis, die IDE legt sie aber ins Projektverzeichnis 
(fällt normalerweise nicht auf, da defaultmäßig Projektverzeichnis = 
build-Verzeichnis: welch ein Unsinn).

Ein komplettes Design festlegen ist, wie bereits beobachtet, 
wirkungslos. Bei mir hat oft geholfen:
1
- Clockbuffer und PLL/DCM/... festsetzen
2
- Clockregions nutzen für die jeweiligen Taktnetzte (dürfen sich durchaus überlappen)
3
- Module diesen Clockregions zuweisen
Ansonsten hilft auf Dauer nur Timing-Report analysieren: was knallt, wo 
knallt es, warum. Wie ist das Verhältnis zwischen Logikdelay (komplexe 
Logik) und Netdelay(lange oder indirekte Wege).
Dann im Design ändern (Source oder Constraint).
Oft sehe ich:
1
- Taktübergänge abgeleiteter Takte sind unnötig scharf, geht hier evtl. MAXDELAY, TIG, ...
2
- Einstellungsregister haben PERIOD-Constraint, können oft aber TIG sein
3
- gibt es Multi-Cycle, die ISE nicht kennt?
4
- Können Pipelineregister hinzugefügt werden? Achtung wenn ein CE benötigt wird, könnte das ein Snake-Path sein/werden, der schlimmer wird.
5
- Verwenden etliche Module ein (1) Reset? Dieser zieht meist das Design zusammen, daher lokal in den Modulen duplizieren und die Kopie verwenden. (Thema Fanout)
6
- Sind Module via Streaming verbunden? Evtl. ein Fifo als Entkopplung dazwischen setzen.


grüße

von Michael W. (Gast)


Lesenswert?

>Können Pipelineregister hinzugefügt werden? Achtung wenn ein CE benötigt
>wird, könnte das ein Snake-Path sein/werden, der schlimmer wird.

Das verstehe ich nicht. Könntest Du das bitte verdeutlichen?

>Clock Regions
Habe Ich noch nie verwendet. Muss ich mich mla schlau machen.

von daniel__m (Gast)


Lesenswert?

Markus W. schrieb:
> Snake-Path

Die Datenpfade zu pipelinen ist oft kein Problem. Jedoch müssen diese 
oft zu anderen Signale synchron sein bzw. müssen auch mal warten. Diese 
dafür notwendigen Seuersignale (meist ce, readenable, ready/valid, auch 
reset) sind oft nicht so einfach zu pipelinen und ziehen sich (meist 
sogar mit Kombinatorik) durch mehrere Module (Schlangenpfad-mäßig). 
Diese einzelnen Signale mit einem meist scharfen PERIOD-Constraint 
ziehen dann die Module zusammen. Irgendwann können die Module nicht mehr 
weiter zusammenrücken und es kommt zu timing Problemen.

von Sym (Gast)


Lesenswert?

Was hier als 'Snake Path' bezeichnet wird, ist einfach ein langer 
kombinatorischer Pfad, der die Kontrolllogik betrifft.

Ich denke, dass Markus W. schlichtweg mangels tiefgehendem Einblick 
(sorry ich will nichts unterstellen) das Design überconstraint hat. 
Zumindest "kompliziert mit mehreren Domains, Fifos und Taktübergängen" 
deutet darauf hin. Denn FIFOs zwischen 2 asynchronen Takten sind in der 
Regel nie ein Problem, es sei denn man vergisst die Ausnahmen zwischen 
den Taktdomänen.
Beispiel in SDC: 'create_clock clk1 -period 6.0' und 'create_clock clk2 
-period 7.0'
Auf dem Clock-Domain Crossing errechnet das Tool dann eine nötige 
Setupzeit von 1 ns, die man tatsächlich gar nicht braucht.

Die Liste von daniel__m ist schon mal ein guter Ansatzpunkt. Ich würde 
auch sagen: Mal testweise false_paths zwischen allen Clocks setzen und 
nochmals testen.

von J. S. (engineer) Benutzerseite


Lesenswert?

Ja, das ist seltsam beim Xilinx. Ich habe auch gerade wieder so ein 
Ding: Einmal zu früh den timing report aufgemacht und er hängt sich auf. 
Danach kann man löschen, wo und was man will, er kann den Report nicht 
mehr parsen.

Ich habe den kompletten Syntheseordner neu angelegt und trotzdem kann er 
immer wieder das file nicht mehr öffnen, auch wenn er es neu erzegut 
hat. Ich habe das jeweils neue mit alten verglichen, ob es kaputt sein 
könnte. Nichts. Kein Grund auszumachen. Projekt musste neu angelegt 
werden!

Habe daher immer eins im Archiv, das ich in einem neuen Ordner ausrollen 
kann.

Wo der Restmüll von Xilinx liegt, habe ich auch noch nicht rausgefunden. 
Auch das Löschen von tempfile und dem persönlichen APl Ordner hilft 
nicht.

von Michael W. (Gast)


Lesenswert?

Sym schrieb:
> Was hier als 'Snake Path' bezeichnet wird, ist einfach ein langer
> kombinatorischer Pfad, der die Kontrolllogik betrifft.
ok danke, aber sowas habe ich nicht. Es gibt auch scheinens kein Problem 
bei den "intra clock paths" wie es bei Vivado heissen würde.

> Ich denke, dass Markus W. schlichtweg mangels tiefgehendem Einblick
> (sorry ich will nichts unterstellen) das Design überconstraint hat.
Die Constraits kommen eigentlich von Xilinx und den grundsätzlichen 
Period-Timings. Ich denke, dass ich eher entspannen muss.

Grundsätzlich ist mir klar, was ich tun muss:

>FiFos nie ein Problem
Da kommen ignores von den FiFos selber, wie ich im Wizzard erkenne. Das 
müsste passen.

>es sei denn man vergisst die Ausnahmen zwischen den Taktdomänen.
Ich habe versucht die Domänen zu entspannen, aber viele Befehle versagen 
und werden ignoriert. Wie müsste ich das anstellen? Welche Namen sind 
relevant?

Laut Xilinx guides sind es immer die PINs, wobei er selber alles daraus 
abteitet. Angeblich.

> Beispiel in SDC: 'create_clock clk1 -period 6.0' und 'create_clock clk2
> -period 7.0'
> Auf dem Clock-Domain Crossing errechnet das Tool dann eine nötige
> Setupzeit von 1 ns
Das sieht nach Vivado aus . Dort klappt ja der Wizzard sehr gut und 
schlägt entspannenden Constraints vor. Wie sieht es bei ISE aus?

Wie entspanne ich den generierten Takt nach einen BUFG / BUFGMUX?
Als Beispiel dieses Design mit 3 Takten, bei dem der Ausgangstakt 
umgeschaltet wurde.
Beitrag "Schaltungsbau und Constraining bei Taktwechsel"

von Michael W. (Gast)


Lesenswert?

Markus W. schrieb:

>>FiFos nie ein Problem
> Da kommen ignores von den FiFos selber, wie ich im Wizzard erkenne. Das
> müsste passen.

Ich korrigiere: Es sind jetzt doch auch die Fifos. Er meldet 
irgendwelche Fitprobleme in den Tiefen des FIFOs an kryptischen 
Signalen, dabei kann da eigentlich nichts passieren.

Ich gehe mit einem Takt rein und hole mit dem anderen ab. Weil nur 
maximal jeden vierten Takt was geschrieben wird, hat der Leseprozess 
immer genug Zeit und läuft nie über.

wie teile ich dem ISE mit, dass es die Takte ignorieren soll? Die 
Schwierig besteht darin, dass der abholende Prozess mit dem geschalteten 
Takt läuft den er nicht genau kennt und im Wizzard auch nicht anbietet.

von VHDL hotline (Gast)


Lesenswert?

Schau mal im pg057 (Xilinx FIFO Generator Product Guide) und suche dort 
nach der Überschrift Setup and Hold Time Violations. Im pg057 der 
Version 9.2 stehen noch die constraints für ISE drin, in der Version 12 
nicht mehr.

von Michael W. (Gast)


Lesenswert?

Hey super, das sehe ich mir an! Vielen Dank!

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.