Forum: FPGA, VHDL & Co. Performance Tuning: Fanout


von ich halt (Gast)


Lesenswert?

Hallo!

Ich arbeite gerade daran, ein Design in einem Virtex 5 auf ca. 200 MHz 
zu bringen. Wenn man ein paar Pipelinestufen in typische 
Speicher-Multiplizierer-Addierer-Ketten einbaut, so ist man recht 
schnell weit über 100 MHz.

Will man darüber hinaus gehen, so beginnen bei zu langen Setup-Paths 
aber plötzlich net-Delays zu dominieren, wenn ein Signal einen hohen 
Fanout hat. Bei einem Fanout von 5-15 treten bereits Delays von ca. 2 ns 
Sekunden auf.

- Ist das normal?
- Und wie kann man das beheben? Soll man das Treiben dieser Signale 
ebenfalls pipelinen, so dass der hohe Fanout baumförmig erreicht wird? 
Wenn ja, muss man das (für aktuelle Xilinx-Tools) explizit baumförmig 
machen, oder optimiert die Synthese da selbst?

Falls ihr mehr Infos braucht, so liefere ich die gerne nach.

von routing delay (Gast)


Lesenswert?

ich halt schrieb:
> wenn ein Signal einen hohen
> Fanout hat. Bei einem Fanout von 5-15 treten bereits Delays von ca. 2 ns
> Sekunden auf.

Du Glücklicher. Wenn du bei 4ns und fanout 1 bist, dann hast du den 
Punkt erreicht wo du dich beschweren darfst.


ich halt schrieb:
> Und wie kann man das beheben?

per Hand platzieren

Das der Mapper vom V5 und V6 nix taugt gibt sogar Xilinx inoffiziell zu

Soll wohl mit den neuen Tools besser werden, allerdings sind die nur ab 
der 7er Generation vorfügbar...

von Duke Scarring (Gast)


Lesenswert?

ich halt schrieb:
> - Und wie kann man das beheben? Soll man das Treiben dieser Signale
> ebenfalls pipelinen, so dass der hohe Fanout baumförmig erreicht wird?
Das würde ich als erstes versuchen, wenn es Dein Design zuläßt.

> Wenn ja, muss man das (für aktuelle Xilinx-Tools) explizit baumförmig
> machen, oder optimiert die Synthese da selbst?
Hmm. Sowohl als auch. Im MIG hab ich mal sowas für einen Resetbaum 
gesehen. Da wurde eine Pipeline mit einem Maxfanout constraint. Und 
register duplication muss natürlich auch aktiviert sein.

Duke

von ich halt (Gast)


Lesenswert?

routing delay schrieb:
> per Hand platzieren
>
> Das der Mapper vom V5 und V6 nix taugt gibt sogar Xilinx inoffiziell zu

Das heisst letztlich, dass jedes Design jenseits von 100 MHz schnell 
eine sehr haarige Sache werden kann...? (Nicht weil man schlecht 
arbeitet, sondern weil die Implementationstool nicht gut sind.)

von ähmm.. (Gast)


Lesenswert?

2ns = 500 MHz

5 ns = 200 MHz

500 MHz verdammt schwierig.

200 MHz sollten ja wohl mach bar sein.

von Duke Scarring (Gast)


Lesenswert?

ähmm.. schrieb:
> 2ns = 500 MHz
Ich hatte den TO so verstanden, das das die Routing Delays sind. Die 
Logic Delays (ähnlicher Größenordnung) kommen da noch dazu.

ich halt schrieb:
> Nicht weil man schlecht
> arbeitet, sondern weil die Implementationstool nicht gut sind.
Ich würde das nicht so direkt auf die Tools schieben sondern auf die 
Algorithmen. Die skalieren nicht mit der Zahl der verfügbaren 
Logikelemente (siehe Travelling Salesman).

Duke

von ich halt (Gast)


Lesenswert?

Duke Scarring schrieb:
> ähmm.. schrieb:
>> 2ns = 500 MHz
> Ich hatte den TO so verstanden, das das die Routing Delays sind. Die
> Logic Delays (ähnlicher Größenordnung) kommen da noch dazu.

So ist es. Ich habe beispielsweise jetzt sogar ein Signal mit einem 
Fanout 1, das rund 2 ns Routing Delay bringt. Das finde ich schon etwas 
seltsam... So kann man ein Design auch nicht vernünftig beschleunigen, 
da im Gegensatz zu Logic Delays hier Pipelining nicht wirklich hilft.

von Georg A. (georga)


Lesenswert?

> ein Signal mit einem Fanout 1, das rund 2 ns Routing Delay bringt.

Schau mal im FPGA-Editor nach, welche Umwege das machen muss. Manchmal 
helfen Location-Constraints schon viel weiter. Allerdings ist meine 
Erfahrung, dass man die eher grossflächig einsetzen sollte. Zu penibles 
Abzählen der Slices und exaktes Aneinanderklatschen der Module ist eher 
hinderlich.

von routing delay (Gast)


Lesenswert?

ich halt schrieb:
> Das heisst letztlich, dass jedes Design jenseits von 100 MHz schnell
> eine sehr haarige Sache werden kann...?

Je nach Designgröße gibts bei 200Mhz im V6 schon Probleme bei einem 
Fanout von 1 und einem Logiklevel von 1.

Beispiel: Block von 10% aller Slices im V6 läuft mit >>300Mhz. Zusammen 
mit dem restlichen Design(~60-70% Gesamt belegt inkl dem Block) schafft 
er manchmal nichtmal 200.  Ist aber purer Zufall, d.h. smartxplorer 
hilft da irgentwann. Eine Lösung ist das trotzdem nicht.


ich halt schrieb:
> So kann man ein Design auch nicht vernünftig beschleunigen,
> da im Gegensatz zu Logic Delays hier Pipelining nicht wirklich hilft.

eigentlich hilft es gar nichts.

Du kannst auch 4 FF-Stufen dazwischen bauen, wenn der Mapper nix taugt 
liegt eine davon im Nirgentwo und du hast doch wieder ein riesen routing 
delay.

Am besten hast du noch eine Chance wenn du überschaubare Blöcke machst 
und diese räumlich eingrenzt, dann kann der Mapper nicht zu viel falsch 
machen.

Das Interface zwischen den Blöcken muss dann so schmal wie möglich sein, 
ggf per Hand eine FF-Stufe dazwischen platziert.

In jedem Fall aber ufert das aus und irgentwann schießt man sich ins 
Knie wenn ein neuer Block dazu kommt und nirgends so richtig passt. Dann 
fängt man bei 0 an und ohne floorplanning geht dann gar nix mehr.

von Georg A. (georga)


Lesenswert?

>  Dann fängt man bei 0 an und ohne floorplanning geht dann gar nix mehr.

Da merkt man halt, dass FPGA-SW noch ca. 30 Jahre Entwicklungsvorsprung 
gegenüber Compilern aufholen muss. Noch Anfang der 90er ist der i860 
trotz seiner für die damaligen Zeit wirklich wahnsinnigen 
FPU-Performance im HPC-Bereich gefloppt, weil die Compiler mit dem 
komplexen Befehlsscheduling für die vielen Pipelines nicht 
zurechtgekommen sind. Heute macht das sogar der gcc recht tauglich...

von routing delay (Gast)


Lesenswert?

Was auch nicht verwunderlich ist: die Hersteller machen ihre Tools 
selbst.

Die Synthese zur Netzliste kann man austauschen, danach wirds 
problematisch, denn die ganze Struktur ist nicht öffentlich.

Manche versuchen da ran zu gehen (synplify, Mentor) aber mehr als ein 
großer Bug kommt da nicht raus, was man ihnen nichtmal vorwerfen kann.

Dazu noch die erhöhte Komplexität der Aufgabe und schon kann man alles 
vergessen.

von Stachele (Gast)


Lesenswert?

>Manche versuchen da ran zu gehen (synplify, Mentor) aber mehr als ein
>großer Bug kommt da nicht raus,

Was genau meinst Du?  SynplifyPro macht einen guten Job.

von Lattice User (Gast)


Lesenswert?

Stachele schrieb:
> Was genau meinst Du?  SynplifyPro macht einen guten Job.

Ja, bei der Synthese.

Hier geht es aber um Place&Route. Ganz andere Baustelle.

von routing delay (Gast)


Lesenswert?

Das war gemeint, z.b. das Platzieren mit SynplifiyPremier bzw dem Mentor 
Pendant.

Der Bau der Netzliste ist längst kein Problem mehr, das beherrschen alle 
gut. MMn am ehesten mit einem Softwarecompiler vergleichbar. Danach erst 
wirds haarig.

von Duke Scarring (Gast)


Lesenswert?

routing delay schrieb:
> Der Bau der Netzliste ist längst kein Problem mehr, das beherrschen alle
> gut. MMn am ehesten mit einem Softwarecompiler vergleichbar. Danach erst
> wirds haarig.

Place & Route ist mit Leiterplattendesign vergleichbar.
Hat da schon mal jemand einen Alogrithmus gesehen, der Autoplace und 
Autoroute perfekt hinbekommt?

Duke

von Sigi (Gast)


Lesenswert?

Duke Scarring schrieb:
>Hat da schon mal jemand einen Alogrithmus gesehen, der Autoplace und
>Autoroute perfekt hinbekommt?

Perfekt geht weder was im Compilerbau noch im P&R (exp-Aufwand!).
Z.B. ist im Compilerbau die Registerzuweisung per Graphcoloring
"gut" hinzubekommen.

P&R wird ebenfalls mit Algos aus dem Bereich Graphenalgos heuristisch
gelöst. Ein interesantes Buch zu diesem Thema ist "Graph Drawing"
von G. Battista etal., insbesondere die "Orhoghonalen Algos" für's
P&R in FPGAs.

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.