HPS/Linux

  • HPS

    • Bridges

      • Die USB-Datenpakete müssen über eine Bridge vom FPGA an das HPS zur Verfügung gestellt werden.
        Folgende Schnittstellen zwischen HPS und FPGA gibt es:
        – HPS to FPGA Bridge: Hohe Datenraten, konzipiert für große Datenmengen.
        – Lightweight HPS to FPGA Bridge: Geringe Datenraten, eigentlich nur für Kontrolldaten.
        Einfach zu verwenden.
        – FPGA-HPS to SDRAM: FPGA schreibt direkt in SDRAM von HPS
        Die HPS to FPGA Bridge eignet sich aufgrund der höheren Bandbreite für die USB-Daten.
    • FIFO

      • Die USB-Pakete werden vom FPGA in einen FIFO geschrieben, der über die HPS to FPGA Bridge an das HPS angebunden ist. Aufgrund der Schwierigkeiten mit dem USB3340 werden die USB-Pakete auf FPGA-Seite generiert. Für die ersten Tests wurde der Altera FIFO-Core verwendet. Aufgrund nicht nachvollziehbarer Funktion des Altera-FIFO wurde dann ein eigner FIFO-Core auf Basis eines Open-Source-Cores entwickelt. Für diesen wurde eine Avalon Memory-Mapped Komponente für Qsys erstellt. In der Avalon-Komponente wurde kein Schreibzugriff implementiert, da nur der FPGA den FIFO mit Daten befüllen soll. Der Lese-Zugriff auf den FIFO von Linux erfolgt über die physikalische FIFO-Adresse auf der Bridge und der /dev/mem-Schnittstelle. In /dev/mem ist unter Linux der gesamte physikalische Speicher abgebildet. Auf die physikalische Bridge-Adresse kann nicht direkt zugegriffen werden, der Speicherbereich vom FIFO muss zuerst in den virtuellen Adressraum memappt werden. Von der FIFO-Adresse im virtuellen Adressraum kann dann direkt mit Pointer-Arithmetik gelesen werden. Der FIFO setzt dabei seinen internen Lese-Zeiger weiter und signalisiert in einem eigenen Register, sobald er leer ist.
  • Linux

      • Um die Daten vom FPGA-Puffer auf eine microSD zwischenspeichern zu können, soll ein Linux Betriebssystem verwendet werden. Als Basis wird das bestehende DE1-SoC-UP-Linux Image von Altrea verwendet. Das Image wird auf eine microSD geschrieben, welche dann in den SD-Kartenslot des Altera DE1-SoC development Board gelegt wird. Das DE1-SoC-UP-Linux Image muss an das QSYS Projekt angepasst werden. Dazu wird ein auf das HPS abgestimmter Bootloader und ein Preloader erstellt. Nun können die Speicherbereiche für Bootloader und Preloader des Image mit den neu generierten Dateien überschrieben werden. Schlussendlich muss nur noch das <file>.rbf des Images durch das von Quartus generierten File ersetzt werden. Danach kann das veränderte Linux Image verwendet werden.

      • C-Modul

          Auf der Seite von Linux wird mittels eines C-Moduls der FIFO ausgelesen bis er leer ist, dann wird wieder gewartet, bis er befüllt (= nicht leer) ist. Es werden also immer alle Daten aus dem FIFO ausgelesen. Diese Daten (= USB-Daten/USB Paket) werden in einem Array abgelegt, aus dem dann schließlich eine “.pcap” Datei erzeugt wird. Diese wird im “PCAP” Format erstellt, damit sie dann von Wireshark ausgelesen werden kann. Zu sagen gilt es noch, dass wir derzeit das Senden des USB Pakets mittels Drücken eines Tasters am DE1-SoC Board manuell auslösen. Dies dient der besseren Vorzeigbarkeit. Der Normalfall wäre, dass der kontinuierliche USB Datenstrom fortlaufend ausgelesen wird und in die Datei gespeichert wird, bzw. die Daten via Ethernet an einen beliebigen Server gesendet werden.
  •   FPGA
      USB-Spezifikation