Pouvez-vous interfacer un banc d'essai Modelsim avec des stimuli externes

10

Je travaille sur une équipe qui s'occupe à la fois du logiciel pilote et du développement FPGA. La simulation FPGA se fait dans Modelsim et le logiciel du pilote est écrit en C.Pour minimiser le risque d'intégration, j'aimerais pouvoir modéliser l'interaction entre les deux moitiés de notre produit avant de le mettre sur le matériel.

Je sais que Modelsim prend en charge un banc de test qui vous permet de fournir un stimulus sous la forme d'un fichier texte avec des heures et des valeurs à saisir. Je me demande si Modelsim a un mode qui vous permet de connecter un tuyau à une application externe (comme notre pilote) et d'exécuter une sorte de simulation distribuée où le logiciel peut pousser des valeurs dans le banc de test, puis observer les résultats plus tard .

L'astuce que je ne peux pas faire avec une entrée de fichier texte est que les deux moitiés du produit interagissent. J'ai besoin que le logiciel "écrive" les valeurs dans le simulateur FPGA, lise les résultats, puis écrive de nouvelles valeurs dans le FPGA qui dépendent des résultats lus. Les fichiers texte nécessitent que les entrées soient indépendantes de la sortie.

J'ai effectué des recherches à la fois sur StackExchange et sur Google, mais je n'ai pas été en mesure de proposer un ensemble de mots clés pour affiner suffisamment ma recherche soit pour identifier le comportement que je recherche, soit pour déterminer qu'il n'existe pas.

Cort Ammon
la source

Réponses:

9

Contrôle externe d'une simulation ModelSim via des canaux nommés Unix

Résumé: Dans cette thèse, nous présentons une méthode de contrôle d'une simulation ModelSim via un programme externe. La communication entre ModelSim et le programme externe est réalisée en utilisant des canaux nommés ("FIFO"), qui apparaissent comme des fichiers normaux pour chaque application. La principale différence entre l'utilisation de FIFO et des fichiers normaux pour la communication inter-processus (IPC) est qu'une application qui tente d'écrire sur une FIFO est suspendue jusqu'à ce qu'une autre application tente de lire à partir de la FIFO et vice versa. Cela améliore la fiabilité de l'IPC. Les principaux avantages de cette méthode sont 1) Étant donné que seules des opérations de fichiers génériques sont utilisées, l'application externe peut être écrite dans presque tous les langages de programmation; 2) Il donne à l'ingénieur de vérification la capacité de réutiliser des progiciels de validation des normes avec un minimum de réécriture; 3) En faisant communiquer entre eux plusieurs appareils sous test (DUT), une simulation plus précise du système final peut être créée; et 4) Les performances de la simulation globale peuvent être facilement augmentées sur un cluster d'images système unique (SSI) ou un ordinateur multiprocesseur même si le moteur de simulation de ModelSim n'est pas multithread. En raison de son implémentation d'entrée / sortie de fichier (E / S) pour le VHDL comportemental, ModelSim ne peut pas lire ou écrire ces FIFO directement. Une solution de contournement pour cette limitation est illustrée à l'aide de l'interface en langue étrangère (FLI) de ModelSim. Cet article montre également un exemple de travail de cette méthode utilisée dans la vérification de la prochaine génération de routines à virgule flottante en VHDL. Plus précisément, le progiciel open-source IEEE Compliance Checker, qui est écrit en C ++,

Et le problème avec les FIFO nécessitant une interface de programmation étrangère est que les E / S de fichiers VHDL ne peuvent pas gérer correctement le blocage tant que les données ne sont pas disponibles.

Malheureusement, la thèse n'est pas disponible sur le web.

Interface de langue étrangère Model Sim ® version 5.6d , PDF 3,4 Mo.

Utilisation de l'interface en langue étrangère ModelSim pour la co-simulation c-VHDL et le contrôle du simulateur sur la plate-forme Linux x86 Andre Pool - [email protected] - Version 1.5 - créé en novembre 2012, dernière mise à jour en septembre 2013 , PDF, 320 Ko (et ne mentionne jamais les FIFO) .

Utilisation de l'interface en langue étrangère ModelSim pour la co-simulation c-VHDL et pour le contrôle du simulateur sur la plate-forme Linux x86 (référentiel de code github correspondant).

Il y a un peu plus open source, en utilisant les appels de fonction étrangers VHPI dans ghdl: vhdl / src / sim / ghdlex_mein sur master · texane / vhdl · GitHub .

Et ce qui ressemble à une mise à jour de Martin Strubel sur la liste GHDL_discuss: http://www.section5.ch/downloads/ghdlex-0.051.tgz indiquant une date pour fifo.c du 14 avril 2014.

FLI, par définition, vous enfermerait dans Modelsim, pas sûr de l'état de leur support VHPI (qui fait partie de IEEE Std 1076-2008, le VHDL LRM).

L'utilisation d'un socket ou d'un fichier FIFO permet au processus logiciel et matériel de s'exécuter à des taux différents, en fournissant une mise en mémoire tampon des taux. Ce n'est pas toujours nécessaire si votre système logiciel est beaucoup plus rapide que la simulation matérielle (et c'est généralement le cas).

Il y a un effort pour fournir la fonctionnalité UNIX (POSIX) à VHDL, voir les packages VHDL du domaine public , qui contient un pointeur vers un document précédent SNUG San Jose 2002 1 Fonctions C / UNIX pour bancs d'essai VHDL Fonctions C / UNIX pour bancs d'essai VHDL avec une diapositive ensemble avec des notes supplémentaires sur les tuyaux Unix & rsh . Cela montre comment garder les canaux nommés ouverts. Tout le code VHDL peut également être téléchargé. Je suis d'avis que cela conduirait à la manière la plus simple d'atteindre votre objectif.

Existe-t-il quelque chose de natif de Modelsim qui vous permet de vous connecter à un tuyau? Probablement pas, d'autant plus sous Windows. Peut-on le faire? Oui, mais le chemin n'est pas pour les timides. Vous pouvez bloquer une extrémité ou l'autre ou éventuellement les deux en attendant la disponibilité des données.

Une interface de programmation étrangère vous permet théoriquement de générer un processus enfant pour l'une ou l'autre extrémité du «tuyau», ce qui signifie également que vous pouvez utiliser un modèle de mémoire partagée pour communiquer entre les deux extrémités.

user8352
la source
Merci pour la réponse merveilleusement recherchée! "Interface en langue étrangère" était exactement l'expression dont j'avais besoin pour obtenir la documentation de référence dont j'avais besoin, je ne l'aurais jamais deviné! L'intégration précoce ici, je viens!
Cort Ammon
5

Vous voudrez peut-être regarder Cocotb . Il s'agit d'une bibliothèque de co-simulation basée sur Python, l'un des objectifs de conception était de permettre la méthodologie que vous décrivez, simulant facilement un logiciel de production non modifié et RTL.

Il y a un exemple dans le référentiel d'exécution d'une pingcommande non modifiée contre une simulation et un tutoriel parcourant le code.

Pour les pilotes de l'espace utilisateur, les utilitaires de configuration, etc., vous avez deux options pour exécuter votre logiciel sans modification :

  1. Si vos accès à l'appareil se résument à quelques fonctions (par exemple, un appel de lecture et d'écriture), vous pouvez établir un lien avec une bibliothèque de simulation qui se bloque pendant l'exécution de l'accès contre la simulation. Cela fonctionne très bien pour la configuration.

  2. Si votre logiciel utilise des E / S mappées en mémoire et des pointeurs de déréférences pour accéder à l'appareil, les choses deviennent un peu plus complexes - vous devez créer une zone de mémoire partagée avec des bits de protection définis et des accès d'interruption .

Si vous utilisez la mise en réseau, des interfaces virtuelles comme TUN / TAP peuvent être utilisées (voir le tutoriel mentionné ci-dessus), je pense qu'il peut y avoir des options similaires pour le transfert USB ou d'autres interfaces hôtes courantes.

Cocotb fonctionne avec une variété de simulateurs et de conceptions VHDL (via VHPI) ou Verilog / SystemVerilog (via VPI). Malheureusement, Modelsim n'implémente pas VHPI, donc en tant qu'utilisateur VHDL, vous êtes coincé avec FLI, qui n'est pas aussi utile qu'une interface. Vous pouvez gémir chez Mentor pour essayer de les persuader de mettre en œuvre une interface standard de l'industrie, ou vous pouvez évaluer un autre simulateur qui prend en charge le VHPI.

Malheureusement, il semble que les fournisseurs d'outils en général ne soient pas particulièrement intéressés par le marché VHDL, à en juger par le temps qu'il leur faut pour implémenter toute fonctionnalité liée à VHDL ...

Avertissement: je suis développeur Cocotb.

Chiggs
la source