Forum: Mikrocontroller und Digitale Elektronik Multiplizierer Hardware Aufwand


von Christoph M. (mchris)


Lesenswert?

Die ersten CPUs wie 6502 und Z80 hatten keine Hardware Multiplizierer.
Wie viel Aufwand war es, Hardwaremultiplizierer auf in den CPUs zu 
implementieren?
Gibt es irgendwo Chipbilder, wo man den Flächenverbrauch des 
Multiplizierers sehen kann?

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Angehängte Dateien:

Lesenswert?

> Die ersten CPUs wie 6502 und Z80 hatten keine Hardware Multiplizierer.

Auch die späteren CPU nicht, Hardware-Multiplizier erschienen mit DSP's 
auf dem Markt.

> Wie viel Aufwand war es, Hardwaremultiplizierer auf in den CPUs zu
> implementieren?

Man braucht halt n X m Full-Adder,  steht so in jeder Literatur zum 
Thema Computerarchitektur. Für nen Full-Adder kann man bis zu 28 
Transistoren rechnen und so ne poplige 8 bit CPU kommt mit weniger als 
10000 Transistoren aus.

> Gibt es irgendwo Chipbilder, wo man den Flächenverbrauch des
> Multiplizierers sehen kann?

Es ist nicht nur die Fläche wichtig, sondern auch die Durchlaufzeit, die 
Datenverarbeitung soll ja beim Signal-processing in Echtzeit laufen.

: Bearbeitet durch User
von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Bradward B. schrieb:
>> Die ersten CPUs wie 6502 und Z80 hatten keine Hardware Multiplizierer.
>
> Auch die späteren CPU nicht, Hardware-Multiplizier erschienen mit DSP's
> auf dem Markt.
Nu ja, 6809 (1978, zwei Jahre "neuer" als der Z80) konnte schon 
8x8=16Bit.
Der 68000 (von 1979) hatten schon 16x16=32Bit. Der 68020 sogar 
32x32=64Bit.

"The 6809 included one of the earliest dedicated hardware multipliers. 
It takes 8-bit numbers in the A and B accumulators and produces a 16-bit 
result in A:B, known collectively as D"
- https://en.wikipedia.org/wiki/Motorola_6809

Intel hat sich mit dem 8086 (1978) noch etwas schwerer damit getan:
- https://www.righto.com/2023/03/8086-multiplication-microcode.html

Mit den späteren DSP kam eher das Thema Floatpoint und Rechnen in einem 
Taktzyklus auf.

von Christoph M. (mchris)


Lesenswert?

Irgend W. schrieb:
> Nu ja, 6809 (1978, zwei Jahre "neuer" als der Z80) konnte schon
> 8x8=16Bit.
> Der 68000 (von 1979) hatten schon 16x16=32Bit. Der 68020 sogar
> 32x32=64Bit.

Jetzt geht es halt um die Frage, wie viel Resourcen dafür verbraucht 
wurden. Die Atmega Serie hat ja einen Single Cycle 8x8 Multiplizierer 
mit 16 Bit Ergebnis. Kann man den auf dem Chip-Foto erkennen?
Die modernen Arm Prozessoren haben aber schon 32x32 Multiplizierer oder 
die STM32F4 Serie vermutlich schon Float Multiplierer. Wobei es auch ARM 
Prozessoren ohne Multiplizierer gibt. Der Transisotorcount für einen 
Float-Multiplizierer dürfte schon ziemlich groß sein.
Mein Annahme ist, dass ein Multiplizierer viel Transistoren und viel 
Fläche verbraucht.

von Georg S. (randy)


Lesenswert?

> Der Transisotorcount für einen
> Float-Multiplizierer dürfte schon ziemlich groß sein.

Es kommt auch noch drauf an ob der Hardware-Multiplizierer in einem 
Taktzyklus zum Ergebnis kommt oder ob der eine State Machine hat die 
mehrere Zyklen braucht bis das Ergebnis da ist.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

Die Begründung heisst "Amdahl's Gesetz",
Frei formuliert, um einen Algo zu beschleunigen, beschleunige die 
Teiloperationen die am häufigsten vorkommen/abgearbeitet werden.

Im Signalprocessing wird viel multipliziert (Vektorprodukte bei der 
Filterung, FFT), also hat da ein Multiplizierer oft und viel zu tun. 
Also wird ein Hardwaremultiplizier hier die Gesamtausführung erheblich 
beschleunigen. Bei Algo's ohne Multiplikation wie GUI-Fensterschieben 
eher nicht, also wird man für GUI-Fensterschieb-CPU's eher einen Cache 
implmentieren, der allen Befehlen nützt als einen Hardwareblock der nur 
eine "Exoten-Operationen" beschleunigt.

Man hat so eine Beschleunigung auch lange als Aufrüstoption angeboten, 
hiess dann FPU-Coprozessor und so eine FPU war nicht selten komplexer 
und verbriet mehr Strom als die CPU.

>> Der Transisotorcount für einen
>> Float-Multiplizierer dürfte schon ziemlich groß sein.

>Es kommt auch noch drauf an ob der Hardware-Multiplizierer in einem
>Taktzyklus zum Ergebnis kommt oder ob der eine State Machine hat die
>mehrere Zyklen braucht bis das Ergebnis da ist.

Eigentlich geht man immer davon aus, das ein "Hardware-Multiplizierer" 
in einem Takt durch ist. (So wie ein Barrel-shifter) Wobei dann eben das 
Problem ist, das der "kritische Pfad" im Multiplizierer" liegt und 
dieser ohnehin die maximale Taktfrequenz bestimmt.

Bei Float kommen zusätzliche Operationen wie "Normalisierung vor 
Multiplikation" hinzu. Und viel wird in ROM-Tabellen gemacht, in die 
sich auch mal ein "Fehler" einschleichen kann 
(https://de.wikipedia.org/wiki/Pentium-FDIV-Bug).

von Christoph M. (mchris)


Lesenswert?

Es ist scheinbar gar nicht so einfach, die Geschwindigkeit für eine 
float Multiplikation für einen STM32F4 heraus zu bekommen. Es kursieren 
Zahlen von 3us bis 6us.
Wie lange braucht so ein Ding die Berechnung des Float-Skalarprodukts 
mit Vektorlänge 1000?
Gibt es einen Prozessor mit 1000 Multiplizieren, der das in einem Zyklus 
kann?

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.