Ich arbeite an einem großen FPGA-Design und bin sehr nahe an den Ressourcengrenzen des FPGA, das ich derzeit verwende, dem Xilinx LX16 im CSG225-Paket.
Das Design ist ebenfalls fast vollständig, passt aber momentan nicht mehr in das FPGA. Ich kann Teile ausschalten, damit sie passen. Ich muss jedoch den Ressourcenverbrauch reduzieren, um das Design zu vervollständigen und die Zeit- und Größenanforderungen zu erfüllen.
Ich würde gerne wissen, ob es in unseren Berichten Tools gibt, mit denen ich feststellen kann, welche Teile meines Designs die meisten Ressourcen verbrauchen. Mein Design ist nicht partitioniert und auf etwa ein Dutzend oder mehr VHDL-Module aufgeteilt.
Xilinx-Timing-Berichte sind fantastisch, aber jetzt muss ich wissen, wo ich in Bezug auf Platzersparnis mein Bestes geben kann.
Es fällt mir auch schwer zu sagen, welche Art von Ressourcen mir ausgehen oder welche Auswirkungen diese Ressourcen haben.
Ein weiteres Ärgernis ist, dass Komponenten, die früher das Timing erfüllten, mit zunehmender Größe des Designs allmählich versagen, weil ihre Platzierung nicht mehr so ideal ist.
Derzeit verwende ich die statischen Zeitberichte für Post-Place und Route sowie den SmartXplorer. Ich verwende Designstrategien, um das Timing zu optimieren.
Nachdem ich einen Teil meines Designs deaktiviert habe, damit es passt, sind hier einige der Ergebnisse:
Slice-Register-Auslastung: 42% Slice-LUT-Auslastung: 96% Anzahl der vollständig genutzten LUT-FF-Paare: 38% Bedeutet dies, dass ich nur wenig Register habe, aber viel Gate-Nutzung?
Gibt es Tools, mit denen Entwickler den Bereich optimieren oder zumindest mehr Einblick in ihren Code erhalten können?
Update: Nachdem ich mir die Module Level Utilization angesehen hatte, stellte ich fest, dass ich überall kleine asynchrone Kleber-Fifos hatte, die ungefähr 30% der gesamten LUTs ausmachen. Ich verwende sie als Cross-Clock-Domain-Kleber für Hochgeschwindigkeitsbusse. Ich sollte in der Lage sein, diese zu beseitigen, da die Uhren eng miteinander verbunden sind. (120 MHz Eingang, erzeugt 100 MHz und 200 MHz über DCMs)
Antworten:
Ich habe diese Frage im Xilinx-Forum hier gepostet: http://forums.xilinx.com/t5/Implementation/How-to-determine-what-part-of-the-design-consumes-the-most/td-p / 393247
Diese Antwort basiert weitgehend auf den dortigen Kommentaren. Danke an Deepika, Sikta und Gabor.
Aktivieren Sie zunächst "Detaillierten MAP-Bericht erstellen" in den Eigenschaften des Kartenprozesses (-detail).
Öffnen Sie dann die Entwurfszusammenfassung und navigieren Sie zur Verwendung auf Modulebene. Hier ist die vollständige Hierarchie, die die exklusive und umfassende Verwendung des Designs zeigt.
Jede Zeile zeigt ein Zahlenpaar wie 0/5392. Dies bedeutet, dass dieses Modul Null dieses bestimmten Elements enthält, dieses Modul und alle seine Untermodule jedoch insgesamt 5392 Elemente enthalten.
Hier ist meine Ausgabe (teilweise erweitert)
Wenn Sie daran arbeiten, die Größe zu reduzieren, empfiehlt Gabor, in den Synth-Tools auf ein größeres FPGA zu wechseln, damit es auch dann vollständig zugeordnet werden kann, wenn es zu groß ist, um in Ihr aktuelles FPGA zu passen, und die Tools schneller ausgeführt werden.
quelle
Sieht so aus, als würden Sie fast alle logischen Ressourcen verbrauchen, während Sie nur die Hälfte der Register verwenden. Es sieht so aus, als müssten Sie herausfinden, was all Ihre LUTs auffrisst. Es gibt Möglichkeiten, bestimmte Komponenten zu optimieren und etwas platzsparender zu gestalten - beispielsweise RAMs, Schieberegister und Zustandsautomaten. Sehen Sie sich die resultierende .log-Datei vom Synthesizer an. Hier erfahren Sie, welche Art von Komponenten abgeleitet werden. Stellen Sie sicher, dass die Komponenten ordnungsgemäß abgeleitet werden. Wenn dies nicht der Fall ist, wird möglicherweise keine besonders effiziente Netzliste erstellt. Sie können viel erzählen, indem Sie sich die Syntheseprotokolldateien ansehen. Es ist möglich, dass ein paar geringfügige Änderungen an Ihrem Code es dem Syntheizer ermöglichen, auf verschiedene Komponenten zu schließen. Schauen Sie sich daher das Synthesizer-Handbuch für einige Vorlagen an. Möglicherweise müssen Sie den Synthesizer umschalten, um den Bereich anstelle der Geschwindigkeit zu optimieren. Stellen Sie außerdem sicher, dass keine Infer-Einstellungen deaktiviert sind. Ich habe einmal versucht, eine Designkomponente zu synthetisieren, die 40% eines Spartan 3E 500 (9.312 LUT / FF-Paare mit 4 Eingängen, 5,6 KB Block-RAM) für einen Virtex 6 HXT 565 (354.240 LUT / Dual-FF-Paare mit 6 Eingängen, 32) verbraucht MB Block RAM). Es dauerte 7 Stunden, bis Xilinx par fertig war und etwa 40% des Chips einnahm. ?!?!?!? Es stellte sich heraus, dass der Infer-Block-RAM ausgeschaltet war und der Synthesizer mehrere KB RAM in LUTs umwandelte. Nicht die effizienteste Entscheidung aller Zeiten. Nach dem Ändern der Einstellung nahm es etwa 1% des Chips ein. Stelle dir das vor. 312 LUT / FF-Paare mit 4 Eingängen, 5,6 KB Block-RAM) für einen Virtex 6 HXT 565 (354.240 LUT / Dual-FF-Paare mit 6 Eingängen, 32 MB Block-RAM). Es dauerte 7 Stunden, bis Xilinx par fertig war und etwa 40% des Chips einnahm. ?!?!?!? Es stellte sich heraus, dass der Infer-Block-RAM ausgeschaltet war und der Synthesizer mehrere KB RAM in LUTs umwandelte. Nicht die effizienteste Entscheidung aller Zeiten. Nach dem Ändern der Einstellung nahm es etwa 1% des Chips ein. Stelle dir das vor. 312 LUT / FF-Paare mit 4 Eingängen, 5,6 KB Block-RAM) für einen Virtex 6 HXT 565 (354.240 LUT / Dual-FF-Paare mit 6 Eingängen, 32 MB Block-RAM). Es dauerte 7 Stunden, bis Xilinx par fertig war und ungefähr 40% des Chips einnahm. ?!?!?!? Es stellte sich heraus, dass der Infer Block RAM ausgeschaltet war und der Synthesizer mehrere KB RAM in LUTs umwandelte. Nicht die effizienteste Entscheidung aller Zeiten. Nach dem Ändern der Einstellung nahm es etwa 1% des Chips ein. Stelle dir das vor.
quelle
Es würde sich lohnen, den gesamten Abschnitt "Ressourcennutzung" aus der Werkzeugausgabe zu veröffentlichen.
Verwenden Sie alle Block-RAMs? Es ist üblich, Logik- / Mathematikfunktionen durch äquivalente RAM-Nachschlagetabellen ersetzen zu können, wenn die Domäne ausreichend eingeschränkt ist und sie eine ausreichende Komplexität aufweisen, um eine Vorberechnung sinnvoll zu sein.
Dies gilt neben der Inferenz des Speichers auch für Multiplikatoren. Manchmal kann eine winzige Abweichung von der empfohlenen Instanziierungsvorlage dazu führen, dass der Multiplikator auf DSP48A-Einheiten zurückgeführt wird.
Wenn Sie den PCIe-Controller verwenden, können Sie den für TLP-Nutzdaten reservierten Gesamtpufferplatz oder die maximale TLP-Paketgröße reduzieren? Dies kann die RAM / Logik-Nutzung des IP-Kerns auf Kosten der Durchsatz- / Gesamtbandbreite reduzieren.
Mit (Altera) Quartus können Sie Elemente in der Ansicht der Designhierarchie mehrfach auswählen und dort die farbcodierte / gruppierte Verwendung des Post-P & R-Bereichs anzeigen. Dies kann eine visuelle Vorstellung von der relativen Verwendung Ihrer Designmodule geben.
quelle