Время Cortex M4 LDR / STR - PullRequest
       155

Время Cortex M4 LDR / STR

1 голос
/ 05 августа 2020

Я читаю Cortex M4 TRM, чтобы понять циклы выполнения инструкций. Тем не менее, там есть некоторые запутанные описания

  1. В Таблица процессоров , STR занимает 2 цикла .
  2. Позже Тайминги загрузки / сохранения , это означает, что

STR Rx,[Ry,#imm] - это всегда один цикл . Это потому, что генерация адреса выполняется в начальный цикл, и хранилище данных выполняется одновременно с выполнением следующей инструкции.

Если размер хранилища равен write buffer, а write buffer заполнен или не включен, следующая инструкция откладывается до завершения сохранения.

Если магазин не относится к write buffer, например, к сегменту кода, и эта транзакция останавливается, влияние на синхронизацию ощущается только в том случае, если перед завершением выполняется другая операция загрузки или сохранения. 3. По-прежнему в Тайминги загрузки / сохранения , это указывает на то, что LDR может быть конвейерно, следуя LDR и STR, но STR не может быть обработан конвейером согласно следующим инструкциям. Другие инструкции не могут быть обработаны конвейером после STR со смещением регистра. STR может быть конвейерным только тогда, когда он следует за LDR, но ничего не может быть конвейеризовано после сохранения. Даже застрявший STR обычно занимает только два цикла из-за буфера записи

Подробнее c о том, что меня смутило:

Q1. 1 и 2 кажутся противоречащими друг другу, сколько циклов на самом деле занимает STR, 1 или 2? (Мой эксперимент показывает 1)

Q2. 2 указывает, что если хранилище от go до write buffer недоступно, оно, тем не менее, остановит конвейер, но если хранилище обходит его, конвейер может остановиться только при выполнении инструкций загрузки / сохранения. Запах типа write buffer может только усугубить ситуацию. Это противоречит здравому смыслу.

Q3. 3 означает, что STR не может быть конвейерно с помощью следующей инструкции, однако 2 означает, что STR всегда конвейерно с помощью следующей инструкции при надлежащих условиях. Как понять противоречивые утверждения? (И здесь это означает, что STR занимает 2 вместо 1 цикла из-за write buffer)

Q4. Я не нахожу дополнительной информации о том, как реализован write buffer. Насколько велик буфер? Как STR определить, использовать его или обойти?

...