Comment partager et enregistrer les définitions champ de bits entre un pilote de périphérique et le FPGA il contrôle

StackOverflow https://stackoverflow.com/questions/1585751

Question

Y a-t-il des bons, des outils logiciels existants disponibles pour aider à générer des fichiers d'en-tête C avec #defines appropriés pour les compensations de registre ainsi que les définitions de bits de VHDL? Si de tels outils existent, quelles sont les restrictions à qu'ils mettent sur le VHDL et comment sont les choses qui doivent être exportées désignés?

Jusqu'à présent, j'ai trouvé ces outils, mais ils ne sont pas exactement ce que je cherche:

Sur la base de ces outils, je suis également intéressé si le flux de travail approprié est de générer à la fois C et VHDL plutôt que d'essayer d'aller directement à partir de VHDL (peut-être avec des balises supplémentaires dans les commentaires) à C.

Était-ce utile?

La solution

Je pense que si ce dernier était vous embêter vous envoie dans la bonne direction. Et je suis d'accord avec RedGlyph dans que vous devriez envisager de changer votre flux de travail un peu.

Avez-vous pensé à avoir un « document maître » pour vos informations de registre de contrôle et Generated tout automatiquement de cette - RTL, code de banc d'essai, les en-têtes logiciel pilote et documentation

J'ai travaillé sur des projets où les informations de contrôle a été maintenu dans une feuille de calcul maître et tout ce que nous avions besoin se dégager de ce. D'une famille de puces, j'avais écrit quelques scripts Python pour générer ce genre de choses à partir de fichiers CSV exportés à partir de la feuille de calcul. Sur un autre projet, la feuille de calcul contenant des macros pour générer les fichiers RTL, etc que nous avions besoin.

L'écriture en interne des scripts est bien beau que vous avez un contrôle total sur eux et savoir comment ils fonctionnent en détail. Mais rappelez-vous que vous devez passer du temps soutenir ces scripts et les mettre à jour à faire de nouvelles choses. Et ce qui se passerait si celui qui a écrit ces scripts ont décidé d'aller chercher un nouvel emploi - ce que quelqu'un d'autre être assez familier avec les scripts pour les modifier? Nous envisageons l'achat dans un outil 3ème partie pour les raisons mentionnées ci-dessus.

J'ai aussi travaillé sur des projets étaient la documentation et les fichiers en-tête est de retour de la RTL portés -C'était un cauchemar. Documentation généralement en retard sur la conception et le contrôle souvent les champs seraient « portés disparus ». Je préférerais ne pas être impliqué à nouveau dans un tel projet;)

Autres conseils

Vous pouvez consulter doxygen , il prend en charge la langue VHDL et en utilisant des fichiers intermédiaires vous pouvez être en mesure d'extraire les informations plus ou moins facilement. Un sous-produit serait votre documentation de code RTL.

Une autre option est de construire un analyseur C à partir des définitions Yacc / Lex, vous pouvez trouver plusieurs les ici . A partir de là, vous pouvez analyser le VHDL, extraire les informations (vous devrez déterminer comment récupérer la définition de vos registres) et produire un fichier d'en-tête C. Il est probablement assez compliqué.

Mais si je vous, je voudrais vraiment procéder différemment et définissez les décalages de registre et les champs dans un fichier séparé (par exemple en XML), et d'écrire un petit script pour générer les en-têtes C et un ensemble de VHDL, cela vous faire économiser beaucoup de temps et serait plus robuste d'un point de vue de l'écoulement.

Cela permettrait également de contribuer à la construction d'une documentation.

Vous pouvez bien sûr automatiser le processus avec un makefile / ou dans un script qui prépare la base de données avant la simulation / synthèse.

Je suis d'accord avec Marty, la création en interne des scripts pour faire ce genre de chose est amusant, mais peut être problématique à long terme.

Nous avons créé un outil appelé IDesignSpec qui est mis en œuvre en tant que plug-in pour des éditeurs de documents qui vous permettent de spécifier des registres dans un document et générer en-tête C, VHDL, Verilog, OVM, VMM, IP-XACT, HTML, XML, SystemRDL , PDF, etc. de celui-ci.

Vous pouvez générer des sorties personnalisées à l'aide de l'API TCL. Il peut lire dans différents formats d'entrée et XML, IP-XACT, SystemRDL, etc.

L'avantage de cette approche est que votre vous en avez un cahier des charges et tout Conserve automatiquement synchronisés.

éditeurs sont actuellement pris en charge: MS Word 2003 et 2007, OpenOffice, StarOffice et FrameMaker

.

Vous pouvez obtenir plus de détails sur http://www.agnisys.com

Voici la liste complète des solutions disponibles:

Nom de l'entreprise: outils commerciaux (solution fournie)

  1. Agnisys: IDesignSpec (Plugin pour Word / Excel / OpenOffice, et une interface de ligne de commande sous Linux et Windows)
  2. Atrenta: 1Team-Genèse Registres (application de bureau) -> Acquis par Synopsys. Outil non disponible.
  3. Duolog: BitWise (application Eclipse) -> Acquis par ARM, l'outil est toujours disponible
  4. .
  5. PDTI: SpectaReg (application Web) -> Outil non plus disponible
  6. .
  7. Semifore: CSRCompiler (interface de ligne de commande)

Outils gratuits / OpenSource

  1. Veripool: VRegs
  2. ParadigmWorks: Spec2Reg

Notre groupe de conception utilise SystemRDL pour capturer les définitions de registre pour notre système sur puce programmable. Nous utilisons Blueprint Denali avec des scripts personnalisés pour les différentes cibles -. Générer la carte de registre, documentation PDF, de vérification, les fichiers d'en-tête C, etc

Nous ne l'utilisons pour générer encore la source RTL.

http://www.spiritconsortium.org/releases/SystemRDL
http://www.google.com/search?q=SystemRDL

La réponse pourrait venir un peu en retard, mais nous utilisons la bibliothèque netpp libre et quelques feuilles de style XSL modifiées pour produire de la documentation, VHDL et la source C d'une source XML. Il y a aussi une extension de simulateur VHDL qui permet VHDL et les bibliothèques d'échanger des données C pour créer un réseau capable « FPGA virtuelle ». Il est appelé ghdlex, je ne me souviens pas exactement où il est, mais vous trouverez quelque part sur le http://section5.ch site dans la zone de téléchargement de netpp. Il est un peu difficile à utiliser, mais bien, il est gratuit ..

La véritable source de l'information partagée est votre conception originale, donc j'entrer dans la conception originale sous une forme qui est facile à traiter. Voici quelques idées ...


  1. Utilisez YAML. (Ou, en soupirant, XML, ou même une connexion DSL très simple de votre conception.) Définir les données d'origine. Écrire des scripts pour vider comme VHDL et C. Tous les langages de script prennent en charge YAML et il est conçu pour être analysé avec des outils shell ainsi. Vous pouvez même utiliser VHDL simplifiée ou C, et écrire un script pour transformer ce via une transformation de texte simple dans le C ou VHDL correspondant.

  2. Ne partez pas dans le préprocesseur C . Vous pouvez écrire un ensemble de macro appelle qui spécifient layouts vous inscrire. Vous pourriez alors avoir un #if ou peut-être deux fichiers distincts qui définissent .h deux versions différentes de vos macros de définition, celle qui se développe en VHDL et qui étend ces mêmes définitions en C.

Spectareg vous permet de spécifier les registres en un seul endroit et créer plusieurs sorties pour différents environnements (par exemple. VHDL, C, Verilog)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top