SystemC vs HDLs

9

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:

  1. Ces notions de quel systèmeC et Verilog (ou langages HDL si vous le souhaitez) sont correctes?
  2. Quand dois-je utiliser SystemC et quand Verilog?
  3. 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 ...
  4. 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?
  5. 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!

Andrés AG
la source
Salut, puis-je demander de quel cours universitaire il s'agissait?
Réflexion
Salut, j'ai étudié l'informatique. À proprement parler, cela ne fait pas partie du cours standard, j'ai choisi de construire un processeur basé sur le Transputer pour ma thèse de base.
Andrés AG

Réponses:

3

Votre ami a mal compris ce que vous faites ou envisageait SystemC comme une étape préliminaire. Un HDL est le seul choix dans tous les cas, et je vous suggère d'utiliser SystemVerilog synthétisable qui est assez puissant pour faire beaucoup d'explorations en étant essentiellement le même que Verilog pour tout le reste.

  1. Partiellement. Vous avez fait la distinction entre Verilog en tant que HDL et SystemVerilog en tant que langage de vérification, et avez déclaré que SystemC a une abstraction plus élevée mais également un sous-ensemble synthétisable. Il y a deux erreurs ici. Premièrement, SystemVerilog est également un HDL avec un sous-ensemble entièrement synthétisable qui pourrait être repris comme un Verilog avec des correctifs évidents (par exemple un seul logictype pour les fils) et de nombreux mécanismes d'abstraction synthétisables (par exemple, les interfaces). Il est pris en charge par de nombreux outils dont Vivado. SystemC , d'autre part, n'est pasdirectement synthétisable (pas même un sous-ensemble), il est destiné à la modélisation et à l'exploration architecturale de niveau supérieur, bien que certains sous-ensembles puissent être alimentés dans un outil de synthèse de haut niveau tel que Vivado HLS qui le traduit ensuite en Verilog synthétisable (bien que non lisible par l'homme). .

  2. Verilog et le sous-ensemble synthétisable de SystemVerilog sont des langages pour la conception de matériel, généralement utilisés pour décrire le matériel au niveau du transfert de registre, c'est-à-dire comme un ensemble de blocs comme les registres, les fonctions combinatoires, les machines à états finis, etc. Verilog-2001 peut également décrire de manière appropriée hw en tant que netlist au niveau de la porte, tandis que SV peut également être utilisé à un niveau d'abstraction beaucoup plus élevé, d'où ses capacités de vérification. D'un autre côté, SystemC est approprié pour la modélisation de haut niveau de systèmes dans lesquels des blocs entiers ne sont décrits que de manière comportementale de haut niveau. Il est également très puissant pour l'exploration architecturale, c'est-à-dire la variation des paramètres et des caractéristiques d'une architecture et l'évaluation des changements dans les performances globales.

  3. Cela n'est vrai que si vous essayez de décrire les choses d'une manière non RTL tout en développant un modèle RTL. Par exemple, la bonne façon de décrire un bloc effectuant une multiplication-accumulation répétitive est une machine à états finis pilotant un multiplicateur combinatoire, un additionneur combinatoire et un registre - si par comportement, vous vouliez décrire cela comme dans un logiciel (une boucle for), puis oui, le code comportemental ne fonctionnera pas. Si vous vouliez décrire chacun des blocs que j'ai décrits (mult, add, reg et FSM) viaalwaysblocs, ce qui est parfaitement bien et fonctionnera dans une netlist réalisant exactement ce que vous avez spécifié avec d'excellents résultats (souvent mieux qu'une approche extrêmement structurelle qui limite la capacité de l'outil de synthèse à optimiser la logique). En fait, la synthèse de haut niveau de SystemC n'aboutira souvent à de bons résultats que si vous vous en tenez à des schémas très similaires, effaçant efficacement tout avantage à utiliser un langage de niveau supérieur. Dans tous les cas, SystemC est un mauvais choix pour implémenter un processeur.

  4. L'architecture est un terme très large qui ne se limite pas à l'ISA, en fait, dans les processeurs modernes, la conception de l'ISA n'est qu'une petite pièce du puzzle. Dans le contexte de la conception d'un système, l'architecture signifie généralement l'ensemble des choix au niveau du système (par exemple, le DMA peut-il être contrôlé par n'importe quel cœur ou un seul spécial? Le cache L1 est-il entièrement ou défini-il associatif? Avez-vous un cache du tout, ou gérer la mémoire en SW?), y compris l'ISA et aussi la micro architecture du processeur. Je pense que ce que votre ami voulait dire, c'est que vous explorez diverses configurations de votre processeur, ce qui est en fait une exploration architecturale (ou une micro-exploration architecturale si vous préférez). Cependant, il a peut-être manqué le fait que vous allez l'implémenter sur un FPGA, ce qui rend l'option SystemC absurde.

  5. C'est faux. Si vous concevez un accélérateur très simple, tel qu'un filtre de streaming, cela pourrait être vrai parce que les outils HLS permettent d'insérer facilement des étapes de pipeline, alors que vous devriez le faire manuellement dans RTL (ou utiliser le resynchronisation du chemin de données, mais je pense que ce n'est pas le cas possible à Vivado). Dans tous les autres cas, et en particulier dans un objet hautement complexe et structuré tel qu'un processeur, HLS se traduira par un Verilog gonflé, non débogable et souvent tout simplement erroné qui devra ensuite être synthétisé - les outils ne sont tout simplement pas conçus pour ce travail.

Francesco Conti
la source
Merci pour l'aide. J'ai déjà commencé le projet avec Verilog, mais j'ai encore beaucoup appris de votre réponse!
Andrés AG du
3

Vous êtes à l'université et étudiez (vraisemblablement) pour devenir ingénieur. En tant qu'ingénieur, vous devez comprendre comment les choses fonctionnent à un bas niveau. Pour ce faire, vous devez retirer les couches d'abstraction et non les ajouter.

Pour cette raison, mon conseil est que vous n'utilisez pas SystemC pour ce projet. Vous pouvez finir par l'utiliser dans votre carrière professionnelle, mais c'est pour l'avenir.

Si vous choisissez de l'utiliser de toute façon, vous devez d'abord en parler à votre professeur. Quand j'ai fait une tâche similaire à l'université, on nous a explicitement dit de ne pas utiliser SystemC pour la raison que j'ai décrite ci-dessus.

markt
la source
0

Soyons honnêtes, c'est toute la programmation. Ce que vous pouvez faire dans SystemC, vous pouvez également programmer en VHDL ou Verilog. C'est juste une question de support d'outils. Il ne prend pas SystemC ou SystemVerilog.

Si les fournisseurs sont la solution évidente pour convertir les concepteurs RTL en programmation système, ils ont simplement besoin de prendre en charge le langage approprié pour la conception FPGA. Selon l'enquête Wilson de Mentor 2012, le langage des FPGA est le VHDL. Voir http://blogs.mentor.com/verificationhorizons/blog/2013/08/05/part-8-the-2012-wilson-research-group-functional-verification-study/

Jim Lewis
la source
0

SystemC est utilisé pour les conceptions complexes. Par exemple pour spécifier quelque chose au niveau architectural. L'avantage étant, moins de lignes de code que les conceptions Verilog, un temps de simulation plus rapide, des modèles précis. Ne croyez pas la personne disant que SystemC n'est "pas" synthétisable. Bien sûr que oui. Pour vous donner une idée, dans Verilog nous avons un niveau d'abstraction, vous pouvez modéliser avec le niveau de commutateur / niveau comportemental. Le choix est fait en fonction de la complexité de la conception.

Une manière plus familière de décrire le matériel utilise Verilog, dont la synthèse est prise en charge dans de nombreux outils EDA.

Généralement pour les conceptions plus grandes, les modèles SystemC et banc d'essai sont conçus par le concepteur d'architecture. Ces modèles ont ensuite été remis au concepteur électronique pour les convertir en RTL à l'aide de Verilog / VHDL.

MayurKubavat
la source