J'ai actuellement une interface graphique dans PyqT5 (le client) et a fait un serveur à l'aide de Code C. L'objectif est d'envoyer une entrée de l'interface graphique au serveur, puis du serveur interface avec le FPGA pour produire un signal que je vais lire à partir d'un oscilloscope (j'utilise un pitaya rouge comme mon tableau). J'ai actuellement effectué l'interface graphique et je suis capable d'envoyer des données au serveur qu'il reçoit avec succès (alors que le serveur s'exécutant sur le Rouge Pitaya), cependant, je ne suis pas sûr sur l'utilisation de Vivado 2019.1 pour envoyer les données reçues par le serveur à Une entrée spécifique que j'ai créée dans mon diagramme de bloc. Je suppose p>
Je dois affecter la broche d'entrée avec l'un des ports Rouge Pitaya, mais ne pas savoir où / comment faire cela dans Vivado ou sur le serveur C. P>
Fondamentalement, quelqu'un peut-il me dire dans la direction de savoir comment interfacer mon code de serveur C avec l'entrée de mon diagramme de bloc à Vivado. p>
My Red Pitaya Board est connecté à mon PC via Ethernet et possède sa propre adresse IP que j'utilise pour exécuter son serveur Linux dans Putty. J'exécute le serveur dans la coquille de mastic à l'aide de GCC. P>
Edit: Désolé pour l'ambiguïté. Ce que j'essaie de faire est de charger le fichier .bit généré par Vivado à mon Rouge Pitaya, puis exécutez mon serveur (TCP / IP) dans la coque Rouge Pitaya Linux (à l'aide du mastic). Le point d'étant, je souhaite pouvoir envoyer des données que je saisi de l'interface graphique au serveur (qui s'exécutera sur le serveur Linux de Red Pitaya), puis que les données sont envoyées à une entrée effectuée dans mon projet Vivado qui serait Soyez sur le fichier .bit (l'entrée) chargée au tableau. p>
Si ce que je dis que je dis est difficile ou je m'approche cela dans le mauvais sens s'il vous plaît laissez-moi savoir! p>
3 Réponses :
Ici, je suppose que la partie armée de la FPGA SOC (votre conseil d'administration a le plus probablement xilinx zynq 7010 SOC ou quelque chose de similaire) accessible maintenant (en utilisant la connexion Ethernet). P>
Premièrement, vous devez créer un noyau IP personnalisé pour votre bloc pour rendre votre bloc personnalisé conforme au protocole AXI4 (un outil de Vivado peut générer automatiquement le code d'interface, vous devez simplement instancier correctement votre module et faire connexions portuaires appropriées). Utilisation de l'outil de conception de bloc (en Vivado), vous devez connecter correctement votre adresse IP personnalisée au noyau IP du processeur (Connectez Axi Master du processeur à l'esclave AXI de votre noyau IP personnalisé), l'outil vous aide à faire les connexions appropriées. . p>
Un fichier d'en-tête pour votre conception personnalisée peut être généré automatiquement (pour adresser correctement). Vous pouvez utiliser l'en-tête généré pour écrire un code C qui obtient des instructions provenant du serveur, convertit à ceux que votre IP personnalisée peut comprendre et les envoie à corriger l'adresse pour pouvoir contrôler correctement votre bloc personnalisé. p>
edit 1: strong> Ces tutoriels YouTube pourraient vous être utiles: 1 , 2 , 3 p>
Ma question est de savoir comment écrire les données sur le serveur sur cette entrée 32 bits sur la carte. p> blockQuote>
Un grand problème de réponse à votre question est d'obtenir notre nomenclature (ce que nous appelons les choses dont nous parlons) est triée. P>
Normalement lorsque nous parlons d'une "entrée" et "code FPGA" qui signifierait un port d'entrée sur le FPGA. Entrée implique qu'il faut des données d'une source externe. Votre CPU ne peut pas envoyer de données à cette entrée. p>
Peut-être que vous vous référez à un «bloc» sur le FPGA qui effectue une fonction et accessible de la CPU. (Comme ce type de blocage a un port de lecture / écriture qui est connecté au bus de la CPU.) Qui s'appelle normalement un «périphérique». P>
La façon dont vous posez votre question me fait suspecter que quelqu'un d'autre a fait un tel périphérique. Ou vous êtes même une étape plus loin et vous avez toujours besoin de faire votre périphérique. Peut-être que vous pouvez montrer une partie du diagramme que vous parlez. p>
Si vous avez déjà un périphérique, vous pouvez ouvrir l'onglet "Adresse" qui est affiché à côté de l'onglet qui affiche votre "diagramme". Vous pouvez trouver une liste de tous les périphériques et l'adresse du processeur dont vous avez besoin pour y accéder. P>
Outre l'adresse, vous devez savoir comment fonctionne le périphérique. S'il y a un registre interne et ce qu'ils font. En bref: Cependant, le périphérique aurait dû faire un manuel pour cela. p>
Si vous n'avez même pas de périphérique, mais seulement un port d'entrée (flottant, non connecté) Nous / i, nous ne pouvons pas vous aider, car il faudrait des semaines pour vous enseigner HDL et comment faire un périphérique avec un bus AXI. p>
OK compris. J'étais sous la mauvaise idée qu'il y aurait un moyen de diffuser des données à cette contribution. Quant au périphérique, je n'ai pas encore fait / décidé sur une préexistante, mais je comprends d'où vous venez de la lecture / en écrivant. Après avoir créé un, je cherchais des fonctions telles que MMAP () en C pour accéder à la périphérie et écrivez les données, serait-ce sur la bonne voie? Merci pour votre guidage.
Je n'ai jamais utilisé Linux sur un FPGA. RTOS est ce que nous utilisons et les adresses périphériques peuvent être utilisées directement.
Le moyen le plus simple d'envoyer des données de la ZYNQ PS (système de traitement, Linux) à la ZYNQ Pl (logique programmable, FPGA) consiste à utiliser un axi GPIO. P>
Dans votre conception Vivado, vous devez: P>
Dans votre code C / C ++, vous devez: P>
Exemple: P>
J'ai récemment construit un outil de conception graphique pour la programmation de la FPGA de votre redpitaya ( DSPSandbox-Canvas ), il inclut Axi GPIOS et C code C pour leur accéder via le PS. P>
Vous pouvez télécharger le code Soure du projet ici . Si vous ouvrez le projet Vivado /zynq_7010/zynq_pl/canvas.xpr em>, vous verrez que la communication à la ZYNQ PS est effectuée via les GPIOS AXI mentionnés ci-dessus. Pour accéder à ces GPIOS au sein de Linux, j'utilise /zynq_7010/zynq_ps/calstatantstloader.c em>, qui effectue le mappage de mémoire, lit un ensemble de fichiers .txt et configure les GPIOS en conséquence. Je suis sûr que vous pouvez adapter ce code pour la placer dans votre serveur TCP. P>
"Comment interfacer mon code serveur C avec l'entrée de mon diagramme de bloc à Vivado." I> J'ai du mal à comprendre ce que vous essayez de faire. Vous ne pouvez pas connecter un flux de données à un diagramme dans un outil de conception FPGA. Voulez-vous vous connecter au FPGA actuel ou voulez-vous faire une co-simulation de matériel / logiciel ou quelque chose de totalement d'autre.
Désolé pour l'ambiguïté. Ce que j'essaie de faire est de charger le fichier .bit généré par Vivado à mon Rouge Pitaya, puis exécutez mon serveur (TCP / IP) dans la coque Rouge Pitaya Linux (à l'aide du mastic). Le point d'étant, je souhaite pouvoir envoyer des données que je saisi de l'interface graphique au serveur (qui s'exécutera sur le serveur Linux de Red Pitaya), puis que les données sont envoyées à une entrée effectuée dans mon projet Vivado qui serait être sur le fichier .bit qui a été chargé au tableau.
J'essaie toujours de comprendre où vous êtes coincé: Avez-vous été capable d'exécuter votre code de serveur sur la carte Rouge Pitaya et de vous connecter? Ce serait la première étape. La deuxième étape consisterait à rendre le code sur la carte Rouge Pitaya écrire à votre "entrée" (qui est également très vaguement appelée.)
J'ai été en mesure d'exécuter le code du serveur sur le tableau et de vous connecter. Je suis coincé à l'étape 2, comment prendre la broche d'entrée de 32 bits que j'ai créée dans mon projet Vivado (qui serait chargée sur mon conseil) et carapez-la que dans cette partie des données entrantes du serveur. Ma question est de savoir comment écrire les données sur le serveur sur cette entrée 32 bits sur la carte. Merci!