logo
Методичка

1.4.2 Конвейер

Данный процессор содержит ряд параллельно работающих конвейеров для раздельной обработки целочисленных и вещественных данных. На рисунке 1.4 представлена структурная схема “классического” процессора с одним конвейером. Она содержит очередь команд (Queue of commands), регистр команды (Register of command), ячейки ОЗУ (Cells of data RAM), программно доступные регистры (Program accessible registers), дешифратор команд (Command DC), АЛУ (ALU), регистр флагов (Flags).

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

На первой ступени, называемой "Выборка из памяти очередной команды", из ячейки памяти, адрес которой содержится в специальном адресном регистре IP, извлекается команда, помещаемая в регистр команд. Адресный регистр именуется указателем команд – Instruction Pointer (IP), или счётчиком команд.

Исходно предполагается, что команды программы размещаются в смежных ячейках памяти. На рисунке 1.6 изображён пример линейной последовательности расположения команд в памяти. Первая команда располагается в четырёх ячейках памяти с адресами 01, 02, 03 и 04. Другими словами первая команда располагается по адресу 01 и занимает 4 байта. Вторая команда располагается по адресу 05 и занимает 2 байта. Третья команда располагается по адресу 07 и занимает 6 байтов. Четвёртая команда располагается по адресу 13 и занимает 2 байта.

Пусть в указателе команд IP находится значение 01. Это говорит о том, что в данный квант времени выполняется команда I1. Для выборки из памяти следующей команды необходимо определить адрес, по которому расположена команда. Для этого к регистру IP процессор прибавляет размер предыдущей команды в байтах, т.е. IP2 = IP1 + 4 = 01 + 4 = 05. После чего, начиная с ячейки 05, в регистр команд считывается следующая команда I2, имеющая размер 2 байта. Откуда процессор знает размер считываемой команды? Дело в том, что в кэше команд отведены специальные поля для хранения размера каждой команды.

Таким образом, в случае линейной последовательности команд, для определения адреса следующей выполняемой команды IPi+1 необходимо увеличить текущее значение IPi на размер выполняемой команды в байтах Sizei

IPi+1 = IPi + Sizei.

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

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

На третьей ступени, называемой “Загрузка операндов”, выполняется загрузка операндов из памяти по тем адресам, которые были определены на шаге декодирования. Этот шаг может отсутствовать, если выполняемая команда не имеет операндов или имеет, но они хранятся в регистрах МП или в самой команде. В этом случае обращение к ячейкам внешней памяти не требуется.

На четвёртой ступени “Выполнение команды” функциональный блок, выбранный дешифратором команд в АЛУ производит действие над данными и выставляет результат на выходе.

На пятой ступени “Запись результата” согласно коду команды осуществляется запись результата или в регистр АЛУ, или в память.

Таким образом, конвейер современного процессора включает несколько конструктивных элементов: кэш команд и данных, предпроцессор (Front End) и постпроцессор (Back End), содержащий блоки исполнения команд (Execution Engine).

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