Подробнее о новых инструкциях AVR LAC, LAS, LAT и XCH

Глядя на набор инструкций AVR, в 2010 году было добавлено четыре инструкции.

LAC load and clear
LAS load and set
LAT load and toggle
XCH load and exchange
  1. Кто-нибудь знает, какие чипы имеют эти инструкции

  2. Какие инструменты поддерживают эти инструкции

  3. Больше информации о том, что они делают

    (Z) <- Rd v (Z), Rd <- (Z)

означает ли это, что Rd и (Z) получают одно и то же значение или Rd получает предварительно модифицированное значение того, на что указывает Z?


person old_timer    schedule 17.01.2012    source источник
comment
Очевидно, он выполняет eXChange Rd и значение, на которое указывает Z.   -  person Stefan Paul Noack    schedule 19.01.2012
comment
На некоторых форумах предполагается, что они, вероятно, доступны в серии XMEGA. только микроконтроллеров AVR.   -  person Stefan Paul Noack    schedule 19.01.2012
comment
пока не очевидно, документы xmega не показывают инструкцию в списке. у самого последнего было последнее обновление до того, как они были добавлены в руководство по набору инструкций.   -  person old_timer    schedule 19.01.2012
comment
XCH очевиден, остальные три LAx не обязательны. В отличие от других инструкций, в них не так много информации, кажется, что они были вставлены быстро, не забудьте задокументировать этот способ, а не тратить время на то, чтобы сделать их полными и согласованными с остальной частью руководства.   -  person old_timer    schedule 19.01.2012
comment
Хм... кто-то должен протестировать их на реальном оборудовании, чтобы мы знали, что они делают.   -  person Stefan Paul Noack    schedule 19.01.2012
comment
У меня есть xmega sparkfun.com/products/9546, и мне потребовалось немного времени, чтобы настроить pdi программатор, но у меня это происходит, и похоже, что эта xmega не поддерживает эти инструкции. Я пробовал las, lac и xch, но ни регистр Z, ни место, на которое указывает Z, ни регистр rd в инструкции не изменяются. Он не зависает или иным образом не расстраивается из-за неопределенной инструкции, он кажется просто маховиком, хотя это похоже на nop.   -  person old_timer    schedule 24.01.2012


Ответы (2)


Их, вероятно, нет в современных (на первый вопрос) чипах, но у всех есть общая тема - операции с атомарной памятью. Обычно они предназначены для синхронизации между потоками, и их включение на уровне набора инструкций, вероятно, указывает на то, что Atmel планирует выпустить многоядерный чип AVR. Поскольку они указаны сейчас, поставщики инструментов уже могут добавлять их в ассемблеры, но они не будут придавать этому большого значения, пока у чипов не появятся инструкции. (Редактировать: как оказалось, другое ядро ​​​​является периферийным устройством USB, а не процессором. Спасибо avakar за эту информацию.)

Поведение, как я прочитал в Atmel AVR 8- Руководство по установке битовых инструкций:

LAC - Load and Clear, загружает содержимое памяти *Z в регистр Rd, одновременно очищая биты в *Z, которые были установлены в Rd.

LAS - Load And Set одновременно устанавливает биты в ячейке памяти, которые были установлены в регистре, и загружает регистр с предыдущим содержимым ячейки памяти. Очень полезно, например, для однобитовых мьютексов.

LAT - загрузка и переключение; похож на LAS, но вместо побитового или он использует побитовое исключающее ИЛИ, таким образом переключая биты.

XCH - Биржа; просто обменивает память и содержимое регистров.

Все они представляют собой инструкции доступа к ОЗУ (в ссылке на 07/2014 указано, что они занимают два цикла), которые объединяют операции, чтобы они также могли делать код, требующий ОЗУ, быстрее, чем в настоящее время.

person Yann Vernier    schedule 25.01.2012
comment
эти документы avr, которые я просматривал в последнее время, как для моего симулятора набора инструкций, так и для программирования xmega через pdi, загружены опечатками и другими ошибками. Я предполагаю, что в конце определения отсутствует lac ,Rd ‹- (Z). Это стало любопытным, когда я делал симулятор набора инструкций. - person old_timer; 25.01.2012
comment
многоядерный AVR? Это было бы суперкруто. - person Stefan Paul Noack; 26.01.2012
comment
Я боюсь, что инструкции были добавлены не для другого ядра ЦП, а скорее для периферийного устройства USB, которое использует SRAM для хранения регистров управления/статуса конечной точки. Инструкции отсутствуют в ранних моделях A и D, но присутствуют в AU и более новых. - person avakar; 06.02.2013
comment
Даже игнорируя истинную многопоточность, эти инструкции также полезны, чтобы избежать гонок с обработчиками прерываний. Часто вы заканчиваете тем, что делаете что-то вроде CLI; МОВ; ЦБИ/ВОО; STI, когда теперь вы можете избежать этого и использовать одну инструкцию LAC или LAS. - person LeoNerd; 10.05.2015
comment
У вас есть ссылка на справочник инструкций, в котором описаны эти инструкции? - person Conrad Meyer; 30.08.2015
comment
Ссылка добавлена ​​в ответ. - person Yann Vernier; 31.08.2015

Небольшая, но важная деталь, которую следует подчеркнуть: инструкции LAS, LAC и LAT работают, когда Z указывает только на «настоящую» SRAM. Это не регистры (отображенные в память) и т. д. Так что, на самом деле, они полезны либо для ваших собственных данных (ОС), либо для USB-модуля XMega, а не для других периферийных устройств и модулей.

Жаль (так как это было бы очень удобно, например, для манипулирования флагами PMIC.CTRL), но это действительно не работает. Протестировано. Похоже, что LAS, LAC и LAT имеют тот же эффект, что и XCH (обмен между Rd и (Z), но без подстановки битов) при применении к отображаемым в память регистрам.

person Martin    schedule 20.01.2017