Frage

Es war dieses problem, das die Frage nach der Umsetzung einer Last byte in einem einzigen Zyklus datapath, ohne die Daten zu ändern Speicher, und die Lösung war etwas weiter unten.

alt-text http://img214.imageshack.us/img214/7107/99897101.jpg

Dies ist tatsächlich sehr realistisch Frage;die meisten memory-Systeme sind ganz word-basierte und individuelle bytes sind in der Regel nur behandelt mit im Prozessor.Wenn Sie sehen, ein "bus-Fehler" auf vielen Computern ist dies oft bedeutet, dass der Prozessor versucht Zugriff auf einen Speicher-Adresse nicht richtig am "word" ausgerichtet, und die memory-Systems angehoben, eine Ausnahme.Trotzdem, da könnte byte-Adressen nicht ein Vielfaches von 4, wir kann nicht passieren Ihnen Speicher direkt.Jedoch, wir kann immer noch an jedem byte, weil jedes byte kann gefunden werden in einigen Wort, und alle Wort-Adressen sind ein Vielfaches von 4.Also das erste, was wir tun ist zu machen sicher, dass wir das Recht bekommen Wort.Nehmen wir die high 30 bit die Adresse (d.h., ALUresult[31-2]) und kombinieren Sie diese mit zwei 0-bits bei das untere Ende (das ist, was die “linken shift 2" - Gerät ist wirklich zu tun), wir die byte-Adresse des Wortes, das enthält das gewünschte byte.Dies ist nur die byte-Adresse, gerundet unten auf ein Vielfaches von 4.Diese ändern bedeutet, dass die lw nun auch Runde Adressen unten auf ein Vielfaches von 4 ist, aber das ist OK, da nicht ausgerichteten Adressen würde nicht funktionieren, für lw sowieso mit diesem memory unit.OK, jetzt wir erhalten die Daten Wort wieder aus dem Speicher.Wie bekommen wir die byte-wollen wir das?Gut, beachten Sie, dass die byte-byte-offset in das Wort, das ist einfach gegeben durch die niedrigen-um 2 bits des byte - Adresse.So, wir verwenden Sie einfach diese 2 bits wählen Sie das entsprechende byte aus das Wort mit einem mux.Beachten Sie die Einsatz von big-endian-byte-Numerierung, wie geeignet für MIPS.Neben, wir haben null-erweitern Sie die byte-32 bits (D. H., nur verbinden Sie es mit 24 Nullen auf seine hohe-Ende), da die problem gibt, dies zu tun.Eigentlich dies war ein leichter Fehler in der Frage:in der Realität, die lbu Anleitung null-erweitert das byte, aber lb Zeichen-Sie erweitert.Oh, gut.Endlich, wir haben zu verlängern die MemtoReg-gesteuert mux zu akzeptieren, dass man neue Eingabe:die null-extended byte die lb-Fall.Die MemtoReg control signal muss erweitert werden, um 2 bits.Die original 0 und 1 Fällen ändern 00 und 01, beziehungsweise, und fügen wir eine neue Fall 10 das ist nur in dem Fall verwendet lb.

Ich weiß nicht Recht verstehen, wie dies funktioniert sogar nach dem Lesen der Erklärung, vor allem über die linke shift-das ALU Ergebnis von 2 würde die byte-Adresse...wie ist das möglich??also, wenn ich würde wie zu laden, ein halbes Wort, dann würde ich eine Verschiebung nach Links und ich würde die Adresse der Hälfte word??was wäre ein besserer Weg, dies zu tun Last byte, load half word durch ändern der Daten-Speicher?(die obige Frage stellt Einschränkungen, die wir nicht ändern können die Daten, Speicher)

War es hilfreich?

Lösung

Der ursprüngliche Autor scheint einfach wie das hinzufügen einer byte-multiplexer-die 32-bit-Daten aus dem Speicher liest.Dieser Speicher ermöglicht es, eine vollständige 32-bit-natürlich ausgerichtet load (lw Instruktion) und die zusätzlichen byte-multiplexer und keine Erweiterung ermöglicht für Last-byte-Anweisungen sowie (lbu Anleitung).

Die linke shift-der ALU-Ergebnis ergibt sich eine word-Adresse, NICHT eine byte-Adresse und Konten für die implizite Rechte shift-von zwei in der signal-routing.Die Ende Ergebnis ist einfach die unteren beiden bits der ALU-Ergebnis maskiert wird (auf null gesetzt) werden, bevor gesendet, um die Speicher.Die beiden LSBs der ALU-Wert zugeführt down-stream-Speicher um die byte-multiplexer, so dass das Wort Speicher zu Lesen, beliebige bytes.

Es gibt keine direkte Unterstützung in der Logik gezeigt, die für die be-Hälfte-Worte (16-bits), bytes und volle 32-bit-Worten.Sie könnten jedoch leicht ändern Sie die byte-Adressierung Logik zur Unterstützung von Worten statt von bytes (oder sogar beide) mit einem ähnlichen Ansatz.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top