Как AVR умудряется произвести сложение за один такт

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 17
Зарегистрирован: Ср дек 05, 2012 03:27:08

Сообщение feodorsumkin »

Добрый вечер, уважаемые Радиокоты, хочу просить совета.

Я не понимаю, как AVR-микроконтроллер производит сложение за один машинный такт.

Есть предположим в регистрах общего назначения (например R16 и R17) два числа.

Строкой ADD R16, R17 мы за один такт складываем оба числа и перезаписываем результат в R16.

А как же АЛУ умудряется за один такт извлечь число из R16 и тут же перезаписать результат
обратно в R16? Извлекает и записывает одновременно что ли?

АЛУ в AVR-микроконтроллерах прямо к РОНам подсоединено (судя по документации). Это как? Отдельная шина от АЛУ к РОНам что ли? Или всё же через общую шину данных обмен идёт, просто без промежуточных регистров-защёлок на входах АЛУ (тогда в принципе можно сказать, что АЛУ напрямую к РОНам подсоединено).

Но в любом случае это дело не меняет. Как можно извлекать информацию из регистра и тут же в него же что-то записывать ?

На диаграмме "Функционирование АЛУ" (из книги Евстифеева) в течение одного машинного такта производится и выборка данных, и сложение, и запись обратно. Как так получается? Там как-то временные сдвиги организуются между выборкой и записью? Тогда АЛУ получается работает не на 16 МГц, а на 48 МГц.

Изображение

Или же фраза "сложить за один такт" несколько условна. Там же конвейерная обработка идёт. Пока идет выполнение команды, производится выборка и дешифровка следующей команды.

Тогда фраза "выполняется за один такт" просто-напросто означает, что никакие узлы микроконтроллера не простаивают. Что с каждым тактовым импульсом микроконтроллер один новый готовый результат выдаёт, нет никаких простоев и ожиданий в исполнительных узлах (АЛУ, Порты).

Содается иллюзия, что вроде как микроконтроллер за один такт инструцию выполняет, но на самом деле на выполнение сложения два такта нужно (извлечение из двух РОН + одновременное сложение >> запись в один из РОН).

Что скажете по этому поводу? Спасибо!
Последний раз редактировалось feodorsumkin Чт дек 13, 2012 16:19:39, всего редактировалось 1 раз.
Реклама
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Сообщение SII »

Грубо говоря, извлекает оба требуемых значения одновременно по фронту тактового сигнала (предположим, что по фронту; детали реализации роли не играют). Чтобы получить два значения, используется двухпортовая регистровая память. Запись же фактически выполняется уже на следующем такте (тоже по фронту), но с одновременным чтением, причём если читать надо регистр, который записывается предыдущей командой, то вместо чтения этого регистра блок регистровой памяти прямо передаёт записываемое в этот момент значение на свой выход.

Между АЛУ и блоком регистров существует прямая связь уже давным-давно. Во всяком случае, двухпортовые блоки регистровой памяти с прямым подключением к АЛУ были нормой уже в 1960-е годы (только занимало это дело тогда куда больше места :) ).

Что же касается конвейера, то он, вероятно, учтён в числе тактов для команд переходов. Насколько помню, указывается по два такта, если переход выполняется, и один, если не выполняется. Лишний такт как раз требуется, чтобы прочитать команду по новому адресу и декодировать её.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

feodorsumkin писал(а):Я не понимаю, как AVR-микроконтроллер производит сложение за один машинный такт.
...
Как можно извлекать информацию из регистра и тут же в него же что-то записывать ?
Вполне реально производить выборку данных по переднему фронту тактового сигнала, а запись модифицированных данных - по заднему фронту. На работу АЛУ остается запас времени полтакта.
feodorsumkin писал(а):Или же фраза "сложить за один такт" несколько условна. Там же конвейерная обработка идёт. Пока идет выполнение команды, производится выборка и дешифровка следующей команды.
...
Содается иллюзия, что вроде как микроконтроллер за один такт инструцию выполняет, но на самом деле на выполнение сложения два такта нужно (извлечение из двух РОН + одновременное сложение >> запись в один из РОН).
Так реальная производительность никогда не достигнет команды на такт. Рассмотрите вариант, когда выполняется десяток сложений подряд. Предвыборка следующей команды тут ничего не даст, нужен более сложный конвейер.

Сложение действительно выполняется за один такт, без иллюзий.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

Goldsmith писал(а):Вполне реально производить выборку данных по переднему фронту тактового сигнала, а запись модифицированных данных - по заднему фронту. На работу АЛУ остается запас времени полтакта.
Эт чё за бред??? :)))
Возьим бумажку, ручку, нарисуй и посчитай...
"Я не даю готовых решений, я заставляю думать!"(С)
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

Сообщение SmarTrunk »

Вот как АТмега умножение делает, за, кажется, два такта - это интереснее. Табличным способом?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20093
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

SmarTrunk писал(а):Табличным способом?
С помощью умножителя :idea: которого нет у Тинек.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

HHIMERA писал(а):Эт чё за бред??? :)))
Бред - твое обычное состояние, редкий твой пост без него обходится (что и оценено по достоинству).
HHIMERA писал(а):Возьим бумажку, ручку, нарисуй и посчитай...
Бери, рисуй и считай, художник-счетовод. Есть что сказать по делу - говори, нет - промолчи, появится хотя бы призрачный шанс сойти за умного.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

да чего вы тут ругаетесь то? взяли даташит и прочитали, блин.
Изображение
Вложения
instruction execution.png
(72.96 КБ) 1822 скачивания
Ставим плюсы: )
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

SII писал(а):Запись же фактически выполняется уже на следующем такте (тоже по фронту), но с одновременным чтением, причём если читать надо регистр, который записывается предыдущей командой, то вместо чтения этого регистра блок регистровой памяти прямо передаёт записываемое в этот момент значение на свой выход.
SII по делу написал!
А если сложить высказанное SII предположение и "параллельный сумматор", то оно вполне складывается...
IMHO, у AVR все операции выполняющиеся 1 такт типа регистр-регистр и регистр-непосредственный_операнд укладываются в такую же схему. Да же без PLL, который можно предположить глядя на рис.6 из раздела 6 (6.7 для 48-й меги) спецификации.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Друг Кота
Аватара пользователя
Сообщения: 20093
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Kavka писал(а):у AVR все операции выполняющиеся 1 такт типа регистр-регистр и регистр-непосредственный_операнд укладываются в такую же схему
Это потому что машинное слово двухбайтное.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

Goldsmith писал(а):Бред - твое обычное состояние.
Да нет уж... :)))
Не надо стрелки переводить... стрелочник... :)))
Запостил фигню (и уже не первый раз), так будь добр, признайся... а не истери, как "пионер на торжественной линейке"...
Не знаешь нихрена - промолчи лучше... или в даташит загляни...
Сам хоть почитай, чё за бред ты нацарапал... с такими мыслеизвращениями, как у тебя, и до "немцев на танчиках" внутри АВР договориться можно...
:)))
"Я не даю готовых решений, я заставляю думать!"(С)
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

дизайн всегда либо по переднему, либо по заднему фронту! Иначе - неоптимальное извращение.
Ставим плюсы: )
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

HHIMERA писал(а):Не надо стрелки переводить... стрелочник... :)))
Посмотри глазами, а не другим местом, диаграмму, которую привел ibiza11. Там отчетливо видно, что по положительному фронту такта начинается выборка данных из регистрового файла, к середине на выходе АЛУ появляется результат, и по отрицательному фронту в течение второй половины такта инициируется запись результата. К началу следующего такта операция завершается, освобождая регистровый файл для очередной выборки. Она обязана завершиться, потому что результат может быть задействован в следующей команде, которая начнется по следующему положительному фронту.
HHIMERA писал(а):Не знаешь нихрена - промолчи лучше... или в даташит загляни...
Кабы ты сам следовал этому мудрому правилу, мог бы претендовать на вменяемость,а так - увы, как всегда, одни невнятные междометия, как у перевозбужденного павиана... Так что поиграй лучше в танчики с соседями по палате №6, если по делу сказать нечего.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

Глаза разуй... неграмотный... :)))
Графики впервые в жизни видишь??? В школу... за парту!!!:)))
Угу... внутри АВРа команды, как тараканы, сами по себе бегают... не тактируясь... :)))
Сам хоть веришь в свой продолжающийся бред??? К доктору... срочно!!! :)))
А теперь мысленно подели T1 и T2 пополам... что... теперь всё становится логичным??? :)))
И подсказка была...
Kavka писал(а):PLL, который можно предположить глядя на рис.6 из раздела 6 (6.7 для 48-й меги) спецификации.
Goldsmith ! Читай даташит... и не пори фигню!!! :)))
"Я не даю готовых решений, я заставляю думать!"(С)
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Gudd-Head, я так понял, что тут никак не могут понять "как это он так за один так делает". Наводящие вопросы и подсказки не помогают. В результате...

HHIMERA, не надо из контекста выдёргивать.
Kavka писал(а):PLL, который можно предположить глядя на рис.6 из раздела 6 (6.7 для 48-й меги) спецификации.
Эта моя реплика была к тому, что можно по одному фронту и без PLL.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

Мля... "броненосцы в потёмках" !!! :)))
Приведённый Figure 6 внимательнее посмотрите...
:)))
Fcpu в два раза выше Fclk (clkCPU)...
Нарисуйте Fcpu над Fclk и всё сами увидите... "Всё для фронта, всё для Победы!"(С)
:)))
"Я не даю готовых решений, я заставляю думать!"(С)
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

SmarTrunk писал(а):Вот как АТмега умножение делает, за, кажется, два такта - это интереснее. Табличным способом?
Не только табличным.
Вот, например: http://paralichka85.px6.ru/5cpu/glava05_11.htm
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

HHIMERA писал(а):Мля... "броненосцы в потёмках" !!! :)))
Приведённый Figure 6 внимательнее посмотрите...
:)))
Ты по делу давай, по делу, а не ля-ля. Если смайликов наставил, так и лапки к верху.
HHIMERA писал(а): Fcpu в два раза выше Fclk (clkCPU)...
Нарисуйте Fcpu над Fclk и всё сами увидите... "Всё для фронта, всё для Победы!"(С)
:)))
Чего? Fcpu? Fclk? Это ты приводишь свою точку зрения - ты и рисуй, доказывай. А то взялся тут - "нарисуйте" да "посчитайте".
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

Танунах... :))
Я что... и конфеты за вас есть должен??? Вот лентяи!!! :)))
А чё тогда со мной спорите... если даже рисовать не умеете, не то чтобы логически мыслить???
Не может ничего выполняться по задне-переднему или параллельно-перпендикулярному фронту... тем более посредине и как попало... это хоть, надеюсь, понятно???
Всё строго тактируется... всегда... везде... и не только в АВР... кроме асинхронных таймеров и некоторых других приблуд периферии...
"Я не даю готовых решений, я заставляю думать!"(С)
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Собирал на ПЛИСке ядро AVR и MCS51, оба в "однотактном" варианте (естественно с конвеером). Тактировал от кнопки на отладочной плате, простые инструкции типа сложить/скопировать в регистр делались реально за 1 такт, подключал шины данных и адресов на светодиоды, было видно характерное изменение по обоим фронтам такта. Насколько я знаю никакого PPL-а там не было (их в ПЛИСке всего 4 штуки, аппаратных и они задействованы не были точно). Да и какой PLL в статическом режиме :)))
Конечно не факт, что те куски из которых я собирал работают действительно как железное ядро AVR, но факт остается фактом: один такт - одна операция.
Ответить

Вернуться в «AVR»