Greifen Sie mit Python auf die Lightweight HPS-to-FPGA Bridge von Cyclone V zu

Dieser Artikel ist der 12. Tagesartikel des ** Adventskalenders 2015 des Kochi Institute of Technology **.

Ich wollte wirklich über ROS schreiben, aber ich bin nicht motiviert, also schreibe ich, was ich jetzt mache.

Greifen Sie mit Python zum Lesen und Schreiben auf die Lightweight HPS-to-FPGA Bridge von Cyclone V zu. Zusammenfassend kann ich sagen, dass es als Testumgebung verwendet werden kann.

Ausführungsumgebung

Das Board, das ich verwende, ist Terasics ** DE1-SoC **. BSP verwendet den offiziellen * Linux Ubuntu Desktop *. Die Python-Version ist * 2.7.3 *

Das SoC-FPGA von Altera verfügt über einen praktischen Bus namens * Lightweight HPS-to-FPGA Bridge *. Verwenden Sie diesen.

Die zugeordneten Inhalte werden in Cyclone V HPS Memory Map wie GPIO und UART geschrieben. Es scheint, dass Sie auch auf die Register der Peripheriegeräte zugreifen können. Einige selbst erstellte IPs werden zwischen ** 0xFF200000 ** und ** 0xFF3FFFFF ** zugeordnet. (0x0 ~ 0x1FFFFF von der Qsys-Seite)

Dieses Mal werde ich erklären, dass IP von 0xFF200000 bis 0xFF200010 verbunden ist.

open / dev / mem

Importieren Sie zunächst die erforderlichen Module und öffnen Sie / dev / mem.

import os
import mmap

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

mmap

#Zu verwendender Bereich(Byte)
reg_span = 0x200000
# Lightweight HPS-to-FPGA Bridge Offset
reg_base = 0xff200000

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

Sie können jetzt * Lightweight HPS-to-FPGA Bridge * mmap. Wechseln Sie danach zu der Adresse, die Sie lesen und schreiben möchten, und lesen und schreiben Sie.

Lesen

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

read_byte () wird beliebig erhöht. Das Inkrementintervall betrug in dieser Umgebung 1 Byte. mmap.read_byte wird als Zeichenfolge der Länge 1 gelesen. Wenn Sie es also als numerischen Wert behandeln möchten, müssen Sie es mit ** ord () ** konvertieren.

Schreiben

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

Dies wird auch ohne Erlaubnis erhöht. Das Intervall betrug 1 Byte. Wie beim Lesen muss es beim Schreiben als Zeichenfolge der Länge 1 geschrieben werden, daher muss es mit ** chr () ** konvertiert werden.

Impressionen

Ich hatte nicht viel über Python geschrieben, aber es war nicht schwierig. Ich dachte, es wäre eine Ameise als FPGA-Testumgebung. Da die effektive Geschwindigkeit jedoch tödlich langsam ist, eignet sie sich nicht zum Teilen eines SDRAM und zum Austauschen einer großen Datenmenge (z. B. Bilder). Es scheint, dass die richtige Antwort darin besteht, das Peripheriegerät als Register zu behandeln.

Recommended Posts

Greifen Sie mit Python auf die Lightweight HPS-to-FPGA Bridge von Cyclone V zu
Python mit VSCode (Windows 10)
Debuggen Sie Python mit VS-Code
Greifen Sie mit Python auf Google Drive zu
Installieren Sie Python mit Mac vs Code
[Fortsetzung] Versuchen Sie den Zugriff auf das SPS-Register mit Python
Virtuelle Python / Windows (Windows 10) -Umgebung / Paket mit VSCode
Debuggen mit VS-Code mit Boost Python Numpy
Verwenden Sie Python in einer Anaconda-Umgebung mit VS-Code
Erstellen Sie eine Python-Ausführungsumgebung mit VS-Code
Scraping mit Python
Statistik mit Python
Scraping mit Python
Python mit Go
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
Yum-Befehl zum Zugriff auf MySQL mit Python 3 unter Linux
VS-Code-Einstellungen für die Entwicklung in Python mit Abschluss
Beleben Sie die Symbolsuche im Python-Arbeitsbereich mit VS-Code
[Linux] [Python] [Pandas] Laden Sie die Microsoft Access-Datenbank (* .mdb) mit Pandas
Abrufen von Daten aus der Datenbank über ODBC mit Python (Access)
ODBC-Zugriff auf SQL Server von Linux mit Python