Accédez au pont léger HPS-FPGA de Cyclone V avec Python

Cet article est l'article du 12ème jour du ** Kochi Institute of Technology Advent Calendar 2015 **.

Je voulais vraiment écrire sur ROS, mais je ne suis pas motivé, alors je vais écrire ce que je fais maintenant.

Accédez au pont HPS-FPGA léger de Cyclone V avec Python pour lire et écrire. En conclusion, je pense qu'il peut être utilisé comme environnement de test.

Environnement d'exécution

La carte que j'utilise est le [** DE1-SoC **] de Terasic (http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&No=836). BSP utilise le bureau officiel * Linux Ubuntu *. La version Python est * 2.7.3 *

Le SoC FPGA d'Altera dispose d'un bus pratique appelé * Lightweight HPS-to-FPGA Bridge *, alors utilisez-le.

Le contenu mappé est écrit dans Carte mémoire Cyclone V HPS, tel que GPIO et UART. Il semble que vous puissiez également accéder aux registres des périphériques. Certaines ips auto-créées sont mappées entre ** 0xFF200000 ** et ** 0xFF3FFFFF **. (0x0 ~ 0x1FFFFF du côté Qsys)

Cette fois, je vais expliquer en supposant que ip est connecté de 0xFF200000 à 0xFF200010.

open / dev / mem

Pour l'instant, importez les modules requis et ouvrez / dev / mem.

import os
import mmap

fd = os.open("/dev/mem",os.O_RDWR | os.O_SYNC)

mmap

#Zone à utiliser(Byte)
reg_span = 0x200000
# Lightweight HPS-to-Décalage du pont FPGA
reg_base = 0xff200000

lw_h2f = mmap.mmap(fd ,reg_span ,mmap.MAP_SHARED,mmap.PROT_READ | mmap.PROT_WRITE,offset = reg_base) 

Vous pouvez maintenant mmap le * Lightweight HPS-to-FPGA Bridge *. Après cela, accédez à l'adresse que vous souhaitez lire et écrire et lire et écrire.

Lis

lw_h2f.seek(0x0,os.SEEK_SET)
read_data1 = ord(lw_h2f.read_byte())
read_data2 = ord(lw_h2f.read_byte())

read_byte () est incrémenté arbitrairement. L'intervalle d'incrémentation était de 1 octet dans cet environnement. mmap.read_byte est lu comme une chaîne de caractères de longueur 1, donc si vous voulez le traiter comme une valeur numérique, vous devez le convertir avec ** ord () **.

l'écriture

lw_h2f.seek(0x0,os.SEEK_SET)
write_byte(chr(write_data1))
write_byte(chr(write_data2))

Ceci est également incrémenté sans autorisation. L'intervalle était de 1 octet. Comme pour la lecture, lors de l'écriture, elle doit être écrite sous la forme d'une chaîne de longueur 1, elle doit donc être convertie avec ** chr () **.

Impressions

Je n'avais pas beaucoup écrit sur Python, mais ce n'était pas difficile. Je pensais que ce serait une fourmi comme environnement de test FPGA. Cependant, comme la vitesse effective est fatalement lente, elle n'est pas adaptée pour partager une DRAM et échanger une grande quantité de données (images, etc.). Il semble que la bonne réponse soit de traiter le périphérique comme un registre.

Recommended Posts

Accédez au pont léger HPS-FPGA de Cyclone V avec Python
Python avec VSCode (Windows 10)
Déboguer Python avec VS Code
Accédez à Google Drive avec Python
Installez python avec mac vs code
[Suite] Essayez l'accès au registre PLC avec Python
Environnement virtuel / package Python (Windows10) avec VSCode
Déboguer avec VS Code en utilisant Boost Python Numpy
Utiliser Python dans un environnement Anaconda avec VS Code
Créer un environnement d'exécution python avec VS Code
Grattage avec Python
Statistiques avec python
Grattage avec Python
Python avec Go
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
Commande Yum pour accéder à MySQL avec Python 3 sous Linux
Paramètres VS Code pour le développement en Python avec achèvement
Relancer la recherche de symboles dans l'espace de travail Python avec VS Code
[Linux] [Python] [Pandas] Charger la base de données Microsoft Access (* .mdb) avec Pandas
Obtenir des données de la base de données via ODBC avec Python (Access)
Accès ODBC à SQL Server depuis Linux avec Python