Les bibliothèques open source existent-elles pour VHDL comme elles le font pour C ++ ou python?


11

Lorsque j'aborde un problème en C ++ ou en python, il existe de nombreuses bibliothèques qui font le gros du travail de mon code. Je pense à GNU GSL , BOOST ou FFTW pour C ++, et NumPy ou SciPy pour python. À bien des égards, le fait que ces ressources existent rendent le codage dans ces langues respectives, car les bibliothèques vous empêchent d'avoir à réécrire toutes les choses de bas niveau à partir de zéro.

Les bibliothèques standard IEEE semblent couvrir uniquement les bases, telles que les types de données (en quelque sorte similaires aux bibliothèques standard C).

Il semble qu'en VHDL, vous pouvez acheter / trouver des "noyaux IP" qui résoudront un problème, plutôt que d'utiliser une bibliothèque open source. En python, si je veux parler à un périphérique série, je viens import serialet j'ai pratiquement terminé. Dans VHDL, je serais coincé à écrire un protocole série à partir de zéro, ou je devrais parcourir les différents référentiels jusqu'à ce que je trouve quelqu'un qui a produit quelque chose de ce genre de travaux. Je patcherais alors des morceaux de code dans mon projet, plutôt que d'inclure simplement quelque chose et d'appeler cela. De la même manière, si je veux effectuer une FFT, je peux trouver des exemples de FFT en VHDL via google, mais il n'y a pas quelque chose de simple comme FFTW que je puisse trouver.

Existe-t-il des bibliothèques open source complètes que je peux importer dans mes projets? Pourquoi tout le monde semble-t-il utiliser son propre code pour autant de choses identiques?


2
Avez-vous recherché opencores.org?
MarkU

3
Pour les bibliothèques de vérification VHDL, voir osvvm.org
Jim Lewis

Opencores, vous pouvez également acheter des bibliothèques de diverses sources. Vous passerez du temps avec la plupart des cœurs d'opencores car la plupart ne sont pas bien documentés.
Voltage Spike

Réponses:


14

Je suis développeur et mainteneur à « The PoC Library ». Nous essayons de fournir une telle bibliothèque composée de packages (collection de nouveaux types et fonctions) et de modules. Il est livré avec des fifos, des arithmétiques, des composants d'horloge croisée, des composants d'E / S à faible vitesse et une pile Ethernet / IP / UDP (prochaine version).

Comme décrit @crgrace, il est assez compliqué de concevoir des modules, qui:

  • travailler sur de nombreuses plateformes
  • prendre en charge la plupart des chaînes d'outils des fournisseurs
  • ajouter pas / moins de frais généraux

Notre bibliothèque possède un mécanisme de configuration interne (PoC.config) pour distinguer les fournisseurs, les appareils et même les sous-familles d'appareils pour choisir le bon code ou une implémentation optimisée. Il fait également la distinction entre le code de synthèse et le code de simulation à certains moments.

Par exemple, PoC.fifo_cc_gotun FIFO avec une interface «horloge commune» (cc) et des signaux put / got pour contrôler le fifo. Le fifo est configurable en largeurs, profondeurs, bits d'état de remplissage et type d'implémentation. Il est possible de choisir un type d'implémentation RAM basée sur LUT ou On-Chip-RAM (ocram). Si ce fifo est synthétisé avec l'option ocram pour Altera, il utilise altsyncram; si Xilinx est choisi, il utilise une description générique BlockRAM et implémente l'arithmétique du pointeur par instanciation explicite de la chaîne (Xilinx XST ne trouve pas la solution optimale, donc c'est fait manuellement).

Il existe 2 autres types de fifo avec une "horloge dépendante" (dc) et une interface d'horloge indépendante (ic). Donc, s'il est nécessaire de passer d'un fifo normal à un fifo à horloge croisée (PoC.fifo_ic_got), changez le nom de l'entité et ajoutez une horloge et réinitialisez le deuxième domaine d'horloge, c'est tout.

Je pense que cela prouve qu'il est possible d'écrire des modules communs, qui fonctionnent sur plusieurs plateformes et compilent dans différents outils (Spartan-> Virtex, Cyclone -> Stratix; ISE, Vivado, Quartus).

Outre PoC, il existe d'autres bibliothèques open source:


Les « Discover libres et Open Source Silicon » ( Fossi projets) sur GitHub propose une base de données explorable de tous les projets GitHub qui utilisent principalement , , , ou tout autre importante langage de description du matériel ( ).

Voir également:


+1 pour montrer ce que vous avez fait et aussi ce que d'autres ont fait. Bonne longue liste.
Monsieur Mystère

3

Les bibliothèques open source comme vous le décrivez ne seraient pas aussi utiles pour VHDL ou Verilog que pour un langage de programmation à usage général. C'est parce que COMMENT vous implémentez une fonction donnée peut beaucoup en fonction de ce que vous essayez de faire. Code qui est bon et FPGA n'est probablement pas si bon pour un ASIC et vice versa.

De plus, puisque nous décrivons du matériel, une fonction qui fait une FFT nécessiterait des spécificités telles que la largeur de mot et l'horloge et une stratégie de réinitialisation qui lieraient vos mains et contraindraient l'ensemble de votre conception. Si vous rendiez la fonction très flexible, cela aurait d'énormes frais généraux.

Enfin, regardez la taille de votre exécutable lorsque vous incluez beaucoup de bibliothèques en C, par exemple. Il y a une tonne de ballonnement là-bas. Cela n'a pas d'importance pour le développement de logiciels (la plupart du temps) mais compte beaucoup pour le développement FPGA et en particulier ASIC. Cela n'a aucun sens de synthétiser un tas de frais généraux dont vous n'avez pas besoin.

Donc, l'essentiel est qu'il n'y a pas de telles bibliothèques, et votre approche actuelle est solide.


Les générateurs de base alternatifs (IP) présentent également les risques Scylla et Chabydris de blocage des fournisseurs et de ballonnement résultant. Les capacités FPGA et ASIC ont augmenté suffisamment pour prendre en charge le ballonnement, le problème puis le coût et les tests, aidés par la standardisation du ballonnement (par exemple AMBA AXI4). Le compromis entre Time To Market et «frais généraux dont vous n'avez pas besoin» est déjà fait par des industries entières. Conception de systèmes utilisant des blocs de construction au lieu de la conception matérielle, ce dernier étant le bailliage de VHDL.
user8352

Votre troisième paragraphe ignore assez le fonctionnement des compilateurs et des outils de synthèse - les outils devraient éliminer les éléments non nécessaires et les résultats non utilisés, probablement même plus dans un cadre logique numérique que dans une bibliothèque de langage de haut niveau, où il peut y avoir des éléments locaux. les variables et les allocations de mémoire qui sont au-dessus de l'abstraction de la bibliothèque, surtout si elle est liée dynamiquement.
Chris Stratton

2

VHDL et Verilog sont des langages descriptifs et décrivent les blocs matériels. Un pilote série en C ++ peut se traduire par une IP série en VHDL / Verilog.

opencores.org est la plus grande base de données open source à ce jour.

Pour faciliter le processus de recherche, de téléchargement et de navigation dans le code (via Github), vous pouvez utiliser cette interface moderne:

http://freerangefactory.org/cores.html

Si, par exemple, vous recherchez une série, vous pouvez vous retrouver ici:

http://freerangefactory.org/cores/communication_controller/serial_uart_2/index.html

et passer directement au code dans GitHub. Là, vous verrez que vous pouvez assez facilement instancier le module série et y connecter votre propre circuit et commencer à envoyer et recevoir des données. C'est aussi simple que des bibliothèques série en C ++.

J'espère que ça aide.


0

Le premier site auquel je vais pour ce genre de chose (comme mentionné @MarkU) est opencores.org.

Par exemple, il existe un moteur FFT paramétré , écrit en VHDL, publié sous la licence BSD. Le statut est "beta".


ce n'est pas ce que le PO demande. Il ou elle sait comment consulter opencores.org Un moteur FFT paramétré est bien loin d'importer une bibliothèque mathématique standard en Python et de l'utiliser. Il n'y a pas de "middleware" dans le matériel à cause de la surcharge.
crgrace

0

Pour la vérification, il existe la méthodologie de vérification VHDL Open Source (OSVVM).
OSVVM est une méthodologie de vérification VHDL complète et avancée qui simplifie la mise en œuvre de la couverture fonctionnelle, aléatoire aléatoire et Intelligent Coverage Randomization (une méthodologie de banc d'essai intelligent). Il facilite également la mise en œuvre de fichiers de transcription partagés, le rapport d'erreurs, les journaux (impression conditionnelle) et la modélisation de la mémoire.

Le site Web et le blog d'OSVVM se trouvent à http://osvvm.org . Les packages sont également disponibles sur github à: https://github.com/JimLewis/OSVVM

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.