www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Core-Komponenten durch Register entkoppeln?


Autor: dito (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Ich hätte da mal eine Frage zu einem Problem, das mich schon länger 
beschäftigt.

ich habe eine Divisions-Einheit, die zwei Integer-Operanden a und b mit 
je 32 Bit einliest und das Ergebnis ebenfalls als 32 Bit Integer 
ausgibt. Intern arbeitetet diese Einheit aber mit einer 
Fließpunkt-Divisions-Einheit.

Der Datenfluss sieht also wie folgt aus:

fixed_to_float(a) -->
                      float_divider --> float_to_fixed
fixed_to_float(b) -->


Die drei Komponenten sind mit dem Core-Generator xon Xilinx erstellt 
worden.

Nun stellt sich mir die Frage, wie ich das in einer Pipeline so 
umsetzten kann, dass ich den maximalen Takt herauszuhole ( bzw. was 
schreiben die "Coding Styles" o.ä. in diesem Falle vor?):

1. Direkt verdrahten (so wie oben abgebildet)
2. Vor und hinter float_divider ein Register (also insgesamt drei)
3. So wie 2., aber auch die Ein- und Ausgänge der Pipeline mit Registern 
entkoppeln (also insgesamt sechs)

Wie würdet ihr das machen? Bringen denn die Vorschläge 2 und 3 überhaupt 
einen Performance-Gewinn gegenüber Vorschlag 1 oder verschenke ich da 
bloß wertvolle Flip-Flops?

Gruß,
dito

PS: Der obige Ansatz verbraucht tatsächlich weniger Ressourcen als die 
direkte Division mit Integerzahlen (zumindest für den Fall, dass ich mit 
jedem Takt ein Ergbnis erhalte (Latenz dafür 40 Takte))

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind die Einheiten schon getaktet oder sind das kombinatorische Sachen?
Wenn die getaktet sind hast du eh schon die Register an den Eingängen 
und es bringt nix, ansosnten kann es helfen ein Register vor und nach 
Float divider einzubauen (am Anfang und ende bringts nicht so viel bzw 
sizt da eh meist noch ein Register wenn du es mit anderer getakteter 
Logik verwindest).

Autor: dito (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alle Komponenten sind getaktet. Der Float-Divider wird daher wohl auch 
Register am Eingang haben.
Ich habe irgendwo mal gelesen, dass man "an bestimmten Stellen" (ich 
glaube an Anfang und Ende eines Moduls) Register plazieren sollte, um 
die Synthesewerkzeuge bei der Ermittlung des maximalen Taktes zu 
unterstützen.
Weiß nur leider nicht mehr was da genau stand... :-(

Autor: Georg A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist das Registerbalancing... Das muss nicht nur ein FF sein, es 
können auch mehrere Stufen sein und die Synthese versucht, die möglichst 
gleichmässig zwischen die Kombinatorik zu verteilen. Man kann die FFs 
vor die Logik setzen oder auch dahinter. BTW: Das kann auch zu 
Registerverdopplungen führen, die Funktion wird aber nicht geändert 
(wenn die Synthese keinen Mist baut...).

Beim xst schaltet man das mit "-register_balancing YES" an. Hau einfach 
mal ein paar Register vor deine Eingänge und schau, ob die Taktperiode 
kleiner wird. Wenn der kritische Pfad aber zB. schon in dem FP_DIV war, 
wird die Balazierung wohl direkt nichts mehr bringen. Allerdings relaxed 
sie das gesamte Timing, das kann sich psoitiv auf die Routingzeiten 
auswirken.

> Weiß nur leider nicht mehr was da genau stand... :-(

XST User Guide S. 325
http://www.xilinx.com/support/documentation/sw_man...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
> Beim xst schaltet man das mit "-register_balancing YES" an.
Oder über das GUI (Synthese-Optionen, Screenshot).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.