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.
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.
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)
#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.
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.
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.
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