Wovon hängen Register und Busgröße ab?

Hier ist also ein Hardware-sequentieller Multiplikator abgebildet. Nummer A ist 51 Bit breit, Nummer B ist 48 Bit breit. Ich muss die effizienteste Größe von Bussen und Registern wählen (optimieren entsprechend der Speichernutzung).

Allgemeine Multiplikatorstruktur

Meine eigentliche Frage ist: Wovon hängen diese Größen ab? Wie soll ich bei dieser Aufgabe vorgehen? Ich suche keine genaue Lösung, aber zumindest einen Hinweis, weil ich keine Ahnung habe, wo ich mit meiner Suche nach Informationen beginnen soll.

Hängen sie nicht von Dingen ab, die physikalisch in Halbleiter geätzt sind? Oder meinst du "welche Zahlengröße passt in ein 51-Bit-Register"?
@GradyPlayer: Es ist nicht das Register, das 51 Bit hat, sondern der erste Multiplikand. Und ja, hier berücksichtige ich keine physikalischen Eigenschaften.
Nun, wie viele Bits brauchen Sie, um 2 ^ 51 * 2 ^ 48 zu halten
Aha. Also muss ich nur die schlechtestmögliche Größe des Produkts berechnen, um die Registergrößen zu finden? Aber was ist dann mit Bussen?
Muss nicht größer sein als der maximale Wert von log2 + alle Steuerbits, die Sie möglicherweise haben, aber ints haben normalerweise keine
Ich sehe keinen Bus, der von B nach ALU führt. Der einzige Bus führt von B zur Steuerlogik. Dies und die Tatsache, dass es im Diagramm "Verschiebungs"-Signale gibt, legt nahe, dass es sich um eine iterative Multiplikation handelt. Wir können versuchen zu erraten, welcher Algorithmus hier verwendet wird, aber ich bin kein großer Fan von Vermutungen. Bitte geben Sie zusätzliche Informationen an.

Antworten (2)

Es sieht so aus, als ob das Design eine 48x51-Bit-Multiplikation in 48 Schritten ausführen soll, wobei jeder Schritt entweder das "A"-Register zum Produktregister hinzufügt oder nicht. Es scheint auch das "A" -Register zu verschieben, was nicht notwendig ist. Wenn Sie das B-Register laden, die Maschine starten und dann ein Ergebnis zum Lesen bereit haben möchten, muss Ihr Produktregister groß genug sein, um das gesamte Produkt aufzunehmen (die Summe der Längen der beiden Multiplcanden); Der Addierer muss dieselbe Breite haben, wenn Sie "A" verschieben, während Sie fortfahren. Wenn Sie, anstatt das „A“-Register zu verschieben, das Produkt entweder berechnen lassen (Produkt >> 1) oder (Produkt >> 1)+(A << 47), wenn Bits aus dem „B“-Register herausgeschoben werden, dann der Addierer muss nur zwei 51-Bit-Zahlen für ein 52-Bit-Ergebnis addieren.

Beachten Sie auch, dass Sie für eine kleine Erhöhung der Komplexität die Geschwindigkeit Ihres Multiplikators verdoppeln können, indem Sie die ALU bei jedem Schritt zwischen fünf Operationen wählen lassen: (Produkt >> 2), (Produkt >> 2) + (A << 46) , (Produkt >> 2)+(A << 47), (Produkt >> 2)-(A << 46) oder (Produkt >> 2)-(A << 47). Weitere Informationen finden Sie unter „Booth-Algorithmus“.

Danke für eine Antwort =) Ich habe diese Frage vor einiger Zeit gestellt, und es war eine Prüfungsfrage. Ich habe es natürlich schon verstanden, aber trotzdem danke =)

Nun, ich denke, dies sind eingebaute Allzweck-Multiplikatoren in FPGA (DSP-Blöcken) oder anderen heterogenen Geräten. In diesem Fall ist die Größe der Register allgemeingültig. Es hängt von Ihrer Anwendung ab, Sie können die erforderliche Anzahl von Bits auswählen. Sie können einen 32-Bit-Multiplikator aus diesem eingebauten Multiplikator heraus haben. So können Sie je nach Bedarf den Datenbus fixieren.