Je suis actuellement impliqué dans un projet universitaire visant à implémenter un processeur d'un ensemble d'instructions existant. L'idée est qu'à la fin du projet je devrais être capable de synthétiser cette conception et de l'exécuter dans un FPGA. Tout va bien jusqu'à présent, j'ai commencé à implémenter la conception dans Verilog HDL il y a quelques jours et j'ai fait fonctionner une version très simple. Maintenant, le problème: j'ai contacté certaines personnes impliquées dans la conception matérielle depuis des années et elles ont suggéré qu'avant d'aller plus loin, je devrais utiliser SystemC pour l'implémentation. Maintenant, ça m'a rendu très très confus parce que c'était ma pensée:
Verilog -> En tant que langage HDL cible spécifiquement la conception matérielle. A certains niveaux d'abstraction comme Verilog structurel et comportemental, mais c'est une forme très soignée de spécification de la RTL d'une conception. Vous pouvez certainement le synthétiser à l'aide d'un tas d'outils en fonction du FPGA que vous choisissez (dans mon cas, j'utilise les cartes Xilinx Vivado 2014 et Zynq). En revanche, Verilog n'offre pas suffisamment d'abstraction pour la vérification et c'est pourquoi vous avez des trucs comme System Verilog.
SystemC -> Il s'agit d'une bibliothèque de classes C ++ qui introduit efficacement le concept de temps en C ++ et vous permet de faire une simulation événementielle. De toute évidence, il est beaucoup plus élevé que n'importe quel HDL et les choses ici peuvent être mises en œuvre beaucoup plus rapidement. Cela en fait un très bon outil pour des choses comme la vérification et même la mise en œuvre de simulateurs afin que les gens puissent commencer à concevoir des pilotes et des choses pour une puce avant que la chose ne soit réellement fabriquée. Apparemment, il existe également un sous-ensemble de SystemC qui est synthétisable (je pense que même Xilinx Vivado peut le faire) et dans certains cas, il permet à SystemC d'être utilisé pour concevoir de très grands systèmes où un niveau d'abstraction plus élevé est pratique.
Donc, mes questions sont:
- Ces notions de quel systèmeC et Verilog (ou langages HDL si vous le souhaitez) sont correctes?
- Quand dois-je utiliser SystemC et quand Verilog?
- On me dit que même dans Verilog, l'utilisation de beaucoup de code comportemental peut être un peu problématique dans les sections critiques de l'implémentation, car vous donnez beaucoup moins de contraintes à l'outil de synthèse sur la façon de le synthétiser. Avec un niveau d'abstraction plus élevé, ne serait-ce pas un problème? c'est-à-dire que si j'utilise systemC, je pourrais me retrouver avec une conception très lente, gourmande en énergie et de grande taille ...
- La personne qui a suggéré SystemC a mentionné qu'il semble que je fais de l '"exploration architecturale" et c'est pourquoi il préférerait Verilog. Qu'est-ce que ça veut dire exactement? J'avais l'impression que l'architecture se réfère généralement au jeu d'instructions et la microarchitecture à une implémentation d'un jeu d'instructions (donc la microarchitecture est le rtl réel qui exécute les instructions). L'exploration architecturale signifie-t-elle donc qu'il pense que j'implémente un processeur pour voir dans quelle mesure un jeu d'instructions est réalisable?
- Il a dit qu'un argument pour utiliser SystemC est que c'est beaucoup plus facile car c'est un niveau d'abstraction plus élevé qu'un HDL. Il a également affirmé qu'il était plus facile d'obtenir le bon moment pour la conception. Dans quelle mesure est-ce vrai?
Une aide serait grandement appréciée, je suis un peu confus et j'ai du mal à obtenir des informations claires à ce sujet en ligne. Merci!