Syntheseergebnisse nach Lust und Laune

Gast #4753895
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.
#4754048
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.
Gast #4754075
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?
Gast #4755797
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
Gast #4756805
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.
Gast #4758781
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.
Persönliche Seite #4759026
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.
Gast #4759972
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"
Gast #4761214
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.

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