Forum: FPGA, VHDL & Co. Xilinx die Verwendung von DSP-Elementen abgewöhnen


von Paul B. (Gast)


Lesenswert?

Ich möchte/muss abschätzen, ob ich ein asynchrones DSP Design in einen 
FPGA hineinbekomme, bzw in welchen. Es stehen aber generell viel zu 
wenige Multiplier zu Verfügung. Das Design erfordert aber viele kleine 
Multiplikationen, die sich sehr gut parallel in Teilergebnissen nutzen 
lassen, daher muss es in den FPGA, der dann entsprechend langsam rechnen 
darf. Daher will ich prüfen, wie schnell mehrere parallele Architekturen 
rechnen können, die nur auf fabric logic basieren.

Wie kann ich die Xilinx-Synthese dazu bewegen, keine DSP-Elemente zu 
verwenden, sondern sie in fabric logic aufzubauen?  Ich habe in den 
Syntheseeinstellungen die "utilization ratio" der DSPs auf 0 gestellt 
und trotzdem baut er mir für meinen kleinen Testblock 8 DSP48-Elemente 
ein.
Die Umstellung auf "-1", was auch geht, bringt keinen Erfolg. Weitere 
Möglichkeiten habe ich nicht gefunden. Die global constraints stehen 
alle auf "area".

von Duke Scarring (Gast)


Lesenswert?

Vielleicht hilft es als Workaraound eine Dummy-Logik einzubauen, die 
alle DSP48 belegt?

Und gab es nicht mal ein Constraint, womit man einstellen kann, wie der 
Multiplizierer realisiert wird? --> MULT_STYLE = pipe_lut

BTW ist es nötig, das Deine Multiplikationen parallel ablaufen?
Der Original-DSP kann doch auch nicht (massiv) parallel Multiplizieren, 
oder?

Duke

von Christian R. (supachris)


Lesenswert?

Bei den Systhese-Optionen gibt noch "HDL Option" als Kategorie links, da 
kann man bei -use_dsp48 auch auf "No" stellen, dann werden keine mehr 
eingebaut.

von Paul B. (Gast)


Lesenswert?

Hallo Christian, ja das habe ich gefunden und es klappt! Bestens!
Vielen Dank.

Leider habe ich nun auch das Ergebnis dieses Versuchs: Der FPGA wird 
schon mit einer mickrigen Rechenarchitektur zu 10% vollgeknallt. Ich 
schätze, dass sich das wurzelförmig fortsetzt, bei meinen 
Rechenblöckchen. Das wäre dann ein K.O.! Man schauen ...

Werde mich sicherheitshalber mal nach einer anderen Lösung umschauen: 
Mehrere billige FPGAs mit möglichst vielen DSPs. Es gab doch mal einen 
Spartan 3A DSP oder so...

von Grendel (Gast)


Lesenswert?

Du könntest die DSPs höher takten als den Rest des Designs und mehrere 
Multiplikationen mit je einer DSP Einheit abdecken.

von Mike (Gast)


Lesenswert?

Frank Petelka schrieb:
> Werde mich sicherheitshalber mal nach einer anderen Lösung umschauen:
> Mehrere billige FPGAs mit möglichst vielen DSPs. Es gab doch mal einen
> Spartan 3A DSP oder so...

Spartan-3A DSP gibt es nur in groß und sehr groß. Eventuell auch mal die 
neueren Familien anschauen? Artix-7 z.B. scheint schon so mehr 
DSP-Blöcke zu haben.

Eventuell dann mal andere Implementationen anschauen. Z.B. kann man 
Blockrams für Multiplizierer verwenden (siehe AN306 von Altera - gibt es 
sicher auch bei Xilinx).

Du solltest vielleicht auch einmal etwas mehr über dein Design erzählen 
(wieviele, wie breit, wie schnell usw.).

von Paul B. (Gast)


Lesenswert?

Grendel schrieb:
> Du könntest die DSPs höher takten als den Rest des Designs und mehrere
> Multiplikationen mit je einer DSP Einheit abdecken.

Schwierig! Die Synthese vermeldet bei den aktuellen MULs in Echtzeit 
bereits, ich möge doch einige Register hinzufügen.
Ok, kann man natürlich machen.

Mike schrieb:
> Spartan-3A DSP gibt es nur in groß und sehr groß.
Naja, wenn es halt so ist ...

> neueren Familien anschauen? Artix-7 z.B. scheint schon so mehr
> DSP-Blöcke zu haben.
Artix gibt es nur in teuer und sehr teuer :-)

> Eventuell dann mal andere Implementationen anschauen. Z.B. kann man
> Blockrams für Multiplizierer verwenden
Schon probiert. "move unused slice logic into BRAMS" das läsuft dann in 
Sachen Multiplikation auf Soft-LUTs hinaus und das wird dasselbe sein, 
wie eine Soft-MUL. Leider habe ich nicht so viele BRAMs über.

> Du solltest vielleicht auch einmal etwas mehr über dein Design erzählen
> (wieviele, wie breit, wie schnell usw.).
Geht leider nicht, INTERNA!

von P. K. (pek)


Lesenswert?

Frank Petelka schrieb:
> Schwierig! Die Synthese vermeldet bei den aktuellen MULs in Echtzeit
> bereits, ich möge doch einige Register hinzufügen.
> Ok, kann man natürlich machen.

Gar nicht so schierig, das ist genau das was man macht.

Inneren Schweinehund überwinden, das gepipelinete System auf Papier 
aufzeichenen (Multiplier mit Registern, Datenpfad) und dann umsetzen.

Wenn alles gut aufgeht, liefert Dir jeder Multiplier pro Zyklus ein 
Resultat, und die Anfangslatenz wegen der Pieplinestufen mindert die 
Performance kaum (ausser Du hast sehr kleine Datensets).

von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

Frank Petelka schrieb:
> Ich möchte/muss abschätzen, ob ich ein asynchrones DSP Design in einen
> FPGA hineinbekomme, bzw in welchen. Es stehen aber generell viel zu
> wenige Multiplier zu Verfügung. Das Design erfordert aber viele kleine
> Multiplikationen, die sich sehr gut parallel in Teilergebnissen nutzen
> lassen, daher muss es in den FPGA, der dann entsprechend langsam rechnen
> darf.

Hallo,

Der Cyclone V hat einen "variable precision DSP Block". Dieser Block 
enthält einen 27x27 Bit Multiplizierer. Variable Precision heißt nun, 
dass man daraus auch 4 9x9 Multiplizierer machen (lassen) kann.

Tom

von Paul B. (Gast)


Lesenswert?

x9 ist definitiv zu klein, aber 18x18 passt schon. Im Xilinx nutze ich 
die 18x25 und belege dabei jeweils einen. Beim C5 wäre es aber auch 
einer, oder macht der aus dem Rest von zu 2/3 belegten wieder einen 
Neuen?

von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

Frank Petelka schrieb:
> oder macht der aus dem Rest von zu 2/3 belegten wieder einen
> Neuen?

Davon würde ich nicht ausgehen. Da hilft nur probieren.

Tom

von Paul B. (Gast)


Lesenswert?

Werde ich bei Gelegenheit mal austesten, ja. Momentan kommt aber eh kein 
Wechsel auf Altera infrage.

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.