Forum: FPGA, VHDL & Co. 18 bit Multiplizierer


von Michael N. (much)


Lesenswert?

Hallo,

ich habe mich schon des Öfteren gefragt warum die Hardware 
Multiplizierer in FPGA's ausgerechnet 18 bit haben und keinen 2^n-Wert. 
Weiß von euch zufällig wer was das für einen technischen oder 
historischen Hintergrund hat?

lg much

von Markus F. (mfro)


Lesenswert?

Das läuft letztendlich wahrscheinlich auf die Frage raus, warum FPGAs 9 
(oder 18) Bit breits Block-RAM haben.

Und die lässt sich wohl mit "dann geht auch Parity" beantworten.

von Martin S. (strubi)


Lesenswert?

Nee, das hat eher mit Overflow und Rundung zu tun. Und solche Features 
möchte man für Kaskadierung der Multiplier (32 bit, float, usw.) haben.
Dazu sollte aber eine Menge im Netz zu finden sein.

von Bitwurschtler (Gast)


Lesenswert?

Michael N. schrieb:

> ich habe mich schon des Öfteren gefragt warum die Hardware
> Multiplizierer in FPGA's ausgerechnet 18 bit haben und keinen 2^n-Wert.
> Weiß von euch zufällig wer was das für einen technischen oder
> historischen Hintergrund hat?


Was spricht für 2**n ?

Entscheidend ist doch die Auflösung der prozessierten Daten und die 
richtet sich üblicherweise nach der Quantisierung des Sensor resp. A/D 
wandlers als Datenquelle. Und die liegt trotz aller Bit-Fetischisten 
eher im 10bit statt im 16 oder gar 32 bit Bereich. Die unteren bits 
tragen eh nur rauschen und keine Information.

von Michael N. (much)


Lesenswert?

Bitwurschtler schrieb:
> Entscheidend ist doch die Auflösung der prozessierten Daten und die
> richtet sich üblicherweise nach der Quantisierung des Sensor resp. A/D
> wandlers als Datenquelle. Und die liegt trotz aller Bit-Fetischisten
> eher im 10bit statt im 16 oder gar 32 bit Bereich. Die unteren bits
> tragen eh nur rauschen und keine Information.

Naja, bei einer anderen Breite hätte ich mir das auch so erklärt. Bei 10 
oder 12 bit hätte ich auch sofort an die Quantisierung mit einem ADC 
gedacht. 18bit ADC's gibt es zwar auch aber die gehören doch eher zu den 
Exoten. Zumindest ist mir bislang soweit ich mich erinnern kann noch 
keiner untergekommen. Im Audio-Bereich werden meines Wissens nach auch 
24 bit verwendet aber ausgerechnet 18 bit kenne ich eigentlich nur von 
den HW-Multiplizierern in FPGA's.

Martin S. schrieb:
> Nee, das hat eher mit Overflow und Rundung zu tun.

Das klingt für mich bis jetzt am plausibelsten.

von Sigi (Gast)


Lesenswert?

Die internen BlockRAMs haben 9 Bits statt 8 Bits
(bzw. 18 statt 16 etc.). D.h. für eine "optimale"
Nutzung wurden die DSPs bzw. Multiplier einfach
an die BRAM-Breite angepasst. Es gibt's bei
Xilinx etliche Docs zum Thema "Wo und wie sollen
DSPs am Besten neben BRAMS plaziert werden".

von SeriousSam (Gast)


Lesenswert?

Wie hättest du denn 16 Bit gerne? Mit oder ohne Vorzeichen? Mit einem 18 
Bit 2er-Komplement Multiplizierer kriegt man beides ohne weiteres hin.

von Andi (Gast)


Lesenswert?

Es hat natürlich mit der Breite der internen RAMs zu tun. Für ein FIR 
Filter z.B. brauchst du einen Koeffizientenspeicher, der normalerweise 
mit einem BRAM implementiert wird, und dann den einen Eingang zum 
Multiplizierer bildet.

Breitere Multiplizierer wären schön, aber das ist halt auch eine Frage 
der Chipfläche die sie belegen. Ich denke die steigt irgendwie 
quadratisch zur Bitzahl.

Die Lattice ICE40-Ultra DSPs haben z.B. 16x16 Multiplizierer, da sie 
auch nur 8/16 bit breite interne RAMs haben.

Andi

von J. S. (engineer) Benutzerseite


Lesenswert?

Sigi schrieb:
> Die internen BlockRAMs haben 9 Bits statt 8 Bits
> (bzw. 18 statt 16 etc.). D.h. für eine "optimale"
> Nutzung wurden die DSPs bzw. Multiplier

Das liegt (auch) daran, dass BRAMs gegen Multiplier ausgetauscht werden 
können und sollen. In früheren Tagen waren solche Multiplier nichts 
anderes, als RAMs mit entsprechender Belegung. Bei manchen FPGAs (z.B. 
beim Spartan) teilen sich die RAMs und die MULs (deswegen!) die 
Zuleitungen. Wer viele RAMs verbrät, hat(te) dann irgendwann Probleme 
mit den MULs!

Das Nette dabei ist, dass die Resourcen ja immer gerne getrennt 
aufgeführt werden, sodass sich manch einer wundert, warum mit ein paar 
mehr RAMs nicht nur die 9er RAMs und die scheinbar parallel verfügbaren 
18er RAMs gleichzeitig dahinschmelzen, sondern auch die effektiv 
verfügbaren DSP-Elemente verdunste(te)n.

von Fpgakuechle K. (Gast)


Lesenswert?

Michael N. schrieb:
> Bitwurschtler schrieb:
>> Entscheidend ist doch die Auflösung der prozessierten Daten und die
>> richtet sich üblicherweise nach der Quantisierung des Sensor resp. A/D
>> wandlers als Datenquelle.

> Naja, bei einer anderen Breite hätte ich mir das auch so erklärt. Bei 10
> oder 12 bit hätte ich auch sofort an die Quantisierung mit einem ADC
> gedacht. 18bit ADC's gibt es zwar auch aber die gehören doch eher zu den
> Exoten.

Naja die ideale Zuordnung ist ja nicht 1:1 bzgl der Bitbreite.

Für einen 16bit Ad-wandler muß man zur Ausnutzung des dynamikbereiches 
18 bit in der Signalverarbeitung vorsehen. Die 18 bit Multiplies passen 
also gut für 16 bit ad-wandler. Beispiel Mittelwertbildung: (Sample1 + 
Sample2) /2 da muss man für das Zwischenergebniss 1 bit mehr vorsehen um 
Überlauf zu verhindern. Oder man halbiert die werte vor der Addition 
aber damit schmeisst man 1 bit Genauigkeit und damit dynamik weg.

Mit einem 18 bit Multiplizierer kann man also die Werte von einem 16 bit 
Wandler mit geringen Einschränkungen hinsichtlich des Dynamikumfangs 
verarbeiten.

Beim Upsampling geht man sogar "noch mehr in die Breite", dort 
multipliziert man die 12 bit samples mit 25bit Koeffizienten:
http://www.xilinx.com/support/documentation/xcell_articles/efficient-parallel-real-time-upsampling-with-xilinx-fpgas.pdf



MfG,

von J. S. (engineer) Benutzerseite


Lesenswert?

Fpga K. schrieb:
> Mit einem 18bit Multiplizierer kann man also die Werte von einem 16 bit
> Wandler mit geringen Einschränkungen hinsichtlich des Dynamikumfangs
> verarbeiten.
So ist es. Das ist das, was viele gerne unterschlagen, wenn sie mit 
einem DSP arbeiten, weil sie glauben, dass eine durchgängige 
16-Bit-Auflösung generell reicht. Wenn man aber multipliziert, entstehen 
"krumme" Zwischenwerte, die einer Rundung unterliegen und die Auflösung 
letzlich mindern. 2 Bit mehr führen da zu einer 1/4 Auflösung, die in 
der Tat meistens passt. Ohne es genauer zu untersuchen, spendiere ich 
gerne 4 Bit, um den einschlägigen Faktor 10 zu überwinden.

> Beim Upsampling geht man sogar "noch mehr in die Breite", dort
> multipliziert man die 12 bit samples mit 25bit Koeffizienten:
... was im konkreten Fall auch daran liegt, dass Xilinx zufällig 18x25 
Bit Multiplier im Gepäck hat und sich die 25 für Koeffizienten geradezu 
anbieten. Aber genau so mache ich das bei den meisten Apps: 16 Bit rein 
und 24 Bit Koeffizienten für die FIR-Filter, weil sich da die Fehler 
aufsummieren. Wenn man sich das genauer ansieht, dann erkennt man, dass 
man auch mit einer geringen Anzahl an Filter-TAPs einen sehr genauen, 
zum Analogverlauf des Filters passenden Filtereffekt bekommt, wenn die 
Auflösung gut genug ist. Als Faustregel kann man die Wurzel heranziehen:

1024 TAPs kumulieren statistisch zu 32 Digit Fehler, die man mit 5+4=9 
bit mehr an Auflösung abfangen kann. Macht bei 16 Bit Eingang eben 25 
Bit für die Koeffizienten. Diese statistische Güte lässt sich durch 
Dithering in der Rechnung auch regelmäßig für ungünstige Datenströme 
erreichen.

Beim Audio-Prozessor verwende ich bis zu 16384 TAPs. Kommt also auf eine 
Rechnungsauslösung von 8+4 = 12 Bit mehr für die Koeffizienten, damit 
alle Samples korrekt passen, auch wenn einige leer sind, peaks und 
spikes drin sind. Für 24 Bit Rohaudio landen wir damit bei 36Bit 
Auflösung für die Koeffizienten. Das sind dann jeweils 3 verkettete 25 x 
18(x2) -er MULs.

von Markus F. (Gast)


Lesenswert?

SeriousSam schrieb:
> Wie hättest du denn 16 Bit gerne? Mit oder ohne Vorzeichen?

Wenn man es in dem Format hat, in dem die Daten kommen, braucht man 
immer 16 Bit. Ein Vorzeichen oder ein headroom wäre völlig konsistent, 
oder man braucht schon bei den Daten mehr Bits. Wäre halt schade, wenn 
man 1-2 bit mehr Auflösung braucht, die Datenbits breiter macht und dann 
das nächste Blockram antasten müsste.

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.