Загрузите полуслово и байт загрузки в единственном канале передачи данных цикла

Была эта проблема, которую спросили о реализации байта загрузки в единственный канал передачи данных цикла, не имея необходимость изменять память данных, и решение было чем-то ниже.

сопроводительный текст http://img214.imageshack.us/img214/7107/99897101.jpg

Это - на самом деле вполне реалистический вопрос; большинство систем памяти совершенно основано на слове, и с отдельными байтами обычно только имеют дело с внутренней частью процессор. Когда Вы видите “ошибку шины” на многих компьютерах, это часто означает, что процессор пытался получить доступ к адресу памяти, который не был правильно выровнен словом, и система памяти повысила исключение. Так или иначе, потому что адреса байта не могли бы быть кратными 4, мы не можем передать их памяти непосредственно. Однако мы можем все еще достигнуть любой байт, потому что каждый байт может быть найден в некотором слове, и все адреса слова являются кратными числами 4. Таким образом, первая вещь, которую мы делаем, состоит в том, чтобы удостовериться, что мы получаем правильное слово. Если мы берем высокие 30 битов адреса (т.е. ALUresult [31-2]) и комбинируем их с двумя 0 битами на нижнем уровне (это - то, что “сдвиг влево 2” единицы действительно делают), у нас есть адрес байта слова, которое содержит желаемый байт. Это - просто собственный адрес байта, округленный в меньшую сторону до нескольких из 4. Это изменение означает, что lw теперь также округлит адреса в меньшую сторону до кратных чисел 4, но это в порядке, так как неприсоединившиеся адреса не работали бы на lw так или иначе с этим блоком памяти. Хорошо, теперь мы возвращаем слово данных из памяти. Как мы получаем байт, который мы хотим из него? Ну, обратите внимание, что байтовое смещение байта в слове просто дано младшим разрядом 2 бита адреса байта. Так, мы просто используем те 2 бита для выбора соответствующего байта из слова с помощью мультиплексора. Отметьте использование нумерации байта с обратным порядком байтов, как подходит для MIPS. Затем, мы должны обнулить - расширяют байт до 32 битов (т.е. просто объедините его с 24 нулями на его верхнем уровне), потому что проблема указывает, чтобы сделать так. На самом деле это было небольшой ошибкой в вопросе: в действительности lbu нуль инструкции - расширяет байт, но знак lb - расширяет его. О, хорошо. Наконец, мы должны расширить MemtoReg-управляемый мультиплексор для принятия одного нового входа: расширенный до нуля байт для lb случая. Сигнал управления MemtoReg должен быть расширен до 2 битов. Исходные 0 и 1 случаи изменяются на 00 и 01, соответственно, и мы добавляем новый случай 10, который используется только в случае lb.

Я вполне на самом деле не понимаю о том, как это работает даже после чтения объяснения, особенно о сдвиге влево, который результат ALU 2 дал бы адресу байта..., как это возможно?? таким образом, если бы я хотел бы загрузить половину слова затем, я сделал бы один сдвиг влево, и я получил бы адрес полуслова?? каков был бы лучший способ сделать байт загрузки, загрузить полуслово путем изменения памяти данных? (вопрос выше помещает ограничения, что мы не можем изменить память данных),

5
задан DVK 3 March 2010 в 21:58
поделиться

1 ответ

Исходный автор, кажется, просто добавляет байтовый мультиплексор к 32-битным данным, считываемым из памяти. Эта память обеспечивает полную 32-битную загрузку с естественным выравниванием (инструкция lw), а дополнительный байтовый мультиплексор и нулевое расширение также позволяют загружать байтовые инструкции (инструкция lbu).

Левый сдвиг результата ALU дает адрес слова, НЕ байтовый адрес, и учитывает неявный сдвиг вправо на два в маршрутизации сигнала. Конечный результат - это просто два младших бита результата ALU, которые маскируются (обнуляются) перед отправкой в ​​память. Два младших бита значения ALU передаются вниз по потоку из памяти в байтовый мультиплексор, позволяя словарной памяти читать произвольные байты.

В показанной логике нет прямой поддержки загрузки полуслов (16-битных), только байты и полные 32-битные слова. Однако вы можете легко изменить логику байтовой адресации для поддержки слов вместо байтов (или даже того и другого), используя аналогичный подход.

3
ответ дан 15 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: