- •8. Процессор
- •8.1. Базовые концепции
- •Ir← [[pc]]
- •8.2. Пересылка данных между регистрами
- •8.3. Выполнение арифметической или логической операции
- •8.4. Выборка слова из памяти
- •8.5. Сохранение слова в памяти
- •9. Конвейерная обработка команд
- •9.1. Базовые концепции
- •9.1.1. Роль кэш-памяти
- •9.1.2. Производительность конвейерной обработки команд
- •9.2. Очередь команд и упреждающая выборка
- •9.3. Конвейерная обработка и система команд
- •9.3.1. Режимы адресации
- •9.3.2. Коды условий
- •9.4. Тракты данных и управление
8.4. Выборка слова из памяти
Чтобы выбрать из памяти слово информации, процессор должен задать адрес этого слова и запросить операцию считывания. Причем не имеет значения, выбирается из памяти команда программы или слово данных. Процессор помещает адрес в регистр MAR, выход которого соединен с адресными линиями шины памяти. В то же время он с помощью управляющих линий шины памяти указывает, что хочет выполнить операцию считывания. Полученные из памяти данные сохраняются в регистре MDR, откуда они могут быть пересланы в другие регистры процессора.
Соединения регистра MDR показаны на рис. 8.4. У этого регистра четыре сигнала: MDRin, и MDRout управляют соединением с внутренней шиной, a MDRinE, и MDRoutE — соединением с внешней шиной. В представленную на рис. 8.3 схему легко добавить дополнительные соединения. В этом случае можно применить трехвходовый мультиплексор, а линия данных шины памяти может быть соединена с третьим входом. Этот вход выбирается, когда MDRinE = 1. Второй вентиль с тремя состояниями, управляемый сигналом MDRoutE, может использоваться для соединения выхода триггера с шиной памяти.
В ходе операций считывания и сохранения процесс тактирования внутренней работы процессора должен координироваться с сигналами устройства, адресуемого через шину памяти. Одну внутреннюю пересылку данных процессор всегда выполняет за один такт, несмотря на то что скорость адресуемых устройств может быть очень разной. Возможно, вы помните, что современные процессоры содержат кэш-память, которая располагается на той же микросхеме, что и процессор (об этом речь шла в разделе 5). Как правило, кэш отвечает на запрос чтения данных из памяти за один такт. Однако если нужные данные в кэше отсутствуют, запрос перенаправляется в основную память, и тогда происходит задержка в несколько тактов. Запрос чтения или записи может быть адресован регистру устройства ввода-вывода, адресное пространство которого отображается в основную память. Содержимое таких регистров не кэшируется, поэтому на обращение к ним всегда уходит несколько тактов.
Прежде чем вступать во взаимодействие с какими бы то ни было устройствами, процессор ждет сообщения о завершении запрошенной операции считывания. Мы будем считать, что для этой цели используется управляющий сигнал MFC (Memory Function Complete). Адресуемое устройство устанавливает значение этого сигнала в 1, указывая тем самым, что содержимое заданного адреса прочитано и помещено на линии данных шины памяти. Такими сигналами, в частности, могут быть сигналы Slave-ready.
Рис. 8.4. Соединения и управляющие сигналы регистра MDR
Ниже показано, как можно выполнить операцию чтения данных из памяти с помощью команды Move R2,(R1). Ее реализацию можно разбить на пять этапов.
1. Запись MAR ← [Rl].
2. Начало операции чтения с шины памяти.
3. Ожидание сигнала MFC на шине памяти.
4. Загрузка в MDR данных на шине памяти.
5. Запись R2 ← [MDR].
Эти действия выполняются последовательно, но некоторые из них допускают объединение в один шаг. Каждое из указанных действий может быть завершено за один такт. Исключение составляет лишь действие 3, время выполнения которого зависит от скорости адресуемого устройства.
Для простоты изложения материала мы предполагаем, что выход регистра MAR доступен всегда. Следовательно, его содержимое всегда доступно на адресных линиях шины. Это случай, когда процессор является хозяином шины. Когда в MAR загружается новый адрес, он появляется на шине памяти в начале следующего такта, как показано на рис. 8.5. Управляющий сигнал считывания активизируется одновременно с загрузкой регистра. В ответ на этот сигнал схема интерфейса шины помещает на шину команду чтения MR. При такой организации действия 1 и 2 можно объединить в один управляющий шаг. Действия 3 и 4 тоже можно объединить, если активизировать управляющий сигнал MDRinE во время ожидания ответа основной памяти. Полученные из памяти данные будут загружены в MDR в конце того такта, на котором получен сигнал MFC. На следующем такте для пересылки данных в регистр R2 активизируется линия MDRout Это означает, что операция чтения данных из памяти может быть выполнена за три шага.
1. R1out, MARin, Read.
2. MDRinE,WMFC.
3. MDRout, R2in.
Здесь WMFC — это управляющий сигнал, сообщающий управляющим схемам процессора, что они должны ждать поступления сигнала MFC.
Т.к. сигнал MDRinE устанавливается в 1 на время действия команды чтения MR, то в дальнейшем мы не будем явно указывать значение MDRinE, поскольку оно всегда совпадает с длительностью выполнения команды MR.