Реклама:

Для управления трактом данных, изображенным на рис. 4.1, нам нужно 29 сигналов. Их можно разделить на пять функциональных групп:

♦ 9 сигналов для записи данных с шины С в регистры;

♦ 9 сигналов для разрешения передачи регистров на шину Вив АЛУ;

♦ 8 сигналов для управления АЛУ и схемой сдвига;

♦ 2 сигнала, которые указывают, что нужно осуществить чтение или запись через регистры MAR/MDR (на рисунке они не показаны);

+ 1 сигнал, который указывает, что нужно осуществить вызов из памяти через регистры PC/MBR (на рисунке также не показан).

Значения этих 29 сигналов управления определяют операции для одного цикла тракта данных. Цикл состоит из передачи значений регистров на шину В, прохождения этих сигналов через АЛУ и схему сдвига, передачи полученных результатов на шину С и записи их в нужный регистр (регистры). Кроме того, если установлен сигнал считывания данных, то в конце цикла после загрузки регистра MAR начинает работать память. Данные из памяти помещаются в MBR или MDR в конце следующего цикла, а использоваться эти данные могут в цикле, который идет после него. Другими словами, если считывание из памяти через любой из портов начинается в конце цикла k, то полученные данные не смогут использоваться в цикле k + 1 (только в цикле k + 2 и позже).

Этот процесс иллюстрирует рис. 4.2. Сигналы управления памятью выдаются только после загрузки регистров MAR и PC, которая происходит на фронте синхронизирующего сигнала незадолго до конца цикла 1. Будем считать, что память помещает результаты на шину памяти в течение одного цикла, поэтому регистры MBR и/или MDR могут загружаться на следующем фронте вместе с другими регистрами.

Другими словами, мы загружаем регистр MAR в конце цикла тракта данных и инициируем работу памяти сразу после этого. Следовательно, мы не можем ожидать, что результаты считывания окажутся в регистре MDR в начале следующего цикла, особенно если длительность импульса небольшая. Этого времени будет недостаточно. Поэтому между началом считывания из памяти и использованием полученного результата должен помещаться один цикл. Однако во время этого цикла могут выполняться не только передача слова из памяти, но и другие операции.

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

Так как регистры MBR и MDR загружаются на фронте синхронизирующего сигнала вместе с другими регистрами, их можно считывать во время циклов, в течение которых осуществляется передача нового слова из памяти. Они возвращают старые значения, поскольку прошло еще недостаточно времени для того, чтобы они сменились новыми. Здесь нет никакой двусмысленности: до тех пор, пока новые значения не загрузятся в регистры MBR и MDR на фронте сигнала, предыдущие значения находятся там и могут использоваться. Отметим, что операции считывания могут проходить одна за другой, то есть в двух последовательных циклах (поскольку сам процесс считывания занимает только один цикл). Кроме того, обе памяти могут функционировать в одно и то же время. Однако попытка чтения и записи одного и того же байта одновременно приводит к неопределенным результатам.

Выходной сигнал шины С можно записать сразу в несколько регистров, однако нежелательно передавать значения более одного регистра на шину В. Немного усовершенствовав схемотехнику, мы можем сократить количество битов, необходимых для выбора одного из возможных источников для запуска шины В. Существуют только 9 входных регистров, которые могут запустить шину В (регистры MBR со знаком и без знака учитываются отдельно). Следовательно, мы можем закодировать информацию для шины В в 4 бита и использовать декодер для порождения 16 сигналов управления, 7 из которых не нужны (у разработчиков коммерческих моделей, возможно, возникло бы желание избавиться от одного из регистров, чтобы обойтись тремя битами, но мы, как ученые, предпочитаем иметь один лишний бит, но при этом получить более понятную конструкцию).

Теперь мы можем управлять трактом данных с помощью 9 + 4 + 8 + 2 + 1 = 24 сигналов, следовательно, нам требуется 24 бита. Однако эти 24 бита управляют трактом данных только в течение одного цикла. Задача управления - определить, что нужно делать в следующем цикле. Чтобы учесть это в конструкции контроллера, мы создадим формат для описания операций, которые нужно выполнить, использовав 24 бита управления и два дополнительных поля: поле NEXT_ADDRESS (следующий адрес) и поле JAM. Содержание каждого из этих полей мы обсудим позже. На рис. 4.4 изображен один из возможных форматов. В нем представлены следующие 6 групп, содержащие 36 сигналов:

♦ Addr - адрес следующей потенциальной микрокоманды;

♦ JAM - определение того, как выбирается следующая микрокоманда;

♦ ALU - функции АЛ У и схемы сдвига;

♦ С - выбор регистров, которые записываются с шины С;

♦ Mem - функции памяти;

♦ В - выбор источника для шины В (как он кодируется, было показано ранее).

Тракт данных || Оглавление || Управление микрокомандами - микроархитектура Mic-1