Intel-LogoFPGA-SDK für OpenCL
Benutzerhandbuch

UG-OCL009
2017.05.08
Zuletzt aktualisiert für Intel® Quartus® Prime Design Suite: 17.0

RENPHO RF FM059HS Intelligentes WLAN-Fußmassagegerät – Symbol 5Abonnieren
SAMSUNG SM A136UZKZAIO Galaxy A13 5G Smartphone - Symbol 12Feedback senden

Intel® FPGA SDK für OpenCL™ Intel® Cyclone®V SoC Development Kit Reference Platform Porting Guide

V SoC Development Kit Reference Platform Porting Guide beschreibt das Hardware- und Softwaredesign der Intel Cyclone V SoC Development Kit Reference Platform (c5soc) zur Verwendung mit dem Intel Software Development Kit (SDK) für OpenCL Das Intel ® FPGA SDK für OpenCL ™ Intel Cyclone ® . Bevor Sie beginnen, empfiehlt Intel dringend, dass Sie sich mit dem Inhalt der folgenden Dokumente vertraut machen:

  1. Intel FPGA SDK für OpenCLIntel Cyclone V SoC Erste Schritte
  2. Intel FPGA SDK für OpenCL Custom Platform Toolkit – Benutzerhandbuch
  3. Cyclone V Device Handbook, Volume 3: Hard Processor System Technical Reference Manual Lesen Sie außerdem die Seite Cyclone V SoC Development Kit und SoC Embedded Design Suite von Altera webWebsite für weitere Informationen. 1 2

Aufmerksamkeit: Intel geht davon aus, dass Sie über fundierte Kenntnisse des Intel FPGA SDK for OpenCL Custom Platform Toolkit User Guide verfügen. Der Cyclone V SoC Development Kit Reference Platform Porting Guide beschreibt nicht die Verwendung des Custom Platform Toolkit des SDK zur Implementierung einer Custom Platform für das Cyclone V SoC Development Kit. Es beschreibt nur die Unterschiede zwischen der SDK-Unterstützung auf dem Cyclone V SoC Development Kit und einem generischen Intel FPGA SDK für OpenCL Custom Platform.

Links zum Thema

  • Intel FPGA SDK für OpenCL Cyclone V SoC Erste Schritte
  • Intel FPGA SDK für OpenCL Custom Platform Toolkit – Benutzerhandbuch
  • Cyclone V Gerätehandbuch, Band 3: Technisches Referenzhandbuch für Festplattenprozessorsysteme
  • Seite Cyclone V SoC Development Kit und SoC Embedded Design Suite auf Altera webWebsite
  1. OpenCL und das OpenCL-Logo sind Warenzeichen von Apple Inc., die mit Genehmigung der Khronos Group™ verwendet werden.
  2. Das Intel FPGA SDK für OpenCL basiert auf einer veröffentlichten Khronos-Spezifikation und hat den Khronos-Konformitätstestprozess bestanden. Den aktuellen Konformitätsstatus finden Sie unter www.khronos.org/conformance.

Intel Corporation. Alle Rechte vorbehalten. Intel, das Intel-Logo, Altera, Arria, Cyclone, Enpirion, MAX, Nios, Quartus und Stratix Wörter und Logos sind Marken der Intel Corporation oder ihrer Tochtergesellschaften in den USA und/oder anderen Ländern. Intel garantiert die Leistung seiner FPGA- und Halbleiterprodukte gemäß den aktuellen Spezifikationen gemäß Intels Standardgewährleistung, behält sich jedoch das Recht vor, jederzeit ohne Vorankündigung Änderungen an Produkten und Diensten vorzunehmen. Intel übernimmt keine Verantwortung oder Haftung, die sich aus der Anwendung oder Verwendung von hierin beschriebenen Informationen, Produkten oder Diensten ergeben, es sei denn, Intel hat ausdrücklich schriftlich zugestimmt. Intel-Kunden wird empfohlen, die neueste Version der Gerätespezifikationen zu beschaffen, bevor sie sich auf veröffentlichte Informationen verlassen und bevor sie Produkte oder Dienstleistungen bestellen.
*Andere Namen und Marken können Eigentum Dritter sein.

1.1.1 Platinenvarianten der Referenzplattform des Cyclone V SoC-Entwicklungskits
Das Intel FPGA SDK für die OpenCL Cyclone V SoC-Entwicklungskit-Referenzplattform umfasst zwei Platinenvarianten.

  • c5soc-Vorstand
    Dieses Standardboard bietet Zugriff auf zwei DDR-Speicherbänke. Auf den HPS DDR kann sowohl vom FPGA als auch von der CPU zugegriffen werden. Auf den FPGA-DDR kann nur durch das FPGA zugegriffen werden.
  • c5soc_sharedonly-Board
    Diese Board-Variante enthält nur HPS-DDR-Konnektivität. Der FPGA DDR ist nicht zugänglich. Diese Platinenvariante ist flächeneffizienter, da weniger Hardware erforderlich ist, um eine DDR-Speicherbank zu unterstützen. Das c5soc_sharedonly-Board ist auch eine gute Prototyping-Plattform für ein endgültiges Produktionsboard mit einer einzigen DDR-Speicherbank.
    Um beim Kompilieren Ihres OpenCL-Kernels auf diese Board-Variante abzuzielen, fügen Sie die Option -board c5soc_sharedonly in Ihren aoc-Befehl ein.
    Weitere Informationen finden Sie im –Board Option des aoc-Befehls finden Sie im Intel FPGA SDK for OpenCL Programming Guide.

Links zum Thema
Kompilieren eines Kernels für ein bestimmtes FPGA-Board (–board )
1.1.2 Inhalt der Cyclone V SoC Development Kit-Referenzplattform
Die Cyclone V SoC Development Kit-Referenzplattform besteht aus Folgendem files und Verzeichnisse:

File oder Verzeichnis Beschreibung
board_env.xml eXtensible Markup Language (XML) file das c5soc für das Intel FPGA SDK für OpenCL beschreibt.
linux_sd_card_image.tgz Komprimiertes SD-Flash-Karten-Image file das alles enthält, was ein SDK-Benutzer benötigt, um das Cyclone V SoC Development Kit mit dem SDK zu verwenden.
arm32 Verzeichnis, das Folgendes enthält:

1.1.3 Relevante Funktionen des Cyclone V SoC Development Kit

Die folgende Liste hebt die Komponenten und Funktionen des Cyclone V SoC Development Kits hervor, die für das Intel FPGA SDK für OpenCL relevant sind:

  • Dual-Core-ARM-Cortex-A9-CPU mit 32-Bit-Linux.
  • Advanced eXtensible Interface (AXI)-Bus zwischen dem HPS und dem FPGA-Core-Fabric.
  • Zwei gehärtete DDR-Speichercontroller, die jeweils mit einem 1 Gigabyte (GB) DDR3-SDRAM verbunden sind.
    — Ein DDR-Controller ist nur für den FPGA-Kern (d. h. FPGA DDR) zugänglich.
    — Der andere DDR-Controller ist sowohl für das HPS als auch für das FPGA zugänglich (d. h. HPS DDR). Dieser gemeinsam genutzte Controller ermöglicht die freie gemeinsame Nutzung von Speicher zwischen der CPU und dem FPGA-Kern.
  • Die CPU kann die FPGA-Core-Fabric neu konfigurieren.

1.1.3.1 Entwurfsziele und -entscheidungen für die Cyclone V SoC-Entwicklungskit-Referenzplattform Intel stützt die Implementierung der Cyclone V-SoC-Entwicklungskit-Referenzplattform auf mehrere Designziele und -entscheidungen. Intel empfiehlt, dass Sie diese Ziele und Entscheidungen berücksichtigen, wenn Sie diese Referenzplattform auf Ihr SoC-FPGA-Board portieren.
Nachfolgend sind die c5soc-Designziele aufgeführt:

  1. Stellen Sie die höchstmögliche Bandbreite zwischen den Kerneln auf dem FPGA und dem/den DDR-Speichersystem(en) bereit.
  2. Stellen Sie sicher, dass Berechnungen auf dem FPGA (d. h. OpenCL-Kernel) keine anderen CPU-Aufgaben beeinträchtigen, die möglicherweise die Wartung von Peripheriegeräten umfassen.
  3. Lassen Sie so viel FPGA-Ressourcen wie möglich für Kernel-Berechnungen anstelle von Schnittstellenkomponenten.

Im Folgenden sind die Designentscheidungen auf hoher Ebene aufgeführt, die die direkten Folgen der Designziele von Intel sind:

  1. Die Referenzplattform verwendet nur Festplatten-DDR-Speichercontroller mit der größtmöglichen Konfiguration (256 Bit).
  2. Das FPGA kommuniziert direkt mit dem HPS-DDR-Speichercontroller, ohne den AXI-Bus und den L3-Switch innerhalb des HPS einzubeziehen. Die direkte Kommunikation bietet DDR die bestmögliche Bandbreite und verhindert, dass FPGA-Berechnungen die Kommunikation zwischen der CPU und ihrer Peripherie stören.
  3. Scatter-Gather Direct Memory Access (SG-DMA) ist nicht Teil der FPGA-Schnittstellenlogik. Anstatt große Datenmengen zwischen DDR-Speichersystemen zu übertragen, speichern Sie die Daten im gemeinsam genutzten HPS DDR. Der direkte Zugriff auf den CPU-Speicher durch das FPGA ist effizienter als DMA. Es spart Hardware-Ressourcen (dh FPGA-Bereich) und vereinfacht den Linux-Kernel-Treiber.
    Warnung: Die Speicherübertragung zwischen dem gemeinsam genutzten HPS-DDR-System und dem DDR-System, auf das nur das FPGA zugreifen kann, ist sehr langsam. Wenn Sie möchten
    Speicher auf diese Weise übertragen, verwenden Sie ihn nur für sehr kleine Datenmengen.
  4. Der Host und das Gerät führen untereinander über die HPS-zu-FPGA (H2F)-Brücke Datenübertragungen ohne DMA durch, wobei nur ein einziger 32-Bit-Port verwendet wird. Der Grund dafür ist, dass der Linux-Kernel ohne DMA nur eine einzige 32-Bit-Lese- oder Schreibanforderung ausgeben kann, sodass eine breitere Verbindung nicht erforderlich ist.
  5. Der Host sendet Steuersignale über eine leichte H2F (LH2F)-Brücke an das Gerät.
    Da Steuersignale vom Host zum Gerät Signale mit geringer Bandbreite sind, ist eine LH2F-Bridge ideal für diese Aufgabe.

1.2 Portieren der Referenzplattform auf Ihr SoC-FPGA-Board
Führen Sie die folgenden Aufgaben aus, um die Cyclone V SoC Development Kit-Referenzplattform auf Ihr SoC-FPGA-Board zu portieren:

  1. Wählen Sie die Version mit einem DDR-Speicher oder mit zwei DDR-Speichern der c5soc-Referenzplattform als Ausgangspunkt für Ihr Design.
  2. Aktualisieren Sie die Pin-Positionen in ALTERAOCLSDKROOT/board/c5soc/ /top.qsf file, wobei ALTERAOCLSDKROOT der Pfad zum Speicherort des Intel FPGA SDK für die OpenCL-Installation ist, und ist der Verzeichnisname der Board-Variante. Das Verzeichnis c5soc_sharedonly ist für die Board-Variante mit einem DDR-Speichersystem. Das c5soc-Verzeichnis ist für die Board-Variante mit zwei DDR-Speichersystemen.
  3.  Aktualisieren Sie die DDR-Einstellungen für die HPS- und/oder FPGA-SDRAM-Blöcke in ALTERAOCLSDKROOT/board/c5soc/ /system.qsys file.
    4. Alle bevorzugten Platinendesigns von Intel FPGA SDK für OpenCL müssen einen garantierten Timing-Abschluss erreichen. Daher muss die Platzierung des Designs zeitlich sauber sein. Führen Sie die folgenden Aufgaben aus, um die c5soc-Boardpartition (acl_iface_partition.qxp) auf Ihr SoC-FPGA-Board zu portieren:
    Ausführliche Anweisungen zum Ändern und Beibehalten der Board-Partition finden Sie in der Quartus
    Prime Incremental Compilation for Hierarchical and Team-Based Design Kapitel des Quartus Prime Standard Edition Handbuchs.
    a. Entfernen Sie acl_iface_partition.qxp aus dem Verzeichnis ALTERAOCLSDKROOT/board/c5soc/c5soc.
    b. Aktivieren Sie die LogicLock™-Region acl_iface_region, indem Sie den Tcl-Befehl set_global_assignment -name LL_ENABLED OFF -section_id acl_iface_region in set_global_assignment -name LL_ENABLED ON -section_id acl_iface_region ändern
    c. Kompilieren Sie einen OpenCL-Kernel für Ihr Board.
    d. Passen Sie bei Bedarf die Größe und Position des LogicLock-Bereichs an.
    e. Wenn Sie zufrieden sind, dass die Platzierung Ihres Entwurfs zeitlich sauber ist, exportieren Sie diese Partition als acl_iface_partition.qxp Quartus Prime Exported Partition File.
    Wie im Abschnitt Establishing Guaranteed Timing Flow des AIntel FPGA SDK for OpenCL Custom Platform Toolkit User Guide beschrieben, durch Importieren dieser .qxp  file in das Top-Level-Design erfüllen Sie die Anforderung, ein Board-Design mit einem garantierten Timing-Closure-Fluss bereitzustellen.
    Informationen zu Faktoren, die sich auf die Ergebnisqualität (QoR) Ihrer exportierten Partition auswirken können, finden Sie im Abschnitt „Allgemeine Erwägungen zur Ergebnisqualität für die exportierte Platinenpartition“ im Intel FPGA SDK für OpenCL Custom Platform Toolkit User Guide.
    f. Deaktivieren Sie die LogicLock-Region acl_iface_region, indem Sie den Befehl in Schritt 2 zurück auf set_global_assignment -name LL_ENABLED OFF section_id acl_iface_region setzen.
  4. Wenn Ihr SoC-FPGA-Board andere Pins und Peripherien des HPS-Blocks verwendet, generieren Sie den Preloader und die Gerätebaumquelle (DTS) neu. file. Wenn Sie die Einstellungen des HPS DDR-Speichercontrollers ändern, generieren Sie den Preloader neu.
  5. Erstellen Sie das Image der SD-Flash-Karte.
  6. Erstellen Sie Ihre benutzerdefinierte Plattform, die das SD-Flashkarten-Image enthält.
  7. Erwägen Sie, eine Laufzeitumgebungsversion Ihrer benutzerdefinierten Plattform zur Verwendung mit der Intel FPGA-Laufzeitumgebung (RTE) für OpenCL zu erstellen. Die RTE-Version Ihrer benutzerdefinierten Plattform enthält keine Hardwareverzeichnisse und das SD-Flashkarten-Image. Diese benutzerdefinierte Plattform wird auf das SoC-FPGA-System geladen, damit Hostanwendungen ausgeführt werden können. Im Gegensatz dazu ist die SDK-Version der benutzerdefinierten Plattform erforderlich, damit das SDK OpenCL-Kernel kompilieren kann.
    Tipp: Sie können die SDK-Version Ihrer benutzerdefinierten Plattform für die RTE verwenden. Speichern
    entfernen Sie das SD-Flashkarten-Image aus der RTE-Version Ihrer benutzerdefinierten Plattform.
  8. Testen Sie Ihre benutzerdefinierte Plattform.
    Weitere Informationen finden Sie im Abschnitt Testen des Hardwaredesigns des Intel FPGA SDK for OpenCL Custom Platform Toolkit User Guide.

Links zum Thema

  • Testen des Hardwaredesigns
  • Quartus Prime Incremental Compilation für hierarchisches und teambasiertes Design
  • Festlegen eines garantierten zeitlichen Ablaufs
  • Allgemeine Überlegungen zur Qualität der Ergebnisse für die exportierte Platinenpartition

1.2.1 Aktualisieren einer portierten Referenzplattform
In der aktuellen Version der Cyclone V SoC Development Kit-Referenzplattform befindet sich der HPS-Block innerhalb der Partition, die die gesamte Nicht-Kernel-Logik definiert. Sie können das HPS jedoch nicht als Teil der .qxp-Datei exportieren file. Um eine vorhandene benutzerdefinierte Plattform zu aktualisieren, die Sie von einer früheren Version von c5soc geändert haben, implementieren Sie den QXP-Erhaltungsablauf, aktualisieren Sie das SD-Flashkarten-Image, um die neueste Laufzeitumgebung zu erhalten, und aktualisieren Sie die Datei board_spec.xml file um die automatische Migration zu aktivieren.
Das Altera® SDK für OpenCL Version 14.1 und höher prüft die board_spec.xml file für Board-Informationen und implementiert automatische Updates. Weil Sie die ändern
Design durch Implementieren des QXP-Erhaltungsflusses müssen Sie die Datei board_spec.xml aktualisieren file auf sein Format in der aktuellen Version. Aktualisieren der file ermöglicht dem SDK, zwischen nicht beibehaltenen benutzerdefinierten Plattformen und den aktuellen QXP-basierten benutzerdefinierten Plattformen zu unterscheiden. Weitere Informationen finden Sie unter Automigration benutzerdefinierter Plattformen für Aufwärtskompatibilität im Intel FPGA SDK für OpenCL Custom Platform Toolkit User Guide.

  1. Um den QXP-Erhaltungsfluss in einem Cyclone V SoC FPGA-Hardwaredesign zu implementieren, das von einer früheren Version von c5soc portiert wurde, führen Sie die folgenden Schritte aus, um eine Unterpartition zu erstellen, um das HPS aus der .qxp-Datei auszuschließen file:
    a. Bevor Sie eine Partition um die Nicht-Kernel-Logik erstellen, erstellen Sie eine Partition um den HPS in den .qsf Quartus Prime-Einstellungen File.
    Zum Beispielampauf:
    # Partitionieren Sie die Instanz, die die HPS-dedizierte E/A modelliert, manuell set_instance_assignment -name PARTITION_HIERARCHY borde_18261 -to „system:the_system|system_acl_iface:acl_iface|system_acl_iface_hps_0:hps_0|system_acl_iface_hps_0_hps_io:hps_io| system_acl_iface_hps_0_hps_io_border:border“ -section_id „system_acl_iface_hps_0_hps_io_border:border“
    # Stellen Sie die Partition auf einen HPS_PARTITION-Typ ein, damit sie vom Rest von Quartus korrekt verarbeitet wird
    set_global_assignment -name PARTITION_TYPE HPS_PARTITION -section_id „system_acl_iface_hps_0_hps_io_border:border“
    quartus_cdb oben -c oben
    –incremental_compilation_export=acl_iface_partition.qxp
    –incremental_compilation_export_partition_name=acl_iface_partition
    –incremental_compilation_export_post_synth=ein
    –incremental_compilation_export_post_fit=ein
    –incremental_compilation_export_routing=ein
    –incremental_compilation_export_flatten=aus
    Nachdem Sie den HPS von der Partition ausgeschlossen haben, können Sie die .qxp-Datei importieren file und stellen Sie Ihr Design zusammen.
  2. Aktualisieren Sie das SD-Flashkarten-Image mit der aktuellen Version von Intel FPGA RTE für OpenCL, indem Sie die folgenden Aufgaben ausführen:
    a. Montieren Sie die file Zuordnungstabelle (fat32) und erweitert file Systempartitionen (ext3) im vorhandenen Image als Loopback-Geräte. Ausführliche Anweisungen finden Sie in Schritt 2 unter Erstellen eines SD-Flash-Karten-Image.
    b. Entfernen Sie im Verzeichnis /home/root/opencl_arm32_rte die files aus der vorherigen Version des RTE.
    c. Laden Sie die aktuelle Version der RTE herunter und entpacken Sie sie in das Verzeichnis /home/root/opencl_arm32_rte.
    d. Im /driver/version.h file Ihrer benutzerdefinierten Plattform aktualisieren Sie die ACL_DRIVER_VERSION-Zuweisung auf . (zum Bspample, 16.1.x, wobei 16.1 die SDK-Version und x die von Ihnen festgelegte Treiberversion ist).
    e. Bauen Sie den Treiber neu auf.
    f. Löschen Sie den/die Hardwareordner Ihrer benutzerdefinierten Plattform. Kopieren Sie die benutzerdefinierte Plattform zusammen mit dem aktualisierten Treiber in das Verzeichnis /home/root/opencl_arm_rte/board.
    g. Kopieren Sie die Altera.icd file aus dem Verzeichnis /home/root/opencl_arm32_rte und fügen Sie es dem Verzeichnis /etc/OpenCL/vendors hinzu.
    h. Deinstallieren und testen Sie das neue Image. Ausführliche Anweisungen finden Sie in den Schritten 8 bis 11 in Erstellen eines SD-Flash-Karten-Images.

Links zum Thema

  • Erstellen eines SD-Flash-Karten-Images auf Seite 14
    Sie haben auch die Möglichkeit, ein neues SD-Flashkarten-Image zu erstellen.
  • Benutzerdefinierte Plattform-Automigration für Vorwärtskompatibilität

1.3 Softwareunterstützung für Shared Memory
Gemeinsam genutzter physischer Speicher zwischen FPGA und CPU ist der bevorzugte Speicher für OpenCL-Kernel, die auf SoC-FPGAs ausgeführt werden. Da das FPGA im Gegensatz zum gemeinsam genutzten virtuellen Speicher auf gemeinsam genutzten physischen Speicher zugreift, hat es keinen Zugriff auf die Seitentabellen der CPU, die virtuelle Benutzeradressen physikalischen Seitenadressen zuordnen.
In Bezug auf die Hardware greifen OpenCL-Kernel über eine direkte Verbindung zum HPS DDR-Festplattenspeicher-Controller auf gemeinsam genutzten physischen Speicher zu. In Bezug auf die Software beinhaltet die Unterstützung für gemeinsam genutzten physischen Speicher die folgenden Überlegungen:

  1. Typische Software-Implementierungen zum Zuweisen von Speicher auf der CPU (zample, die Funktion malloc()) kann keinen Speicherbereich zuweisen, den das FPGA verwenden darf.
    Speicher, den die Funktion malloc() zuweist, ist im Adressraum des virtuellen Speichers zusammenhängend, aber es ist unwahrscheinlich, dass alle zugrunde liegenden physischen Seiten physisch zusammenhängend sind. Daher muss der Host in der Lage sein, physisch zusammenhängende Speicherbereiche zuzuweisen. Diese Fähigkeit existiert jedoch nicht in User-Space-Anwendungen unter Linux. Daher muss der Linux-Kerneltreiber die Zuordnung vornehmen.
  2. Der OpenCL-SoC-FPGA-Linux-Kerneltreiber enthält die mmap()-Funktion, um gemeinsam genutzten physischen Speicher zuzuweisen und ihn dem Benutzerbereich zuzuordnen. Die mmap()-Funktion verwendet den Standard-Linux-Kernel-Aufruf dma_alloc_coherent(), um physisch zusammenhängende Speicherbereiche zur gemeinsamen Nutzung mit einem Gerät anzufordern.
  3. Im Standard-Linux-Kernel weist dma_alloc_coherent() keinen physisch zusammenhängenden Speicher mit einer Größe von mehr als 0.5 Megabyte (MB) zu. Damit dma_alloc_coherent() große Mengen an physisch zusammenhängendem Speicher zuweisen kann, aktivieren Sie die Contiguous Memory Allocator (CMA)-Funktion des Linux-Kernels und kompilieren Sie dann den Linux-Kernel neu.
    Für die Referenzplattform Cyclone V SoC Development Kit verwaltet CMA 512 MB von 1 GB physischem Speicher. Sie können diesen Wert abhängig von der Menge an gemeinsam genutztem Speicher, die die Anwendung benötigt, erhöhen oder verringern. Der dma_alloc_coherent()-Aufruf ist möglicherweise nicht in der Lage, die vollen 512 MB des physisch zusammenhängenden Speichers zuzuweisen; es kann jedoch routinemäßig ungefähr 450 MB Speicher erhalten.
  4. Die CPU kann Speicher zwischenspeichern, den der Aufruf dma_alloc_coherent() zuweist. Insbesondere sind Schreiboperationen von der Hostanwendung für die OpenCL-Kernel nicht sichtbar. Die mmap()-Funktion im OpenCL SoC FPGA-Linux-Kerneltreiber enthält auch Aufrufe der pgprot_noncached()- oder remap_pf_range()-Funktion, um das Caching für diesen Speicherbereich explizit zu deaktivieren.
  5. Nachdem die Funktion dma_alloc_coherent() den physisch zusammenhängenden Speicher zugewiesen hat, gibt die Funktion mmap() die virtuelle Adresse an den Anfang des Bereichs zurück, der die Adressspanne des zugewiesenen Speichers ist. Die Host-Anwendung benötigt diese virtuelle Adresse, um auf den Speicher zuzugreifen. Andererseits benötigen die OpenCL-Kernel physische Adressen. Der Linux-Kerneltreiber verfolgt die Zuordnung von virtuellen zu physischen Adressen. Sie können die physischen Adressen, die mmap() zurückgibt, tatsächlichen physischen Adressen zuordnen, indem Sie dem Treiber eine Abfrage hinzufügen.
    Der Aufruf der MMD-Anwendungsprogrammierschnittstelle (API) aocl_mmd_shared_mem_alloc() enthält die folgenden Abfragen:
    a. Die Funktion mmap(), die Speicher zuweist und die virtuelle Adresse zurückgibt.
    b. Die zusätzliche Abfrage, die die zurückgegebene virtuelle Adresse der physischen Adresse zuordnet.
    Der MMD-API-Aufruf aocl_mmd_shared_mem_alloc() gibt dann zwei Adressen zurück
    – Die tatsächlich zurückgegebene Adresse ist die virtuelle Adresse, und die physische Adresse geht an device_ptr_out.
    Notiz: Der Treiber kann nur die virtuellen Adressen, die die Funktion mmap() zurückgibt, auf physikalische Adressen abbilden. Wenn Sie die physische Adresse eines anderen virtuellen Zeigers anfordern, gibt der Treiber einen NULL-Wert zurück.

Warnung: Das Intel FPGA SDK für OpenCL-Laufzeitbibliotheken geht davon aus, dass der gemeinsam genutzte Speicher der erste in der Datei „board_spec.xml“ aufgeführte Speicher ist file. Mit anderen Worten, die physische Adresse, die der Linux-Kernel-Treiber erhält, wird zur Avalon®-Adresse, die der OpenCL-Kernel an das HPS-SDRAM weitergibt.
Verwenden Sie in Bezug auf die Laufzeitbibliothek den Aufruf clCreateBuffer(), um den gemeinsam genutzten Speicher wie folgt als Gerätepuffer zuzuweisen:

  • Für die Zwei-DDR-Board-Variante mit gemeinsam genutztem und nicht gemeinsam genutztem Speicher weist clCreateBuffer() gemeinsam genutzten Speicher zu, wenn Sie das Flag CL_MEM_USE_HOST_PTR angeben. Die Verwendung anderer Flags bewirkt, dass clCreateBuffer() Puffer im nicht gemeinsam genutzten Speicher zuweist.
  • Für die Ein-DDR-Board-Variante mit nur gemeinsam genutztem Speicher weist clCreateBuffer() gemeinsam genutzten Speicher zu, unabhängig davon, welches Flag Sie angeben.
    Derzeit regelt die 32-Bit-Linux-Unterstützung auf ARM-CPUs den Umfang der Shared-Memory-Unterstützung in den SDK-Laufzeitbibliotheken. Mit anderen Worten, Laufzeitbibliotheken, die in andere Umgebungen kompiliert wurden (zample, x86_64 Linux oder 64-Bit Windows) unterstützen keinen Shared Memory.
    C5soc hat aus folgenden Gründen keinen heterogenen Speicher implementiert, um zwischen gemeinsam genutztem und nicht gemeinsam genutztem Speicher zu unterscheiden:
    1. Historie – Die Unterstützung für heterogenen Speicher war nicht verfügbar, als die Unterstützung für gemeinsam genutzten Speicher ursprünglich erstellt wurde.
    2. Einheitliche Schnittstelle – Da OpenCL ein offener Standard ist, sorgt Intel für Konsistenz zwischen den Anbietern heterogener Computerplattformen. Daher wird dieselbe Schnittstelle wie die Architekturen anderer Board-Anbieter verwendet, um gemeinsam genutzten Speicher zuzuweisen und zu verwenden.

1.4 FPGA-Neukonfiguration
Bei SoC-FPGAs kann die CPU die FPGA-Core-Fabric neu konfigurieren, ohne den Betrieb der CPU zu unterbrechen. Der FPGA-Manager-Hardwareblock, der das HPS und das Kern-FPGA überspannt, führt die Neukonfiguration durch. Der Linux-Kernel enthält einen Treiber, der einen einfachen Zugriff auf den FPGA-Manager ermöglicht.

  • Zu view den Status des FPGA-Kerns, rufen Sie den Befehl cat /sys/class/fpga/fpga0/status auf.
    Das Programmdienstprogramm Intel FPGA SDK for OpenCL, das mit der Cyclone V SoC Development Kit Reference Platform verfügbar ist, verwendet diese Schnittstelle zum Programmieren des FPGA. Bei der Neuprogrammierung eines FPGA-Kerns mit laufender CPU führt das Programmdienstprogramm alle folgenden Aufgaben aus:
    1. Deaktivieren Sie vor der Neuprogrammierung alle Kommunikationsbrücken zwischen dem FPGA und dem HPS, sowohl H2F- als auch LH2F-Brücken.
    Aktivieren Sie diese Brücken nach Abschluss der Neuprogrammierung erneut.
    Achtung: Das OpenCL-System verwendet nicht die FPGA-to-HPS (F2H) Bridge. Weitere Informationen finden Sie im Abschnitt HPS-FPGA-Schnittstellen im Cyclone V Device Handbook, Volume 3: Hard Processor System Technical Reference Manual.
    2. Stellen Sie sicher, dass die Verbindung zwischen dem FPGA und dem HPS-DDR-Controller während der Neuprogrammierung deaktiviert ist.
    3. Stellen Sie sicher, dass die FPGA-Interrupts auf dem FPGA während der Neuprogrammierung deaktiviert sind.
    Weisen Sie außerdem den Treiber an, alle Interrupts vom FPGA während der Neuprogrammierung abzulehnen.

Konsultieren Sie den Quellcode des Programmdienstprogramms für Details zur tatsächlichen Implementierung.

Warnung: Ändern Sie die Konfiguration des HPS DDR-Controllers nicht, wenn die CPU läuft.
Andernfalls kann es zu einem schwerwiegenden Systemfehler kommen, da Sie möglicherweise die DDR-Controller-Konfiguration ändern, wenn ausstehende Speichertransaktionen von der CPU ausstehen. Das bedeutet, dass Sie bei laufender CPU den FPGA-Kern nicht mit einem Image neu programmieren dürfen, das HPS DDR in einer anderen Konfiguration verwendet.
Denken Sie daran, dass das OpenCL-System und das Golden Hardware-Referenzdesign, das mit der Intel SoC FPGA Embedded Design Suite (EDS) verfügbar ist, den HPS DDR in einen einzelnen 256-Bit-Modus versetzt.
CPU-Systemteile wie der Verzweigungsprädiktor oder der Seitentabellen-Vorabrufer können DDR-Befehle ausgeben, selbst wenn es den Anschein hat, dass auf der CPU nichts läuft.
Daher ist die Startzeit die einzige sichere Zeit, um die Konfiguration des HPS DDR-Controllers festzulegen.
Dies impliziert auch, dass U-boot eine rohe Binärdatei haben muss file (.rbf)-Bild, das in den Speicher geladen werden soll. Andernfalls aktivieren Sie möglicherweise den HPS DDR mit ungenutzten Ports auf dem FPGA und ändern anschließend möglicherweise die Portkonfigurationen. Aus diesem Grund enthält der OpenCL-Linux-Kerneltreiber nicht mehr die Logik, die zum Festlegen der HPS-DDR-Controller-Konfiguration erforderlich ist.
Die SW3 Dual Inline Package (DIP) Switches auf dem Cylone V SoC Development Kit steuern die erwartete Form des .rbf-Images (d. h., ob die file komprimiert und/oder verschlüsselt ist). C5soc und das mit dem SoC EDS verfügbare Golden Hardware Reference Design enthalten komprimierte, aber unverschlüsselte .rbf-Images. Die im Intel FPGA SDK für OpenCL Cyclone V SoC Getting Started Guide beschriebenen SW3-DIP-Schaltereinstellungen stimmen mit dieser .rbf-Image-Konfiguration überein.

Links zum Thema

  • HPS-FPGA-Schnittstellen
  • Konfigurieren der SW3-Switches

1.4.1 Einzelheiten zur FPGA-Systemarchitektur
Die Unterstützung für die Cyclone V SoC Development Kit-Referenzplattform basiert auf der Stratix® V-Referenzplattform (s5_ref), die mit dem Intel FPGA SDK für OpenCL verfügbar ist.
Die Gesamtorganisation des c5soc-Qsys-Systems und des Kernel-Treibers sind denen in s5_ref sehr ähnlich.
Die folgenden FPGA-Kernkomponenten sind in c5soc und s5_ref gleich:

  • VERSION_ID-Block
  • Ruhemechanismus
  • Speicherbankteiler
  • Cache-Snoop-Schnittstelle
  • Kernuhr
  • Control Register Access (CRA)-Blöcke

1.5 Erstellen eines SD-Flashkarten-Images
Da das Cyclone V SoC FPGA ein vollständiges System auf einem Chip ist, sind Sie für die Bereitstellung der vollständigen Definition des Systems verantwortlich. Intel empfiehlt, es in Form eines SD-Flashkarten-Images zu liefern. Das Intel FPGA SDK für OpenCL-Benutzer kann das Image einfach auf die Micro-SD-Flashkarte schreiben und das SoC-FPGA-Board ist einsatzbereit.
Ändern eines vorhandenen SD-Flash-Karten-Images auf Seite 13
Intel empfiehlt, dass Sie einfach das mit der Cyclone V SoC Development Kit Reference Platform verfügbare Image ändern. Sie haben auch die Möglichkeit, ein neues SD-Flashkarten-Image zu erstellen.
Erstellen eines SD-Flash-Karten-Images auf Seite 14
Sie haben auch die Möglichkeit, ein neues SD-Flashkarten-Image zu erstellen.

1.5.1 Ändern eines vorhandenen SD-Flash-Karten-Image
Intel empfiehlt, dass Sie einfach das mit dem Cyclone V SoC verfügbare Image ändern
Entwicklungskit-Referenzplattform. Sie haben auch die Möglichkeit, ein neues SD-Flashkarten-Image zu erstellen.
Das c5soc-Bild linux_sd_card_image.tgz file ist im Verzeichnis ALTERAOCLSDKROOT/board/c5soc verfügbar, wobei ALTERAOCLSDKROOT auf den Pfad des Installationsverzeichnisses des Intel FPGA SDK für OpenCL verweist.

Aufmerksamkeit: Um das SD-Flashkarten-Image zu ändern, müssen Sie über Root- oder Sudo-Berechtigungen verfügen.

  1. Zum Dekomprimieren der Datei $ALTERAOCLSDKROOT/board/c5soc/linux_sd_card_image.tgz file, führen Sie den Befehl tar xvfzlinux_sd_card_image.tgz aus.
  2. Kompilieren Sie die hello_world OpenCL example-Design mit Ihrer Unterstützung für benutzerdefinierte Plattformen. Benennen Sie die .rbf-Datei um file die der Intel FPGA SDK für OpenCL Offline Compiler als opencl.rbf generiert, und platzieren Sie es auf der fat32-Partition innerhalb des SD-Flashkarten-Images.
    Sie können die hello_world ex herunterladenample design aus OpenCL Design Examples Seite auf der Altera webWebsite.
  3. Platzieren Sie die .rbf file in die fat32-Partition des Flash-Karten-Images.
    Aufmerksamkeit: Die fat32-Partition muss sowohl das zImage file und die .rbf file. Ohne .rbf file, tritt beim Einfügen des Treibers ein schwerwiegender Fehler auf.
  4. Nachdem Sie das SD-Karten-Image erstellt haben, schreiben Sie es auf eine Micro-SD-Karte, indem Sie den folgenden Befehl aufrufen: sudo dd if=/path/to/sdcard/image.bin of=/dev/sdcard
  5. Führen Sie die folgenden Aufgaben aus, um Ihr SD-Flashkarten-Image zu testen:
    a. Setzen Sie die Micro-SD-Flashkarte in das SoC-FPGA-Board ein.
    b. Schalten Sie das Board ein.
    c. Rufen Sie den Befehl des Dienstprogramms aocl diagnose auf.

1.5.2 Erstellen eines SD-Flash-Karten-Image
Sie haben auch die Möglichkeit, ein neues SD-Flashkarten-Image zu erstellen. Allgemeine Anweisungen zum Erstellen eines neuen SD-Flashkarten-Images und zum Wiederherstellen eines vorhandenen SD-Flashkarten-Images sind auf der Seite „GSRD v14.0.2 – SD-Karte“ von RocketBoards.org verfügbar webWebsite.
Die folgenden Schritte beschreiben das Verfahren zum Erstellen des Images linux_sd_card_image.tgz aus dem SD-Flashkarten-Image des Golden System Reference Design (GSRD):
Notiz:
Um das Image aus dem c5soc-Image zu erstellen, führen Sie alle anwendbaren Aufgaben aus, die in diesem Verfahren beschrieben sind.

  1. Laden Sie das GSRD-SD-Flashkarten-Image Version 14.0 von Rocketboards.org herunter und entpacken Sie es.
  2. Montieren Sie die file Zuordnungstabelle (fat32) und erweitert file Systempartitionen (ext3) in diesem Image als Loopback-Geräte. Führen Sie die folgenden Schritte aus, um eine Partition zu mounten:
    a. Bestimmen Sie den Byte-Start der Partition innerhalb des Images, indem Sie /sbin/fdisk -lu image_ aufrufen.file Befehl.
    Zum Beispielample, Partition Nummer 1 vom Typ W95 FAT hat einen Block-Offset von 2121728. Bei 512 Bytes pro Block beträgt der Byte-Offset 512 Bytes x 2121728 = 1086324736 Bytes.
    b. Identifizieren Sie ein freies Loop-Gerät (zample, /dev/loop0), indem Sie den Befehl losetup -f eingeben.
    c. Angenommen, /dev/loop0 ist das freie Loop-Gerät, weisen Sie Ihr Flashkarten-Image dem Loop-Block-Gerät zu, indem Sie das loosetup /dev/loop0-Image_ aufrufen.file -0 1086324736 Befehl.
    d. Mounten Sie das Loop-Gerät, indem Sie den Befehl mount /dev/loop0 /media/disk1 aufrufen.
    Innerhalb des Bildes file, /media/disk1 ist jetzt eine gemountete Fat32-Partition.
    e. Wiederholen Sie die Schritte a bis d für die ext3-Partition.
  3. Laden Sie die Cyclone V SoC FPGA-Version des Pakets Intel FPGA Runtime Environment for OpenCL aus dem Download Center auf Altera herunter webWebsite.
    a. Klicken Sie neben Quartus Prime Software Edition auf die Schaltfläche Download.
    b. Geben Sie die Release-Version, das Betriebssystem und die Download-Methode an.
    c. Klicken Sie auf die Registerkarte „Zusätzliche Software“ und wählen Sie „Intel FPGA herunterladen“.
    Laufzeitumgebung für OpenCL Linux Cyclone V SoC TGZ.
    d. Nachdem Sie die aocl-rte- .arm32.tgz file, entpacken Sie es
    ein Verzeichnis, das Ihnen gehört.
  4. Legen Sie das ausgepackte aocl-rte- .arm32 in das Verzeichnis /home/root/opencl_arm32_rte auf der ext3-Partition des Images file.
  5. Löschen Sie den/die Hardwareordner Ihrer benutzerdefinierten Plattform und platzieren Sie die benutzerdefinierte Plattform dann im Board-Unterverzeichnis von /home/root/opencl_arm32_rte.
  6. Erstellen Sie die init_opencl.sh file im Verzeichnis /home/root mit folgendem Inhalt: export ALTERAOCLSDKROOT=/home/root/opencl_arm32_rte export AOCL_BOARD_PACKAGE_ROOT=$ALTERAOCLSDKROOT/board/ export PATH=$ALTERAOCLSDKROOT/bin:$PATH export LD_LIBRARY_PATH=$ALTERAOCLSDKROOT/host/arm32/lib:$LD_LIBRARY_PATH insmod $AOCL_BOARD_PACKAGE_ROOT/driver/aclsoc_drv.ko
    Der SDK-Benutzer führt den Befehl source ./init_opencl.sh aus, um die Umgebungsvariablen und den OpenCL-Linux-Kerneltreiber zu laden.
  7. Wenn Sie den Preloader aktualisieren müssen, wird die DTS files oder dem Linux-Kernel benötigen Sie den Compiler arm-linux-gnueabihf-gcc aus dem SoC EDS. Befolgen Sie die Anweisungen im Benutzerhandbuch der Intel SoC FPGA Embedded Design Suite, um die Software zu erwerben, sie neu zu kompilieren und die relevanten zu aktualisieren files auf der gemounteten Fat32-Partition.
    Aufmerksamkeit: Es ist sehr wahrscheinlich, dass Sie den Preloader aktualisieren müssen, wenn Ihre benutzerdefinierte Plattform andere Pin-Verwendungen als die in c5soc hat.
    Denken Sie daran: Wenn Sie den Linux-Kernel neu kompilieren, kompilieren Sie den Linux-Kernel-Treiber mit derselben Linux-Kernel-Quelle neu files. Wenn der Linux-Kerneltreiber und der Linux-Kernel nicht übereinstimmen, wird der Treiber nicht geladen. Außerdem müssen Sie den CMA aktivieren.
    Weitere Informationen finden Sie unter Linux-Kernel neu kompilieren.
  8. Kompilieren Sie die hello_world OpenCL example-Design mit Ihrer Unterstützung für benutzerdefinierte Plattformen. Benennen Sie die .rbf-Datei um file die der Intel FPGA SDK für OpenCL Offline Compiler als opencl.rbf generiert, und platzieren Sie es auf der fat32-Partition innerhalb des SD-Flashkarten-Images.
    Sie können die hello_world ex herunterladenample design aus OpenCL Design Examples Seite auf der Altera webWebsite.
    9. Nachdem Sie alles Notwendige gespeichert haben files auf das Flash-Karten-Image, rufen Sie die folgenden Befehle auf:
    a. synchronisieren
    b. Hängen Sie /media/disk1 aus
    c. aushängen wo ist der Verzeichnisname, den Sie zum Mounten der ext3-Partition in 3 auf Seite 3 verwenden (zampDatei, /media/disk2).
    D. losetup -d /dev/loop0
    e. losetup -d /dev/loop1
  9. Komprimieren Sie das SD-Flashkarten-Image, indem Sie den folgenden Befehl aufrufen: tar cvfz .tgz linux_sd_card_image
  10. Liefere die .tgz file im Stammverzeichnis Ihrer benutzerdefinierten Plattform.
  11. Führen Sie die folgenden Aufgaben aus, um Ihr SD-Flashkarten-Image zu testen:
    a. Schreiben Sie das resultierende unkomprimierte Bild auf eine Micro-SD-Flash-Karte.
    b. Setzen Sie die Micro-SD-Flashkarte in das SoC-FPGA-Board ein.
    c. Schalten Sie das Board ein.
    d. Rufen Sie den Befehl des Dienstprogramms aocl diagnose auf.

Links zum Thema

  • Benutzerhandbuch für die Intel SoC FPGA Embedded Design Suite
  • OpenCL Design Bspamples Seite auf der Altera webWebsite
  • Neukompilieren des Linux-Kernels auf Seite 16
    Um den CMA zu aktivieren, müssen Sie zuerst den Linux-Kernel neu kompilieren.
  • Abfrage des Gerätenamens Ihres FPGA-Boards (Diagnose)

1.6 Kompilieren des Linux-Kernels für Cyclone V SoC FPGA
Bevor Sie OpenCL-Anwendungen auf dem Cyclone V SoC FPGA-Board ausführen, müssen Sie die Linux-Kernel-Quelle kompilieren und den OpenCL-Linux-Kernel-Treiber kompilieren und installieren.

  1. Neukompilieren des Linux-Kernels auf Seite 16
    Um den CMA zu aktivieren, müssen Sie zuerst den Linux-Kernel neu kompilieren.
  2. Kompilieren und Installieren des OpenCL-Linux-Kerneltreibers auf Seite 17 Kompilieren Sie den OpenCL-Linux-Kerneltreiber anhand der kompilierten Kernelquelle.

1.6.1 Den Linux-Kernel neu kompilieren
Um den CMA zu aktivieren, müssen Sie zuerst den Linux-Kernel neu kompilieren.

  1. Klicken Sie auf den Link GSRD v14.0 – Kompilieren von Linux auf der Ressourcenseite von RocketBoards.org webWebsite, um auf Anweisungen zum Herunterladen und Neuerstellen des Linux-Kernel-Quellcodes zuzugreifen.
    Geben Sie für die Verwendung mit dem™ Intel FPGA SDK für OpenCL socfpga-3.13-rel14.0 als an .
  2. Hinweis: Der Erstellungsprozess erstellt die arch/arm/configs/socfpga_defconfig file. Das file gibt die Einstellungen für die socfpga-Standardkonfiguration an.
    Fügen Sie die folgenden Zeilen am Ende der arch/arm/configs/socfpga_defconfig file.
    CONFIG_MEMORY_ISOLATION=y
    CONFIG_CMA=y
    CONFIG_DMA_CMA=j
    CONFIG_CMA_DEBUG=j
    CONFIG_CMA_SIZE_MBYTES=512
    CONFIG_CMA_SIZE_SEL_MBYTES=j
    CONFIG_CMA_ALIGNMENT=8
    CONFIG_CMA_AREAS=7
    Der Konfigurationswert CONFIG_CMA_SIZE_MBYTES legt die Obergrenze für die Gesamtzahl des verfügbaren physisch zusammenhängenden Speichers fest. Sie können diesen Wert erhöhen, wenn Sie mehr Speicher benötigen.
  3. Aufmerksamkeit: Die Gesamtmenge an physischem Speicher, die dem ARM-Prozessor auf der SoC-FPGA-Platine zur Verfügung steht, beträgt 1 GB. Intel empfiehlt nicht, den CMA-Manager auf nahe 1 GB einzustellen.
  4. Führen Sie den Befehl make mrproper aus, um die aktuelle Konfiguration zu bereinigen.
  5. Führen Sie den Befehl make ARCH=arm socfpga_deconfig aus.
    ARCH=arm gibt an, dass Sie die ARM-Architektur konfigurieren möchten.
    socfpga_defconfig gibt an, dass Sie die standardmäßige socfpga-Konfiguration verwenden möchten.
  6. Führen Sie den Befehl export CROSS_COMPILE=arm-linux-gnueabihf- aus.
    Dieser Befehl legt die Umgebungsvariable CROSS_COMPILE fest, um das Präfix der gewünschten Toolkette anzugeben.
  7. Führen Sie den Befehl make ARCH=arm zImage aus. Das resultierende Image ist im arch/arm/boot/zImage verfügbar file.
  8. Platzieren Sie das zImage file in die fat32-Partition des Flash-Karten-Images. Ausführliche Anweisungen finden Sie im Cyclone V SoC FPGA-spezifischen GSRD-Benutzerhandbuch auf Rocketboards.org.
  9. Hinweis: Um den OpenCL-Linux-Kerneltreiber korrekt einzufügen, laden Sie zuerst eine SDKgenerated.rbf file auf das FPGA.
    Um die .rbf file, kompilieren Sie ein SDK-Design example mit der Cyclone V SoC Development Kit-Referenzplattform als gezielte benutzerdefinierte Plattform.
    9. Platzieren Sie die .rbf file in die fat32-Partition des Flash-Karten-Images.
    Achtung: Die fat32-Partition muss sowohl das zImage file und die .rbf file. Ohne .rbf file, tritt beim Einfügen des Treibers ein schwerwiegender Fehler auf.
  10. Legen Sie die programmierte Micro-SD-Karte, die das SD-Karten-Image enthält, das Sie zuvor geändert oder erstellt haben, in das Cyclone V SoC Development Kit ein und schalten Sie dann die SoC-FPGA-Karte ein.
  11. Überprüfen Sie die Version des installierten Linux-Kernels, indem Sie den Befehl uname -r ausführen.
  12. Um zu überprüfen, ob Sie den CMA erfolgreich im Kernel aktivieren, führen Sie bei eingeschalteter SoC-FPGA-Karte den Befehl grep init_cma /proc/kallsyms aus.
    CMA wird aktiviert, wenn der Ausgang nicht leer ist.
  13. Um den neu kompilierten Linux-Kernel mit dem SDK zu verwenden, kompilieren und installieren Sie den Linux-Kernel-Treiber.

Links zum Thema

  • GSRD-Benutzerhandbücher (Golden System Reference Design).
  • Erstellen eines SD-Flash-Karten-Images auf Seite 13
    Da das Cyclone V SoC FPGA ein vollständiges System auf einem Chip ist, sind Sie für die Bereitstellung der vollständigen Definition des Systems verantwortlich.

1.6.2 Kompilieren und Installieren des OpenCL-Linux-Kernel-Treibers
Kompilieren Sie den OpenCL-Linux-Kerneltreiber gegen die kompilierte Kernelquelle.

Die Treiberquelle ist in der Cyclone V SoC FPGA-Version der Intel FPGA Runtime Environment für OpenCL verfügbar. Stellen Sie außerdem sicher, dass Sie ein Intel FPGA SDK für OpenCL-generierte .rbf geladen haben file in das FPGA, um eine fehlerhafte Installation des Linux-Kernel-Moduls zu verhindern.

  1. Laden Sie die Cyclone V SoC FPGA-Version des Pakets Intel FPGA Runtime Environment for OpenCL aus dem Download Center auf Altera herunter webWebsite.
    a. Klicken Sie neben Quartus Prime Software Edition auf die Schaltfläche Download.
    b. Geben Sie die Release-Version, das Betriebssystem und die Download-Methode an.
    c. Klicken Sie auf die Registerkarte „Zusätzliche Software“ und wählen Sie „Intel FPGA herunterladen“.
    Laufzeitumgebung für OpenCL Linux Cyclone V SoC TGZ.
    d. Nachdem Sie die aocl-rte- .arm32.tgz file, entpacken Sie es
    ein Verzeichnis, das Ihnen gehört.
    Die Treiberquelle befindet sich im aocl-rte- .arm32/board/c5soc/ Treiberverzeichnis.
  2. Um den OpenCL-Linux-Kerneltreiber neu zu kompilieren, legen Sie den KDIR-Wert in der Datei Make des Treibers festfile in das Verzeichnis, das die Linux-Kernel-Quelle enthält files.
  3. Führen Sie den Befehl export CROSS_COMPILE=arm-linux-gnueabihf- aus, um das Präfix Ihrer Toolkette anzugeben.
  4. Führen Sie den make clean-Befehl aus.
  5. Führen Sie den Befehl make aus, um aclsoc_drv.ko zu erstellen file.
  6. Übertragen Sie das Verzeichnis opencl_arm32_rte auf das Cyclone V SoC FPGA-Board.
    Ausführen von scp -r root@ihre-ipadresse: Der Befehl legt die Laufzeitumgebung im Verzeichnis /home/root ab.
  7. Führen Sie das Skript init_opencl.sh aus, das Sie beim Erstellen des SD-Kartenimages erstellt haben.
  8.  Rufen Sie den Befehl des Dienstprogramms aocl diagnose auf. Das Diagnosedienstprogramm gibt ein bestandenes Ergebnis zurück, nachdem Sie init_opencl.sh erfolgreich ausgeführt haben.

1.7 Bekannte Probleme
Derzeit gibt es bestimmte Einschränkungen bei der Verwendung des Intel FPGA SDK für OpenCL mit der Cyclone V SoC Development Kit-Referenzplattform.

  1. Sie können die Hersteller- und Platinennamen, die von den Zeichenfolgen CL_DEVICE_VENDOR und CL_DEVICE_NAME des Aufrufs clGetDeviceInfo() gemeldet werden, nicht überschreiben.
  2. Wenn der Host konstanten Speicher in einem gemeinsam genutzten DDR-System (d. h. HPS DDR) zuweist und den konstanten Speicher nach der Kernel-Ausführung ändert, können die Daten im Speicher veraltet sein. Dieses Problem tritt auf, weil der FPGA-Kern CPU-zu-HPS-DDR-Transaktionen nicht ausspionieren kann.
    Um zu verhindern, dass nachfolgende Kernel-Ausführungen auf veraltete Daten zugreifen, implementieren Sie eine der folgenden Problemumgehungen:
    • Verändern Sie den konstanten Speicher nach seiner Initialisierung nicht.
    • Wenn Sie mehrere __konstante Datensätze benötigen, erstellen Sie mehrere konstante Speicherpuffer.
    • Weisen Sie, falls verfügbar, konstanten Speicher im FPGA-DDR auf Ihrer Beschleunigerkarte zu.
  3. Das SDK-Dienstprogramm auf ARM unterstützt nur die Befehle des Programms und des Diagnosedienstprogramms.
    Die Flash-, Installations- und Deinstallationsdienstprogrammbefehle gelten aus folgenden Gründen nicht für das Cyclone V SoC Development Kit:
    a. Das Installationsdienstprogramm muss den Linux-Kerneltreiber aclsoc_drv kompilieren und auf dem SoC-FPGA aktivieren. Die Entwicklungsmaschine muss die Kompilierung durchführen; Es enthält jedoch bereits Linux-Kernel-Quellen für das SoC-FPGA. Die Linux-Kernelquellen für die Entwicklungsmaschine unterscheiden sich von denen für das SoC FPGA. Der Speicherort der Linux-Kernel-Quellen für das SoC-FPGA ist dem SDK-Benutzer wahrscheinlich unbekannt. Ebenso ist das Deinstallationsprogramm für das Cyclone V SoC Development Kit nicht verfügbar.
    Außerdem ist die Bereitstellung von aclsoc_drv für das SoC-Board eine Herausforderung, da die Standardverteilung des Cyclone V SoC Development Kit keinen Linux-Kernel enthält files oder der Compiler der GNU Compiler Collection (GCC).
    b. Das Flash-Dienstprogramm erfordert das Platzieren einer .rbf-Datei file eines OpenCL-Designs auf die FAT32-Partition der Micro-SD-Flashkarte. Derzeit wird diese Partition nicht gemountet, wenn der SDK-Benutzer das Board einschaltet. Daher ist der beste Weg, die Partition zu aktualisieren, die Verwendung eines Flash-Kartenlesers und des Entwicklungscomputers.
  4. Beim Umschalten zwischen der ausführbaren Datei Intel FPGA SDK for OpenCL Offline Compiler files (.aocx), die verschiedenen Board-Varianten entsprechen (d. h. c5soc und c5soc_sharedonly), müssen Sie das Programmdienstprogramm des SDK verwenden, um die .aocx zu laden file erstmals für die neue Board-Variante. Wenn Sie die Host-Anwendung einfach mit einer neuen Board-Variante ausführen, das FPGA jedoch das Image einer anderen Board-Variante enthält, kann ein schwerwiegender Fehler auftreten.
  5. Die .qxp file enthält nicht die Schnittstellenpartitionszuweisungen, da die Quartus Prime-Software die Timing-Anforderungen dieser Partition konsequent erfüllt.
  6. Wenn Sie das Board einschalten, wird seine MAC-Adresse (Media Access Control) auf eine Zufallszahl gesetzt. Wenn Ihre LAN-Richtlinie dieses Verhalten nicht zulässt, stellen Sie die MAC-Adresse ein, indem Sie die folgenden Aufgaben ausführen:
    a. Drücken Sie während des U-Boot-Starts eine beliebige Taste, um die U-Boot-Eingabeaufforderung aufzurufen.
    b. Geben Sie an der Eingabeaufforderung setenv ethaddr 00:07:ed:00:00:03 ein.
    Sie können eine beliebige MAC-Adresse auswählen.
    c. Geben Sie den saveenv-Befehl ein.
    d. Starten Sie das Board neu.

1.8 Revisionshistorie des Dokuments
Tabelle 1.
Dokumentieren Sie den Revisionsverlauf des Intel FPGA SDK für OpenCL Cyclone V SoC
Portierungshandbuch für Entwicklungskit-Referenzplattformen

Datum Version Änderungen
17. Mai 2017.05.08 •Wartungsfreigabe.
Oktoberboer 2016 2016.10.31 • Umbenennung von Altera SDK für OpenCL in Intel FPGA SDK für OpenCL.
• Umbenennung von Altera Offline Compiler in Intel FPGA SDK für OpenCL Offline Compiler.
16. Mai 2016.05.02 •Geänderte Anweisungen zum Erstellen und Ändern eines SD-Flashkarten-Image.
•Geänderte Anweisungen zum Neukompilieren des Linux-Kernels und des OpenCL-Linux-Kerneltreibers.
November-15 2015.11.02 •Wartungsversion und geänderte Instanzen von Quartus II zu Quartus Prime.
15. Mai 15.0.0 •Bei der FPGA-Rekonfiguration wurde die Anweisung zur Neuprogrammierung des FPGA-Kerns entfernt
mit einem . rbf-Bild durch Aufrufen von cat fileNamen>. rbf
> /dev/ fpga0 Befehl, da diese Methode nicht empfohlen wird.
14. Dezember 14.1.0 •Das Dokument wurde in Altera Cyclone V SoC Development Kit Reference Platform Porting Guide umbenannt.
• Aktualisierung des Dienstprogramms zur Neuprogrammierung auf das aocl-Programmfilename>.aocx-Hilfsprogrammbefehl.
•Das Diagnosedienstprogramm wurde auf aocl diagnose und aocl diagnose aktualisiert Utility-Befehl.
•Das Verfahren im Abschnitt „Portieren der Referenzplattform auf Ihr SoC-Board“ wurde aktualisiert, um Anweisungen zum Portieren und Ändern der c5soc-Board-Partition aufzunehmen, um eine Timing-saubere Partition für den garantierten Timing-Closure-Fluss zu erstellen.
•Das Thema Aktualisieren einer portierten Referenzplattform wurde eingefügt, um die Verfahren für die folgenden Aufgaben zu skizzieren:
1.Ausschließlich des Hard Processor System (HPS)-Blocks in der Platinenpartition
2. Aktualisieren des SD-Flashkarten-Image
•Der Abschnitt zum Erstellen eines SD-Flashkarten-Image wurde aktualisiert. Es wird empfohlen, Version 14.0 des GSRD-Images (Golden System Reference Design) als Ausgangspunkt anstelle des mit SoC Embedded Design Suite (EDS) verfügbaren Images zu verwenden.
•Der Abschnitt zum Neukompilieren des Linux-Kernels und des OpenCL-Linux-Kernel-Treibers wurde aktualisiert:
1. Anweisung zum Setzen der CROSS COMPILE-Variablen hinzugefügt.
2.Änderten Sie den Befehl, den Sie ausführen, um zu überprüfen, ob der CMA erfolgreich aktiviert wurde.
14. Juli 14.0.0 •Erstveröffentlichung.

Dokumente / Ressourcen

Intel FPGA-SDK für OpenCL [pdf] Benutzerhandbuch
FPGA-SDK für OpenCL, FPGA-SDK, SDK für OpenCL, SDK

Verweise

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind markiert *