Цикл обучения (PIC18)

Я пытаюсь понять шаги, которые требуются для прохождения инструкции, и их связь с каждым циклом осциллятора. В таблице данных PIC18F4321 этот процесс, кажется, разделен на 2 основных этапа: выборка и выполнение. Но, кажется, нет смысла говорить, какой шаг принадлежит какому циклу осциллятора. Например, там написано:

Внутри счетчик программы увеличивается на каждый Q1; инструкция извлекается из памяти программ и фиксируется в регистре инструкций (IR) в течение Q4.

Это звучит странно, потому что в нем не упоминаются Q2 и Q3. Одно только это привело бы к мысли, что выборка занимает 1 цикл осциллятора, поскольку это происходит в четвертом квартале. Но если читать немного дальше, там говорится, что:

Выборка и выполнение команд конвейеризированы таким образом, что выборка занимает один цикл команд, в то время как декодирование и выполнение занимают другой цикл команд. Однако из-за конвейерной обработки каждая инструкция эффективно выполняется за один цикл.

Итак, теперь он сообщает мне, что выборка занимает от Q1 до Q4. Исходя из этого, я бы предположил, что если бы не конвейерная обработка, инструкции потребовали бы 2 цикла инструкций для прохождения, поскольку полный цикл инструкций предназначен только для выборки. Но я понимаю, как на практике конвейерная обработка может создать впечатление, что для выполнения инструкции требуется всего 1 цикл инструкций.

Еще немного дальше, и я считаю, что это самая запутанная часть, в нем говорится, что:

В цикле выполнения выбранная команда фиксируется в регистре команд (IR) в цикле Q1. Затем эта инструкция декодируется и выполняется во время циклов Q2, Q3 и Q4. Память данных считывается во время Q2 (чтение операнда) и записывается во время Q4 (запись назначения).

Основываясь на этом и других источниках, которые я прочитал, кажется, что он делит часть выполнения на декодирование, чтение, обработку и запись (это сбивает меня с толку, потому что он продолжает использовать слово «выполнение», когда я не думаю, что это на самом деле относится к части выполнения. "извлечения и исполнения").

1) Теперь, когда это делает каждый? Это очень ясно, когда говорится, что чтение / запись произойдет во втором / четвертом квартале. Итак, Q3 должен обрабатываться?

2) Каков цикл генератора для декодирования?

3) Почему вам нужно снова привязать инструкцию к IR в первом квартале, если вы только что сделали это в четвертом квартале, когда выполняли выборку для этой же инструкции?


person somename    schedule 19.10.2015    source источник
comment
Что такое Q1/Q2/Q3/Q4? Это названия тактов? Нет даже ссылки на таблицу, которую вы цитируете. Похоже, это может быть 4- или 5-ступенчатый конвейер, если только не ясно, что инструкции имеют задержку в один цикл. (Эффективная задержка как часть цепочки зависимостей намного короче, чем полная длина конвейера на более сложных ЦП. Штраф за неправильное прогнозирование ветвления показывает длину конвейера перед этапом, на котором выполняются инструкции ветвления.)   -  person Peter Cordes    schedule 19.10.2015
comment
Извините, я подумал, что достаточно указать имя микроконтроллера: ww1.microchip. ru / downloads / en / DeviceDoc / 39689b.pdf. Да, это название тактовых циклов. Из таблицы, вход часов разделен на 4 неперекрывающихся тактовых сигнала (с Q1 по Q4, что эквивалентно 1 циклу команд).   -  person somename    schedule 19.10.2015
comment
Я обычно не пишу PIC asm и не был уверен, что Google найдет нужную таблицу. Но ладно, значит, с Q1 по Q4 - четверти тактового цикла. Мне кажется, что некоторые из языков относятся ко всем входным часам, в то время как другие языки относятся к циклам умноженных на четыре раза тактовых импульсов.   -  person Peter Cordes    schedule 19.10.2015


Ответы (1)


отказ от ответственности: я никогда не писал asm-код PIC, не говоря уже о том, чтобы проводить анализ производительности PIC. В основном я знаю о более мощных процессорах, таких как x86, из чтения http://agner.org/optimize/, и прочее на http://realworldtech.com/. Этот ответ основан только на отрывках из руководства, которые вы вставили в свой вопрос, потому что они имеют для меня смысл. Я могу что-то совершенно неверно истолковать.


Таким образом, с точки зрения внешних тактовых импульсов, это двухцикловый конвейер (выборка | выполнение) с четырехкратной подкачкой тактовой частоты в исполнительном ядре. Этап исполнения разделен на 4 конвейерных этапа. Немного похоже на то, как Pentium4 имел двойные исполнительные блоки (то есть один этап конвейера, который использует более быстрые часы).


  1. Похоже, что да, выполнение инструкций происходит в третьем квартале.

2) Каков цикл генератора для декодирования?

Я не понимаю вопроса. Он декодирует одну инструкцию на каждый тактовый вход, используя неумноженные часы.

3) Почему вам нужно снова фиксировать инструкцию для IR в первом квартале, если вы только что сделали это в четвертом квартале, когда выполняли выборку для этой же инструкции?

Похоже, что ПК увеличивается в Q1, поэтому во время выполнения инструкции он указывает на следующую инструкцию. В четвертом квартале эта следующая инструкция загружается в IR для подготовки к ее выполнению в следующем цикле. Это сами данные инструкции (т.е. то, на что указывает PC). Я не уверен насчет этой части, но в этом есть смысл.

person Peter Cordes    schedule 19.10.2015