Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Пользователю -> Евстифеев А.В. -> "Микроконтроллеры семейства" -> 17

Микроконтроллеры семейства - Евстифеев А.В.

Евстифеев А.В. Микроконтроллеры семейства — Infineon, 2007. — 318 c.
Скачать (прямая ссылка): microkontrolleri2007.pdf
Предыдущая << 1 .. 11 12 13 14 15 16 < 17 > 18 19 20 21 22 23 .. 100 >> Следующая


4-4 МЭИ, Центр Промышленной Электроники Фирмы Infineon

Организация памяти/С167

^ Machin^ Cyclo I- Injection Ў
FETCH BRANCH 'n+2 'target 'target+1 ltarg et+2 'target+з
DECODE In BRANCH ('inject) 'target 'target+1 'tARGET+2
EXECUTE In BRANCH ('inject) 'target 'target+1
WRITEBACK In BRANCH ('inject) 'target

time ->

Рисунок 4-3

Стандартная конвейерная обработка команд перехода

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

Выполнение кэшированных команд перехода

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

Для достижения этого используется следующий механизм:

При прохождении кэшируемой команды перехода через стадию выборки в первый раз (при этом выполняется условие перехода), команда цели перехода вызывается как обычная команда, используя временную задержку в один машинный такт. Однако в противоположность стандартным командам перехода, команда цели перехода, после того как произведена выборка команды, дополнительно сохраняется в кэше команд. Кэшируемые команды перехода - JMPA, JMPR, JB, JBC, JNB, JNBS.

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

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

4-5 МЭИ, Центр Промышленной Электроники Фирмы Infineon

Организация памяти/С167

двумя одинаковыми кэшируемыми командами перехода не будет выполнена команда, имеющая возможность изменения фундаментальных регистров (JMPS, CALLS, RETS, TRAP, RETI), или пока не будет выполнено стандартное прерывание.

^ Machin^ Cycle 1 -— Injection
FETCH 'ri+2 'target Itarget+1
DECODE Cache Jmp (!inject) ltarget
EXECUTE In Cache Jmp ('inject)
WRITEBACK In Cache Jmp

Injection of cached

> f Target Instruction
'n+2 Itarget+1 !target+2
Cache Jmp 'target Itarget+1
In Cache Jmp 'target
In Cache Jmp

1st loop iteration

Repeated loop iteration

Рисунок 4-4

Конвейерная обработка кэшируемых команд перехода

Особые эффекты конвейера

Параллельно может выполняться до четырех различных команд, и поэтому в С167 было создана дополнительная логика для обнаружения зависимостей команд, которые не могут находится на различных стадиях конвейера без потери производительности. Эта дополнительная логика (для чтения и записи вычисленных операндов до номинального исполнения этих команд) во время оптимизации последовательности выполнения команд выявляет большинство возможных конфликтов, в том числе конфликты одновременного использования шины несколькими командами, и таким образом в большинстве случаев конвейерная обработка команд прозрачна для пользователей. Однако в некоторых очень редких случаях программистам следует уделять внимание тому, что С167 - конвейерная машина. В этих случаях задержки, вызванные конфликтами конвейерной обработки, могут использоваться для выполнения других команд для повышения производительности.

• Изменение значения Context Pointer

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

4-6 МЭИ, Центр Промышленной Электроники Фирмы Infineon

Блок ЦПУ/С 167

CP, #OFCOOh ;запись нового значения CP

;команда, не использующая GPR RO, #dataX ;запись в GPRO новых данных

• Изменение значения указателя страницы данных

Команды, вычисляющие физический адрес операндов с помощью DPPn-регистров (n = O...3), не могут использовать новое значение DPPn-регистра, измененное в непосредственно предшествующей команде. Поэтому для уверенности в использовании нового значения DPPn-регистра, необходимо вставить как минимум одну команду между командой записи нового значения DPPn-регистра и следующей командой, использующую режим прямой или косвенной адресации, как показано в следующем примере:

In : MOV DPPO, #4 ;выбор страницы данных 4

• Изменение значения указателя стека

Ни одна из команд RET, RETI, RETS, RETP или POP не может корректно использовать новое значение SP-регистра, измененное непосредственно перед выполнением этой команды. Таким образом для доступа к стеку по новому значения SP-регистра, необходимо вставить как минимум одну команду между командой записи в SP-регистр и одной из, использующих SP-регистр, вышеупомянутых команд, как показано на следующем примере:
Предыдущая << 1 .. 11 12 13 14 15 16 < 17 > 18 19 20 21 22 23 .. 100 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100