Vivado und die undurchsichtigen Synthese-Einstellungen

Gast #6075472
Lesenswert?

Wieder mal Überraschendes bei Vivado:

Wir wissen, dass AREA-Optimization zu geringerer Chipfläche führt aber 
mehr Probleme existieren, das timing zu treffen. Ferner führen 
Timing-orientierte Vorgaben zu eventuell getroffenem timing aber oft zu 
erheblich mehr FFs. Die Defauls führen zu einem Kompromiss. Soweit, so 
gut.

Nun habe ich eine Schaltung, die zu folgenden Ergebnissen führte und das 
timing knapp um 1ns bei 100MHz verpasste:

LUT      1588
LUTRAM   7
FF       1722
BRAM     2

Eingestellt waren für Synthese und Implementierung die Defaults.

Da das timing nicht getroffen wurde, habe ich den Fiming optimizedflow 
für die Implementierung eingestellt. Durch eine Unachtsamkeit habe ich 
aber die Synthesis auf Area stehen gelassen.

Ergebnis:

LUT      1472
LUTRAM   7
FF       1694
BRAM     2

und timing knapp getroffen! WNS -1.1ns  hinterher +0.4ns slack.

Die Einstellungen die sich formell strategisch widersprechen, führen als 
zu beiderseits besseren Ergebnissen. Wer erklärt es mir?

Gegencheck: Beides auf Default erzeugt wieder die alten Werte. Wenn ich 
die Synthese auch auf Timing-optimized stelle, wird es kaum besser oder 
schneller, er frisst aber fast 2000 FFs.

?
Gast #6075518
Lesenswert?

M. W. schrieb:
> Wer erklärt es mir?

Die verwendeten Optimierungsstrategien sind meistens Heuristiken, die 
zwar im Schnitt bei den jeweiligen Optimierungszielen bessere Ergebnisse 
liefern. Das bedeutet nicht, dass sie immer bessere Ergbenisse 
liefern. Es kommt relativ häufig vor, dass ein Area-optimiertes Design 
bessere Timingwerte liefert als eines, das für Timing optimiert wurde. 
Das hängt vom Design ab und ist aufgrund der Komplexität des 
Optimierungsproblems nicht vorhersagbar.
Bei großen Designs mit sehr kritischen Timingconstraints macht man daher 
oftmals viele Synthese-/Implementierungsdurchläufe parallel, die sich in 
den Vorgaben etwas unterscheiden. Das nennt sich 
Entwurfsraumexploration, und ist beim ASIC-Design der normale Weg. Dort 
liefern die ersten Durchläufe meistens katastrophale Timingwerte, die im 
Laufe der Zeit dann nach und nach besser werden.
Wenn du ein Timing- oder Area-kritisches Design hast, musst du immer mit 
verschiedenen Parametern rumexperimentieren bis eine Lösung gefunden 
wurde, die alle Constraints erfüllt. Besonders interessant wird das, 
wenn Synthese und Implementierung unterschiedliche Vorgaben erhalten. 
Das kann, wie in deinem Fall, zu einer richtigen Lösung führen. Wie 
gesagt, Heuristiken.
Gast #6076122
Lesenswert?

Tim schrieb:
> Wahrscheinlich haben die dann schon gleich viel gebracht.
Doch, es ändert sich ja. Also haben sie auch eine Auswirkung.

jemand schrieb:
> Jede Synthese wird mit einer Random Seed gestartet.
> Du hast einfach nur Gluek gehabt.
> "Wer wuerfelt gewinnt!"
Nein, die Ergebnisse sind reproduzierbar. Bis aufs FF genau.

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