Для увеличения скорости выполнения команд контроллеры семейства С166 содержат 4-х ступенчатый конвейер команд (рисунок 3.3). За один машинный цикл C166 на различных ступенях конвейера выполняет одновременно до 4 команд. Это означает, что обработка каждой команды по времени длится четыре машинных цикла, хотя выполнение команды происходит в течение одного цикла. Таким образом, конвейеризация имеет существенные преимущества для ускорения выполнения последовательности команд при достаточной пропускной способности шины. Время исполнения большинства команд составляет 100 нс при тактовой частоте 20МГц.
Рисунок 3.3 – Конвейер команд
Оптимизированная обработка команд перехода и вызова (Branch Instruction).
В то время как при выполнении обычных команд конвейер не вызывают проблем, команды перехода и вызова требуют выполнения специальных мероприятий. Ко времени достижения командой перехода или вызова фазы Execute следующая по адресу перехода команда только начинает исполнение фазы Fetch. Следовательно, команда, проходящая в конвейере на фазе Decode сразу вслед за командой перехода, должна игнорироваться. В данном случае вместо полного очищения конвейера используется переход с задержкой ("delayed branch"). Ситуация с условным переходом более сложная, т.к. неясно, будет ли следующая команда соответствовать результату проверки условия или нет. Поэтому при выполнении условия перехода вставляется холостая команда на фазе Decode и требуется дополнительный машинный цикл. Для ситуаций без перехода холостая команда не вставляется и один машинный цикл экономится. Таким образом, для команд Jump, Cond. Jump, Call, Return, . обычно требуется только один дополнительный машинный цикл для выборки команды из новой области памяти.
Обработка меток (Loop Control). Обычная задача в управляющих приложениях - просмотр таблиц, который состоит в повторном переходе по одному и тому же фиксированному адресу. Если в данном случае не предпринять специальных шагов, то при обработке каждой метки возникает бесполезный машинный цикл. Поэтому здесь осуществлен механизм кэширования (Jump Cache). При первичной обработке метки вставляется пустая команда и, как и раньше вхолостую тратится один машинный цикл. Однако адрес таблицы запоминается в кэш-памяти и при дальнейшем прохождении через метку адрес извлекается из кэш и вставляется непосредственно в фазу Decode. Таким образом, в данном случае переход осуществляется за один машинный цикл.
Краевые эффекты конвейера. В фазах Fetch и Decode может одновременно осуществляться запрос шины, если на завершающей фазе текущей команды осуществляется чтение. Предупреждение конфликтов осуществляет контроллер внешней шины External Bus Controller,
управляя приоритетами записи, выборки и чтения. Следует упомянуть также о краевых эффектах конвейера, которые могут возникнуть на фазе Write Back при использовании адреса, уже измененного на фазе Fetch. Хотя специальное аппаратное устройство искусственно передвигает вперед операнды чтения и записи, необходимо постоянно об этом помнить. Команды умножения и деления занимают 5 и 10 машинных циклов соответственно и имеют сложный операционный код. Поскольку эти команды длятся больше одного цикла, в конвейер на стадии Decode вставляются холостые команды.