L'utilisation de la superposition existante semble avoir été introduite dans d'autres articles, alors sautez-la et passez au suivant.
Donc, cette fois, je vais créer ma propre superposition dans le prolongement de Dernière fois. Cette vidéo ~~ Paku ~~ Référez-vous-y et faites une superposition de c = a + b
.
La partie circuit logique de PYNQ-Z1 peut être gérée à partir d'un programme comme s'il s'agissait d'une bibliothèque (?). Pour plus de détails, accédez à Officiel.
Le téléchargement seul sera de 10 Go, et une fois terminé, il sera proche de 50 Go, vous devriez donc travailler dessus avec suffisamment de temps et de stockage. Cette fois, j'ai utilisé Webpack (version gratuite).
Ici, essayons un circuit qui ne fait que c = a + b
selon le tutoriel.
Tout d'abord, préparez un circuit qui n'ajoute que le FPGA.
Configuration du projet
, spécifiez le nom du projet comme additionneur et l'emplacement selon le cas. (** Si le japonais est inclus dans le chemin, une erreur peut survenir plus tard **)Configuration de la solution
, recherchez et sélectionnez Sélection de pièce-> xc7z020clg400-1
Terminer
pour créer un projetUne fois qu'un nouveau projet est créé, il sera mis en œuvre.
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;
}
Appuyez sur la «flèche verte» en haut à gauche de l'image ci-dessous. Si tout se passe bien, vous devriez voir un écran comme celui-ci.
Les fichiers suivants sont générés dans solution-> impl-> misc-> drivers-> add_v1_0-> src-> xadd_hw.h dans l'onglet Explorateur. Si vous regardez cela, vous pouvez voir la table de correspondance entre les variables et les adresses.
variable | adresse |
---|---|
a | 0x10 |
b | 0x18 |
c | 0x20 |
C'est à droite de la flèche verte
plus tôt![Image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382909/68a02ee2-8fda-1a21 Cliquez simplement sur -b767-839ce80ccd4b.png) et appuyez sur ʻOK`.
Configurer la superposition en utilisant l''adder 'créé précédemment
Étant donné que les informations de PYNQ-Z1 ne sont pas enregistrées dans le pack Web Vivado, téléchargez les données depuis ici. Je l'ai utilisé. Décompressez-le et copiez-le dans C: \ Xilinx \ Vivado \ 2019.2 \ data \ boards \ board_files
etc.
Créer un projet
Créer un nouveau projet Vivado
s'affiche, cliquez sur Suivant
.Nous continuerons à travailler sur Vivado.
->
Create Block Design` sur le côté gauche de l'écran et appuyez sur OK dans la fenêtre contextuelle.Run Block Automation
-> OK
Tools
sur l'écran, allez dans Setting
-> ʻIP->
Repository, appuyez sur
+, et sélectionnez / ajoutez le dossier ʻadder
que vous avez créé précédemment. en
scalar_add`. Run Connection Automation
. 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)PROGRAMME ET DÉBOGAGE
-> Générer Bitstream
-> Oui
-> ʻOK`.File
-> Export
-> Export Block Design
-> OK
Maintenant que vous avez créé un ensemble de fichiers, copiez-les sur PYNQ-Z1 et exécutez-les.
Copiez les deux fichiers suivants dans le dossier du projet.
Renommez-les en ʻadder.bit, ʻadder.hwh
et ʻadder.tcl` pour une meilleure compréhension.
Entrez \\ pynq
dans la partie URL de l'Explorateur pour falsifier le dossier interne. L'identifiant et le mot de passe sont tous deux «xilinx».
Créez un nouveau répertoire ʻadderdans
Network / pynq / xylinx / pynq / overlay et copiez ʻadder.bit
, ʻadder.hwh et ʻadder.tcl
.
Accédez à [http: // pynq: 9090](http: // pynq: 9090) et connectez-vous à jupyter (ID / mot de passe est xylinx). Après la connexion, créez une nouvelle note Python3 à partir de Nouveau
sur l'écran d'accueil et ouvrez-la.
Suivez ensuite le Officiel.
Première lecture.
In[1]
from pynq import Overlay
overlay = Overlay('/home/xilinx/pynq/overlays/adder/adder.bit')
Dans les deux suivants, chaque utilisation est affichée sous forme de texte.
In[2]
overlay?
In[3]
add_ip = overlay.add_0
add_ip?
Calculons «4 + 5».
In[4]
add_ip.write(0x10, 4)
add_ip.write(0x18, 5)
add_ip.read(0x20) #Est sortie comme 9
C'est pareil.
In[5]
add_ip.register_map.a = 3
add_ip.register_map.b = 4
add_ip.register_map.c
Cela a fonctionné pour le moment. La prochaine fois, j'aimerais faire quelque chose comme accélérer le tableau par un traitement parallèle.