Здавалка
Главная | Обратная связь

Основные узлы процессора



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

Основной узел процессора – АЛУ.АЛУ представляет собой комбинационную схему, состояние выхода которой соответствует какой-либо логической или арифметической функции от входных данных. Когда данные на входе есть – на выходе есть результат, когда нет – нет и результата. Соответственно, пока АЛУ выполняет операцию над данными, они должны где-то храниться. Например, в регистре. Для выполнения большинства операции, АЛУ необходимо два аргумента и для них в нем имеется два входа. Соответственно, и регистров для входных данных АЛУ должно быть два.

Устройство для сдвига данных.Для организации вычислений и обработки данных очень часто бывает необходимо сдвигать слово данных на заданное число разрядов в ту или иную сторону. При помощи АЛУ можно сдвинуть слово данных в сторону старшего разряда, если сложить число с самим собой (В двоичной системе исчисления сдвиг на один разряд влево дает тот же результат, что и умножение на 2 или сложение числа с самим собой). Однако необходим сдвиг и в обратную сторону, а при помощи АЛУ его выполнить нельзя. Также может быть необходим сдвиг данных и на большее число разрядов за один раз. Поэтому имеет прямой смысл объединить АЛУ с параллельным сдвигателем в один блок, и получать результат операции не с выхода АЛУ, а с выхода сдвигателя, расположенного следом за ним.

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

Основной тракт данных.В регистровом файле должен сохраняться результат выполненной операции. Но при этом, для выполнения операции необходимо извлекать данные, хранящиеся в регистровом файле для использования в качестве аргументов для операции. Получается, что выход сдвигателя должен быть соединен с входом регистрового файла, а выход регистрового файла с входом входных регистров АЛУ. Таким образом, мы пришли туда, откуда начали, т.е. у нас образовалось кольцо из узлов обработки и хранения данных. Это кольцо мы будем называть основным трактом данных.

Какие еще нужны узлы?Однако мы упомянули далеко не все узлы, которые нужны для обработки данных в процессоре. Необходимы и другие, вспомогательные узлы и необходима возможность передавать данные в эти узлы из тракта данных, и наоборот, из этих узлов в тракт данных:

1. Необходим счетчик команд для хранения адреса текущей команды, с возможностью автоматического увеличения, а также считывания и записи данных.

  1. Необходим специальный регистр состояния для хранения признаков результата выполнения операции, таких как равенство операндов, перенос при сложении, перенос при сдвиге.

Кроме того, необходимо иметь возможность приема и передачи данных в оперативную память и внешние устройства. Обычно для этого используют внешнюю шину. Для организации взаимодействия процессора с внешней шиной, необходимо иметь следующие возможности:

  1. Принимать данные с внешней шины, и сохранять их, для дальнейшей передачи другим узлам – необходим регистр входных данных шины.
  2. Принимать данные от других узлов процессора, для передачи на шину данных – необходим регистр выходных данных шины.
  3. Принимать данные от других узлов процессора, для передачи на шину адреса при обращении к аргументам команд, хранящимся в оперативной памяти – необходим регистр адреса шины.
  4. Передавать на шину адреса содержимое регистра адреса шины при обращении к памяти в процессе выполнения команды и содержимое счетчика команд при выборке самой команды – необходим селектор адреса шины.

Ну и наконец, необходим регистр для хранения самой команды в процессе выполнения. Этот регистр должен принимать данные с шины и передавать их управляющим схемам.

Часть содержимого регистра команд – адреса регистров, в которых хранятся операнды, должна коммутироваться и передаваться в регистровый файл. Для этого необходимо специальное коммутационное устройство.

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

А что собственно мы хотим получить?Если все предыдущие рассуждения можно было в той или иной степени отнести к любому процессору, то теперь настала пора определиться с основными характеристиками нашего процессора, т.е. сформулировать, что же мы хотим в итоге получить. Одно дело, если мы хотим получить простой и компактный процессор с низким энергопотреблением, и совсем другое, если требуется получить максимум производительности и функциональных возможностей, который только можно получить в рамках реалистичного масштаба. Определившись в этом выборе, мы сможем ответить на два основных вопроса – какова будет разрядность процессора, и какова будет структура его системы команд. А от этого будет зависеть, как именно мы будем дальше строить схему процессора.

Разрядность процессора.Разрядность процессора определяется тем, сколько разрядов данных обрабатывает АЛУ процессора за один прием. Соответственно, другие узлы процессора в основном должны иметь такую же разрядность. Хотя это и не всегда справедливо. К примеру, для восьмиразрядных процессоров. Если восьмиразрядное АЛУ вполне позволяет, пусть и не очень быстро, но все же выполнять почти любые вычисления, то восьмиразрядный счетчик команд или регистр адреса шины сделает этот процессор бессмысленным, поскольку ограничит адресное пространство 256 адресами. Поэтому в восьмиразрядных процессорах счетчик команд и регистр адреса шины должны иметь как минимум 16 разрядов, что позволяет расширить адресное пространство до 64 килобайт. Кроме того, восьмиразрядное слово не позволяет описать всю систему команд в рамках одного слова и возникает множество команд, состоящих из нескольких байт. Поэтому восемь разрядов – оптимальный выбор для экономичных компактных процессоров с невысокой производительностью. Шестнадцатиразрядные процессоры – промежуточное решение, не имеющего в настоящее время широкого распространения. Для экономичных такие процессоры уже великоваты, а адресное пространство у них такое же небольшое, как и у восьмиразрядных. Наиболее универсальны 32-разрядные процессоры, поскольку обычно обладают вычислительной мощностью и адресным пространством, позволяющим решать большинство практических задач. К тому же, 32-разрядное слово предоставляет максимум удобств при разработке системы команд процессора. 64-разрядные процессоры, и процессоры большей разрядности, пока что являются избыточными для большинства приложений, и в основном представляют собой устройства для специальных применений.

 

 

Система команд

Помимо выполнения самих операций и организации последовательности их выполнения, необходимо научится записывать операции на каком-то языке, который был бы понятен процессору. Таким языком является система команд процессора. Каждая команда должна определять, какое очередное действие должен выполнить процессор, какую именно операцию и над какими данными следует выполнить, или же, как необходимо изменить последовательность выполнения операций. Кодировать команды процессора можно различными способами, в зависимости от разрядности процессора, а также от наличия и свойств некоторых внутренних объектов процессора. Формат команды обычно соответствует разрядности процессора – если процессор, к примеру, 8-разрядный, то и основные команды тоже должны быть восьмиразрядными. Если процессор 32-разрядный, то и команда должна быть 32-разрядной. Чтобы сформулировать некоторые команды, разрядности процессора может не хватить, и тогда команда может состоять из двух слов. Для 8-разрядных процессоров эта ситуация типична, в 32-разрядных – встречается реже.

Трехадресные командыЕсли необходимо вычислить, к примеру, сумму двух регистров, то можно сформулировать команду в виде 32 разрядного слова, разбитого на 4 группы разрядов:

Код команды сложения Адрес регистра, содержащего первое слагаемое Адрес регистра, содержащего второе слагаемое Адрес регистра для размещения результата

Это означает, что процессор должен выбрать из регистрового файла первое слагаемое и записать его в один из входных регистров АЛУ. Затем выбрать из регистрового файла второе слагаемое, и поместить его в другой входной регистр. Затем нужно данные с выхода АЛУ записать в регистровый файл. Все три адреса, необходимых для обращения к регистровому файлу, будут содержаться в самой команде. Такой формат команды называется трехадресным, и наиболее удобен для понимания. 32-разрядного слова вполне достаточно, для этого формата. Если разбить 32 разряда на 4 равные группы, в каждой группе будет по 8 разрядов. При помощи 8 разрядов можно закодировать 256 различных значений, значит, регистров у такого процессора может быть 256, и самих команд тоже может быть 256. Однако если попробовать 8-разрядную команду сделать трехадресной, получится плохо – в группе будет по 2 разряда, значит регистров может быть 4, и команд тоже может быть только четыре. Или, если сделать группы неодинаковыми, то можно закодировать 16 команд, но регистров тогда можно будет указывать только два. Поэтому такой формат предпочтительнее для процессоров с разрядностью 32 и более.

Двухадресные командыЕсли нужно уложиться в более короткое слово, например 16 разрядов, можно договориться, что результат операции будет записан по адресу, содержащему второе слагаемое. Тогда команда будет выглядеть так:

Код команды сложения Адрес регистра, содержащего первое слагаемое Адрес регистра, содержащего второе слагаемое и результат.

В этом случае, процессор должен также последовательно выбрать оба аргумента из регистрового файла, а результат поместить по тому же адресу, где находилось второе слагаемое. Такой формат тоже достаточно удобен, но имеет тот недостаток, что после выполнения операции один из аргументов будет потерян. Хотя во многих случаях это не очень важно. Такой формат команды называется двухадресным. При двухадресном формате команды и разрядности 16 можно закодировать 64 команды (код операции длинной 6 разрядов), которые можно выполнять над 32 регистрами (2 поля по 5 разрядов).

Одноадресные командыВ случае, когда с разрядностью совсем плохо, полезно иметь в процессоре регистр со специальными свойствами – аккумулятор. По конструкции, аккумулятор представляет собой самый обычный регистр. От других регистров он отличается не конструкцией, а своим особым предназначением. Особое предназначение аккумулятора определяется соглашением, согласно которому в качестве одного из аргументов команды всегда используется аккумулятор, и в нем же всегда сохраняется результат выполнения команды. Тогда в самой команде нам потребуется указать только один адрес:

Код команды сложения Адрес регистра

Правда, в этом случае могут понадобиться дополнительные команды для помещения другого аргумента в аккумулятор, и для сохранения результата из аккумулятора в каком-либо из регистров. Такой формат команды наименее удобен для восприятия и программирования, но зато позволяет при небольшом объеме регистрового файла уместить многие команды в короткое слово из восьми разрядов и больше всего подходит для восьмиразрядных процессоров. При разрядности 8, такой формат позволяет указывать 16 регистров (4 разряда на адрес регистра) и кодировать 16 различных команд (4 разряда на код операции).

 

 







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.