Forum: Mikrocontroller und Digitale Elektronik Hardware-Mutliplizierer ATmega


von Thomas (Gast)


Lesenswert?

Hallo zusammen, ich schreibe gerade an einer Arbeit über den ATmega32. 
Ein Unterkapitel widme ich dem Hardware-Multiplizierer.
Nun habe ich einige Fragen dazu: Wo befindet sich der Multiplizierer (in 
der ALU oder ausserhalb)?
Woher bekommt man die Pläne mit dem Aufbau der Schaltungen des 
Multiplizierers?


Mit freundlichen Grüssen
Thomas

von Michael U. (amiga)


Lesenswert?

Hallo,

Atmel fragen, die werden ja wissen, was sie bauen.
Ob sie es Dir sagen, ist eine andere Frage...
Falls Du mal irgendeine andere Innenschaltung einer etwas komplexeren 
Logik gesehen hast (früher hatten Hersteller sowas durchaus in ihren 
Datenblätter, dann wurde zur Papierersparnis aus ökologischen Gründen 
nur noch ein Blockschaltbild abgedruckt): viel Spaß beim Verfolgen der 
Signalwege. :-)

Gruß aus Berlin
Michael

von (prx) A. K. (prx)


Lesenswert?

Thomas schrieb:

> Nun habe ich einige Fragen dazu: Wo befindet sich der Multiplizierer (in
> der ALU oder ausserhalb)?

Da irgendwo drauf: http://www.flylogic.net/blog/?p=23. Kannst ja Atmel 
fragen, aber ich fürchte von Flylogic kriegst du eher eine Antwort.

> Woher bekommt man die Pläne mit dem Aufbau der Schaltungen des
> Multiplizierers?

Vergiss es. Die letzte wirklich detaillierte Darstellung der 
Innenschaltung eines Mikroprozessors war glaube ich die vom Intel 8008. 
Und auch die erst aus Anlass eines Jubiläums.

Die für Multiplizierer verwendete Technik lässt sich übrigens ergoogeln. 
Kann zwar sein, dass die nicht 100% mit der Atmels übereinstimmt, aber 
da soll dir erstmal jemand das Gegenteil beweisen ;-).

von Thomas (Gast)


Lesenswert?

vielen Dank für die Antworten!

von ?? (Gast)


Lesenswert?

Ein multiplizierer ist nun nicht so eine grosse Sache. Es gab mal einen 
74LS183 oder so. Der machte 4x4bit und war kaskadierbar.

von Vlad T. (vlad_tepesch)


Lesenswert?

der 74xx183 ist glaub ich ain addierer

von Thomas P. (topla)


Lesenswert?

?? schrieb:
> Ein multiplizierer ist nun nicht so eine grosse Sache. Es gab mal einen
> 74LS183 oder so. Der machte 4x4bit und war kaskadierbar.

Das ist ein Addierer, Multiplizierer waren 4089 und 4527.

Thomas

von Reinhard R. (reirawb)


Lesenswert?

Laut:
http://www.domnick-elektronik.de/elekttl.htm
74274
74284
74285

Reinhard

von Vlad T. (vlad_tepesch)


Lesenswert?

toller link, kannte ich noch nicht

von Reinhard R. (reirawb)


Lesenswert?

Eben erst ergoogelt :-)

Reinhard

von (prx) A. K. (prx)


Lesenswert?

?? schrieb:

> Ein multiplizierer ist nun nicht so eine grosse Sache.

Strukturell nicht, klein wie gross sehen die dem Prinzip nach gleich 
aus.

Bei einem rein kombinatorischen Multiplizierer kommt es ein aber bischen 
sehr drauf an wieviele Bits beteiligt sind. Der Aufwand wächst immerhin 
quadratisch.

von faustian (Gast)


Lesenswert?

Es existiert ein reverse-engineerter Schaltplan des 6502 auf 
Transistorlevel im Netz. Bin nur zu faul den jetzt zu suchen ;)

von (prx) A. K. (prx)


Lesenswert?

Mag sein, aber der hat keinen Multiplier.

von Thomas (Gast)


Lesenswert?

hmm... aber es gibt doch verschiedene Multiplizierer (sequenzielle, 
parallele,....). Weiss jemand was für einer verwendet worden sein 
könnte? Man weiss ja, dass er signed und unsigned Multiplikationen (8x8 
Bit = 16 Bit Resultat) ausführen kann und das innerhalb von zwei Takten.

Gruss Thomas

von Simon K. (simon) Benutzerseite


Lesenswert?

Ich gehe mal von einem parallelen Multiplizierer aus. Ansonsten würde 
das nicht hinkommen mit dem fast 16 MIPS bei 16MHz

von yalu (Gast)


Lesenswert?

> Wo befindet sich der Multiplizierer (in der ALU oder ausserhalb)?

Da es sich bei der Multiplikation um eine arithmetische Operation
handelt und der Multiplizierer mit einem eigenen Befehl, der die
Operanden direkt aus den Universalregistern liest¹, angesprochen wird,
kann davon ausgegangen werden, dass der Multiplizierer Bestandteil der
ALU ist. Auch das Datenblatt (ATmega8) deutet dies an, da der
Multiplizierer dort im Abschnitt "Arithmetic Logic Unit" erwähnt ist.

> Woher bekommt man die Pläne mit dem Aufbau der Schaltungen des
> Multiplizierers?

Von offizieller Seite bekommt man wahrscheinlich gar keine Informationen
dazu, man ist also auf Vermutungen angewiesen. Da der MUL-Befehl nur
zwei Taktzyklen dauert, muss es sich um einen Parallelmultiplizierer
handeln. Dieser besteht im Prinzip aus 7 steuerbaren 8-Bit-Addierern,
ähnlich wie hier für 4 Bit gezeigt:

  http://de.wikipedia.org/wiki/Multiplizierer_%28Digitaltechnik%29#Festkommamultiplizierer

Der oberste Addierer im Bild wird nur für eine MAC-Operation (Multiply
and Accumulate) benötigt und entfällt bei einem reinen Multiplizierer.

Die Atmel-Leute haben sicher noch einige Tricks in den Detailaufbau
gesteckt, aber das Gesamtverfahren wird das gleiche wie in dem Link
sein. Das sollte für deine Arbeit auch genügen :)

¹) anders als etwa der MSP430, wo der Multiplizierer als Peripherie-
   einheit über I/O-Register angesprochen wird

von (prx) A. K. (prx)


Lesenswert?

Wobei reale Multiplizierer allerdings nicht aus normalen Addierern 
aufgebaut sind, wie im Link skizziert, sondern aus CSAs (Carry Save 
Adder) die 3 Operanden zu 2 reduzieren und den enorm beschleunigenden 
Vorteil haben, keinen klassischen Übertrag zu benötigen. Erst die 
abschliessenden beiden Resultate werden normal addiert.

Siehe 
http://fara.cs.uni-potsdam.de/~mandrasc/uni/9.Semester/ca/ausarbeitung.pdf

von Thomas (Gast)


Lesenswert?

könnte das z.B. ein "Carry Save Array Multipliers" wie hier: 
http://www.andraka.com/multipli.htm sein?

von (prx) A. K. (prx)


Lesenswert?

Könnte. Denkbar auch, dass ein solcherart aufgebauter 4x8 Multiplier 
nacheinander für 2 Partialprodukte verwendet wird. Passt etwas besser zu 
den 2 Takten und halbiert den Aufwand.

von Thomas (Gast)


Lesenswert?

Aber wenn zwei 4x8 Multiplier verwendet wurden, was würde in den beiden 
Taktzyklen passieren?
1 Takt: erste vier bit von 1. operanden mit 2. Operanden und letzte vier 
mit mit 2. Operanden multiplizieren
2. Takt: beide Resultate addieren
möglich?

von (prx) A. K. (prx)


Lesenswert?

Nein. Ein einziger 4x8 Multiplier wird zweimal dabei nacheinander 
verwendet. Prinzip:

Aa * Bb = a*Bb + (A*Bb * 16)

also

1: temp = a*Bb
2: result = (A*Bb << 4) + temp

Die zusätzliche Addition ist relativ günstig zu haben, wenn man in dem 
CSA-Tree einen zusätzlichen Summanden vorsieht, der im ersten Takt 0 
kriegt.

So ähnlich, also nicht vollständig gepipelined, arbeiten auch die 
Integer-Multiplier einiger x86er.

Zumindest bei grösseren Breiten reduziert ein Booth encoding vorneweg 
den Aufwand etwas.

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.