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
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
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 ;-).
Ein multiplizierer ist nun nicht so eine grosse Sache. Es gab mal einen 74LS183 oder so. Der machte 4x4bit und war kaskadierbar.
?? 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
?? 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.
Es existiert ein reverse-engineerter Schaltplan des 6502 auf Transistorlevel im Netz. Bin nur zu faul den jetzt zu suchen ;)
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
Ich gehe mal von einem parallelen Multiplizierer aus. Ansonsten würde das nicht hinkommen mit dem fast 16 MIPS bei 16MHz
> 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
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
könnte das z.B. ein "Carry Save Array Multipliers" wie hier: http://www.andraka.com/multipli.htm sein?
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.