Задержки в конвейере


Выше была описана последовательность выполнения команд программы в идеальном случае. Однако в действительности при выполнении некоторых команд может происходить нарушение нормального функционирования конвейера. Наиболее ярким примером команд, вызывающих подобное нарушение, являются команды условного перехода, а также команды типа Test & Skip (проверка и пропуск следующей команды, если результат проверки положительный). В первом случае, если условие, проверяемое командой условного перехода, истинно, выполнение программы будет продолжено с некоторого адреса.А поскольку в конвейере уже произошла выборка команды, расположенной за командой перехода, время выполнения команды перехода увеличивается на один машинный цикл, во время которого происходит выборка команды, расположенной по требуемому адресу.

Во втором случае при выполнении команд типа Test & Skip следующая команда не выполняется в случае истинности проверяемого условия. Однако выборка пропускаемой команды уже произошла. Вследствие того что команда не выполняется, в конвейере образуется «дырка», которая заключается в пропуске одного или двух (в зависимости от пропускаемой команды) машинных циклов. Соответственно команды типа Test & Skip выполняются за один машинный цикл, если результат проверки условия отрицателен, и за два или три цикла, если результат проверки положителен.

Аналогично команды безусловного перехода RJMP (Relative JuMP) и IJMP (Index JuMP), команды вызова подпрограммы RCALL (Relative CALL) и ICALL (Index CALL) и команды возврата из подпрограмм RET (RETurn) и RETI (RETurn Interrupt) также изменяют содержимое счетчика команд PC (Program Counter), вызывая тем самым переход в памяти программ. В результате выполнения этих команд происходит «разрыв» в работе конвейера, а вследствие этого происходит задержка выполнения программы на несколько (2…4) машинных циклов. Для получения более подробной информации обратитесь к описанию команд, приведенному в 3-й части книги.

По той же причине нарушение нормального функционирования конвейера происходит и при возникновении прерывания. Минимальная задержка при этом составляет 4 машинных цикла.

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

Размер счетчика команд составляет 9 (модели ATtiny11x, ATtiny12x, ATtiny15L) или 10 (модели ATtiny28x) разрядов. Напрямую (как регистр) счетчик команд из программы недоступен.

При нормальном выполнении программы содержимое счетчика команд автоматически увеличивается на 1 или на 2 (в зависимости от выполняемой команды) в каждом машинном цикле. Этот порядок нарушается при выполнении команд перехода, вызова и возврата из подпрограмм, а также при возникновении прерываний.

После включения питания, а также после сброса микроконтроллера в счетчик программ автоматически загружается значение $000. Как правило, по этому адресу располагается команда относительного перехода (RJMP) к инициализационной части программы.

При возникновении прерывания в счетчик команд загружается адрес соответствующего вектора прерывания ($001…$010). Если прерывания используются в программе, по этим адресам должны размещаться команды относительного перехода к подпрограммам обработки прерываний. В противном случае основная программа может начинаться непосредственно с адреса $001.

Команды типа «проверка/пропуск» (Test & Skip)

В командах этого типа производится проверка условия, результат которой влияет на выполнение следующей команды. Если условие истинно, следующая команда игнорируется. Например, команда SBRS Rd.b проверяет разряд b регистра Rd и игнорирует следующую команду, если этот разряд равен «1». В действительности переход к следующей инструкции производится увеличением счетчика команд на 1, а пропуск команды требует загрузки нового значения в счетчик команд. Следовательно, когда проверяемое условие истинно, в конвейере возникает задержка. Длительность задержки зависит от размера пропускаемой команды и составляет от одного до двух машинных циклов.



Дата добавления: 2016-12-27; просмотров: 2096;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.