[PYTHON] Ich habe PYNQ (2) -Overlay self-made- gestartet

Einführung

Die Verwendung des vorhandenen Overlays scheint in anderen Artikeln eingeführt worden zu sein. Überspringen Sie es also und fahren Sie mit dem nächsten fort. Dieses Mal werde ich meine eigene Überlagerung als Fortsetzung von [Letztes Mal] erstellen (https://qiita.com/lobmto/items/8f97872fc0f1927035a2). Erstellen Sie eine Überlagerung von "c = a + b" unter Bezugnahme auf dieses Video ~~ pack ~~.

Was ist Überlagerung?

Der Logikschaltungsteil von PYNQ-Z1 kann von einem Programm aus wie eine Bibliothek (?) Behandelt werden. Weitere Informationen finden Sie unter Offiziell.

Ausführungsumgebung

Der Download allein beträgt 10 GB und nach Abschluss fast 50 GB. Sie sollten also mit ausreichend Zeit und Speicherplatz daran arbeiten. Dieses Mal habe ich Webpack (kostenlose Version) verwendet.

Verfahren

Versuchen wir hier eine Schaltung, die gemäß dem Tutorial nur "c = a + b" ausführt.

Adder-Implementierung

Bereiten Sie zunächst eine Schaltung vor, die nur das FPGA hinzufügt.

1. 1. Starten Sie ein neues Projekt

  1. Starten Sie Vivado HLS.
  2. Geben Sie unter "Projektkonfiguration" den Projektnamen als Addierer und den entsprechenden Speicherort an. (** Wenn Japanisch im Pfad enthalten ist, kann später ein Fehler auftreten **)
  3. Geben Sie unter Add Remove Files (1st) in TopFunction add ein, um NewFile-> adder.cpp zu erstellen
  4. Ignorieren Sie das zweite "Add Remove Files" und fahren Sie fort
  5. Wenn Sie Solution Configuration erreichen, suchen Sie und wählen Sie Part Selection-> xc7z020clg400-1
  6. Klicken Sie auf "Fertig stellen", um ein Projekt zu erstellen

2. Implementierung

Sobald ein neues Projekt erstellt wurde, wird es implementiert.

    1. Doppelklicken Sie auf der Registerkarte Explorer auf der linken Seite des Bildschirms auf Source-> adder.cpp
  1. Geben Sie den folgenden Code ein (https://pynq.readthedocs.io/en/v2.1/overlay_design_methodology/overlay_tutorial.html)

adder.cpp


void add(int a, int b, int& c) {
#pragma HLS INTERFACE ap_ctrl_none port=return
#pragma HLS INTERFACE s_axilite port=a
#pragma HLS INTERFACE s_axilite port=b
#pragma HLS INTERFACE s_axilite port=c

    c = a + b;
}

3. 3. Lauf

Drücken Sie den "grünen Pfeil" oben links im Bild unten. image.png Wenn alles gut geht, sollten Sie einen Bildschirm wie diesen sehen. image.png

Vier. Schauen Sie sich die Adresse an

Die folgenden Dateien werden unter der Registerkarte Explorer unter solution-> impl-> misc-> drivers-> add_v1_0-> src-> xadd_hw.h generiert. image.png Wenn Sie sich das ansehen, sehen Sie die Entsprechungstabelle zwischen Variablen und Adressen.

Variable Adresse
a 0x10
b 0x18
c 0x20

Fünf. Export

Dies ist rechts neben dem "grünen Pfeil"![Image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382909/68a02ee2-8fda-1a21 -b767-839ce80ccd4b.png) und drücken Sie "OK".

Overlay-Implementierung

Konfigurieren Sie Overlay mit dem zuvor erstellten Addierer

0. Zugabe von PYNQ-Z1

Da die Informationen von PYNQ-Z1 nicht im Vivado-Webpaket registriert sind, laden Sie die Daten von [hier] herunter (https://github.com/cathalmccabe/pynq-z1_board_files/blob/master/pynq-z1.zip). Ich benutzte es. Entpacken Sie diese und kopieren Sie sie nach C: \ Xilinx \ Vivado \ 2019.2 \ data \boards \ board_files usw.

1. 1. Projekterstellung

  1. Starten Sie Vivado
  2. Wählen Sie "Projekt erstellen"
  3. Wenn "Neues Vivado-Projekt erstellen" angezeigt wird, klicken Sie auf "Weiter".
  4. Setzen Sie diesmal "Projektname" auf "Projekt_1" und wählen Sie einen geeigneten Ordner für "Speicherort".
  5. Wählen Sie "RTL-Projekt" für "Projekttyp". image.png
  6. Wählen Sie Default Part-> Board-> PYNQ-Z1.
  7. Wenn "Neue Projektzusammenfassung" angezeigt wird, erstellen Sie ein Projekt mit "Fertig stellen".

2. Erstellen

Wir werden weiter an Vivado arbeiten.

  1. Wählen Sie auf der linken Seite des Bildschirms "IP INTEGRATOR" -> "Blockdesign erstellen" und drücken Sie im Popup auf "OK".
  2. Klicken Sie auf "+" und wählen Sie "Suchen" -> "ZYNQ7-Verarbeitungssystem"Image.png 0/382909 / f3a0eba1-de3f-6758-118d-59f0bbf1ea66.png)
  3. Run Block Automation -> OKimage.png
  4. Gehen Sie unter "Extras" auf dem Bildschirm zu "Einstellungen" -> "IP" -> "Repository", drücken Sie "+" und wählen Sie den zuvor erstellten Ordner "Addierer" aus / fügen Sie ihn hinzu. image.png
  5. Kehren Sie zum ursprünglichen Bildschirm zurück und fügen Sie diesmal "Hinzufügen" hinzu. Ändern Sie außerdem den Namen von "add_0" in "scalar_add". image.png
  6. Drücken Sie auf "Verbindungsautomatisierung ausführen". image.png
  7. Speichern Sie (Strg + S) und klicken Sie mit der rechten Maustaste auf Sources-> design_1-> Create HDL Wrapper-> OK![Image.png](https: // qiita-image-store. s3.ap-northeast-1.amazonaws.com/0/382909/d7dd5a93-4a5a-1a3f-5412-d1cf83d8c2f8.png)
  8. Gehen Sie in der Navigation auf der linken Seite des Bildschirms zu PROGRAM AND DEBUG-> Generate Bitstream-> Yes-> OK.
  9. File -> Export -> Export Block Design -> OKimage.png

Überlagerung übertragen

Nachdem Sie eine Reihe von Dateien erstellt haben, kopieren Sie diese nach PYNQ-Z1 und führen Sie sie aus.

Dateivorbereitung

Kopieren Sie die folgenden zwei Dateien in den Projektordner.

Benennen Sie sie zum leichteren Verständnis in "adder.bit", "adder.hwh" und "adder.tcl" um.

Stellen Sie eine Verbindung zu PYNQ her

Geben Sie im URL-Teil des Explorers \\ pynq ein, um den internen Ordner zu manipulieren. Sowohl ID als auch Passwort sind "xilinx". image.png

Dateipositionierung

Erstellen Sie ein neues Verzeichnis "adder" in "Network / pynq / xylinx / pynq / overlay" und kopieren Sie "adder.bit", "adder.hwh" und "adder.tcl".

Versuchen Sie es mit Overlay aus Python

Vorbereitung des Jupyter

Greifen Sie auf [http: // pynq: 9090](http: // pynq: 9090) zu und melden Sie sich bei jupyter an (ID / Passwort ist xylinx). Erstellen Sie nach dem Verbinden eine neue Python3-Notiz aus "Neu" auf dem Startbildschirm und öffnen Sie sie.

Ausprobieren

Folgen Sie dann dem Offiziellen.

Zuerst lesen.

In[1]


from pynq import Overlay

overlay = Overlay('/home/xilinx/pynq/overlays/adder/adder.bit')

In den nächsten beiden wird jede Verwendung im Text angezeigt.

In[2]


overlay?

In[3]


add_ip = overlay.add_0
add_ip?

Berechnen wir "4 + 5".

In[4]


add_ip.write(0x10, 4)
add_ip.write(0x18, 5)
add_ip.read(0x20)    #Wird als 9 ausgegeben

Das ist das gleiche.

In[5]


add_ip.register_map.a = 3
add_ip.register_map.b = 4
add_ip.register_map.c

Schließlich

Es hat vorerst funktioniert. Das nächste Mal möchte ich das Array durch parallele Verarbeitung beschleunigen.

Recommended Posts

Ich habe PYNQ (2) -Overlay self-made- gestartet
Ich habe Python gestartet
Ich habe Docker gestartet
Ich habe angefangen, aber es fängt nicht an!
Ich habe die Gerätebaumüberlagerung untersucht