Взлом RP2040 DMA делает еще одно «ядро процессора»

Взлом RP2040 DMA делает еще одно «ядро процессора»

Исходный узел: 1908807

Имя [Брюс Лэнд] из Корнеллского университета будет знакомо многим читателям Hackaday, а поиск на сайте по запросу «ECE4760» откроет множество интересных тем, касающихся встроенного программирования. Каждый год [Брюс] к нашему большому удовольствию публикует еще больше студенческих работ. Этот проект на основе RP2040 немного более абстрактен, чем некоторые предыдущие работы, и демонстрирует еще одну реализацию старого хака, позволяющего использовать Аппаратное обеспечение DMA RP2040 в качестве еще одного ядра ЦП. Хотя основной задачей подсистемы DMA RP2040 является перемещение данных между пространствами памяти с минимальным вмешательством ЦП, блоки управления DMA имеют довольно сложное поведение. Это позволяет реализовать полный по Тьюрингу ЦП исключительно с использованием аппаратного обеспечения DMA и небольшого количества памяти.

Этот метод связывает три из двенадцати каналов DMA и, по оценкам, имеет производительность, аналогичную «Arduino», но [Брюс] не уточняет, какая из различных моделей может быть такой. Но кого это волнует? Программирование ЦП — это вопрос использования поведения аппаратного обеспечения, вся память которого отображается и нацеливается с помощью DMA. Например, ЦП может перемещать контакты GPIO, используя DMA для записи значений в адресное пространство периферийного устройства. Основной поток можно увидеть на изображении выше. DMA0 используется в качестве счетчика программ, который указывает DMA1 на массив блоков управления DMA, последовательность которых кодирует некоторые «кодов операций» модели ЦП. DMA0 подключается к DMA1 (передает управление ему), который считывает блоки управления и соответствующим образом настраивает себя. DMA1 выполняет любое запрограммированное перемещение данных, связываясь с DMA2, который, в свою очередь, перепрограммирует программный счетчик DMA0, чтобы он указывал на следующий блок в списке, который должен быть выполнен DMA1.

Используя DMA1 для изменения последующих управляющих блоков DMA1 (там происходит самомодифицирующийся код!), система может реализовать более полезные операции, такие как сложение, логические операции и условное ветвление. Операции, инициируемые транспортом в некоторых теневых регистрах разрешены атомарные операции установки, сброса и XOR. Все умные вещи и замечательный студенческий проект, в котором можно принять участие. [Брюс] указывает на бумагу (с использованием Pi2) из Семинар ВУОТ 2015 что могло бы предложить лучшее объяснение всего этого процесса.

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

Миниатюрное изображение: Томас Глау, CC BY-SA 4.0.

Отметка времени:

Больше от Взломать день