Le RP2040 DMA Hack crée un autre « cœur de processeur »

Le RP2040 DMA Hack crée un autre « cœur de processeur »

Nœud source: 1908807

[Bruce Land] de l'Université Cornell sera un nom familier pour de nombreux lecteurs de Hackaday, la recherche sur le site de « ECE4760 » fera apparaître de nombreux sujets intéressants autour de la programmation embarquée. Chaque année, [Bruce] publie encore plus de travaux des étudiants dans la nature pour notre plus grand plaisir. Ce projet basé sur RP2040 est un peu plus abstrait que certains travaux précédents et montre encore une autre implémentation d'un hack plus ancien pour utiliser le Matériel DMA du RP2040 comme autre cœur de processeur. Alors que l'objectif principal du sous-système DMA RP2040 est de déplacer des données entre les espaces mémoire, avec une intervention minimale du processeur, les blocs de contrôle DMA ont un comportement assez complexe. Cela permet d'implémenter un processeur Turing-complet uniquement avec le matériel DMA et une pincée de mémoire.

La méthode relie trois des douze canaux DMA et est estimée avoir des performances similaires à celles d'un « Arduino », mais [Bruce] ne précise pas lequel des différents modèles pourrait l'être. Mais qui s’en soucie de toute façon ? La programmation du processeur consiste à exploiter le comportement du matériel, qui est entièrement mappé en mémoire et pouvant être ciblé par le DMA. Par exemple, le processeur peut faire bouger les broches GPIO en utilisant le DMA pour écrire des valeurs dans l'espace d'adressage périphérique. Le flux de base peut être vu dans l’image ci-dessus. DMA0 est utilisé comme compteur de programme, qui pointe DMA1 vers un tableau de blocs de contrôle DMA, dont une séquence code pour quelques des « opcodes » du modèle de CPU. DMA0 s'enchaîne à (donne le contrôle à) DMA1 qui lit les blocs de contrôle et se configure en conséquence. DMA1 effectue tout déplacement de données programmé, enchaîné vers DMA2, qui à son tour reprogramme le compteur de programme DMA0 pour qu'il pointe vers le bloc suivant de la liste à exécuter par DMA1.

En utilisant également DMA1 pour modifier les blocs de contrôle DMA1 suivants (c'est du code auto-modifiable qui s'y produit !), le système peut implémenter des opérations plus utiles telles que l'addition, les opérations logiques et le branchement conditionnel. Opérations déclenchées par le transport dans certains registres fantômes, les opérations de définition atomique, de réinitialisation et XOR sont possibles. Tous des trucs intelligents et un merveilleux projet étudiant dans lequel j'ai participé. [Bruce] souligne un papier (en utilisant le Pi2) depuis le Atelier WOOT 2015 ce qui pourrait offrir une meilleure explication de tout ce processus.

Si vous vous demandez encore qui est [Bruce Land] et souhaitez avoir un aperçu de certains de ces sujets, alors consultez notre couverture précédente. Si ces éléments théoriques sont un peu lourds (c'est-à-dire ennuyeux), alors certains projets ont une orientation plus pratique, comme la tâche critique des quilles de tri des couleurs.

Image miniature : Thomas Glau, CC BY-SA 4.0.

Horodatage:

Plus de Pirater un jour