Introduction à SystemC

Historique et concepts

Tarik Graba

P4 2018-2019

Présentation de l’UE

Objectifs

  • Présenter un nouveau langage de description du matériel et de modélisation SystemC
  • Présenter des concepts de modélisation à différents niveaux d’abstraction
  • Regarder sous le capot (SystemC est opensource)

Organisation et évaluation

  • Cours suivi de mise en pratique
  • Travaux à faire avant la séance suivante
  • QCM à la fin

Introduction

Généralités

  • SystemC est un “langage” de modélisation et de description du matériel.

    • SystemC est en réalité une bibliothèque C++
  • SystemC est un standard ouvert (Standard IEEE-1666)

  • Une implémentation de référence, libre (open source) est distribuée par Accellera.

  • SystemC permet de décrire du matériel en C++

Historique

  • 1998, Synopsys “ouvre” son outil Scenic et crée SystemC 0.9
  • 2000, Standard OSCI (Open SystemC Initiative)
    • Avec des contributions de Frontier Design et CoWare
  • Standard IEEE en 2005 avec la version 2.0
    • SystemC V2.2 correspond au standard IEEE 1666-2005
  • Fusion OSCI/Accellera en 2011 et mise à jour du standard
    • SystemC V2.3 correspond au standard IEEE 1666-2011
  • Nov. 2016 V2.3.1, passage en licence Apache
  • Version actuelle V2.3.3

SystemC plus de 15 ans (bientôt 20) d’évolution !

Pourquoi SystemC

  • Pourquoi utiliser C++ pour décrire du matériel ?

  • Pour modéliser efficacement un système complet contenant du logiciel et du matériel.

À quel niveau d’abstraction ?

  • Dit autrement, qu’avons-nous besoin de modéliser pour décrire un système numérique complet contenant du logiciel et du matériel ?

Que veut dire niveau de représentation ?

  • Dans un modèle, avec quel niveau de précision doit-on représenter le comportement ?

  • Le temps est-il important ?

    • Oui : On parle de Timed Model
    • Non : On parle de Untimed Model
  • Tous les signaux sont importants ?

    • Oui : On parle de modèle Bit Accurate
    • Non : On parle de modèle Transactionnel
  • A-t-on besoin d’être précis dans le modèle ou seulement aux interfaces ?

Que veut dire niveau de représentation ?

Niveaux d’abstraction dans un flot de conception
Niveaux d’abstraction dans un flot de conception

SystemC : Un langage pour tous les modèles

L’idée derrière SystemC est d’avoir un langage unique pour écrire des modèles à ces différents niveaux d’abstraction.

Avantages :

  • Un seul langage à connaître.
  • Faciliter le passage d’un niveau à l’autre et même son automatisation.
  • Simplifier en réduisant le nombre de modèles.
  • Éviter d’introduire des erreurs en retranscrivant manuellement.

SystemC : Un langage pour tous les modèles

Pourquoi est-ce possible en SystemC ?

  • C’est du C++ donc du logiciel.
  • On peut utiliser facilement des bibliothèques logicielles du système.
  • On peut concevoir des modèles qui vont jusqu’au niveau RTL.
  • On peut mélanger des modèles de niveaux différents.

SystemC : Un langage pour presque tous les modèles

Dans la réalité SystemC n’est pas utilisé pour tout faire. Pourquoi ?

SystemC : Un langage pour presque tous les modèles

Des habitudes

  • Il existe des langages spécialisés dans certains domaines (Matlab…) qui facilitent la vie des développeurs.
  • Tout le monde ne veut pas apprendre le C++.
  • Il y du code qui existe déjà !

Les outils

  • Les outils de synthèse RTL pour SystemC n’ont jamais été développés (ça peut changer)
  • Le passage d’un niveau à l’autre n’est pas vraiment automatique.

SystemC

La bibliothèque

SystemC est une bibliothèque logicielle écrite en C++ qui contient les éléments nécessaires à la modélisation d’un système matériel numérique.

C’est-à-dire, ce qu’il faut pour simuler le parallélisme du matériel :

  • un moteur de simulation événementiel, des évènements,
  • des signaux, des types logiques,

Plus des extensions pour :

  • la modélisation transactionnelle,
  • la vérification…

Structure de la bibliothèque

Organisation de la bibliothèque SystemC
Organisation de la bibliothèque SystemC

Comment récupérer SystemC

La bibliothèque est disponible sur le site d’Accellera :

Peut-être installée sur Linux, Mac OSX et Windows et peut être compilée au moins avec g++, clang++ ou Visual C++.

Est déjà installée sur les machines de l’école.

Premier exemple Hello World

hello.cpp

La fonction principale n’est pas main mais sc_main.

Que doit-on compiler ?

Flot de compilation
Flot de compilation

Première compilation

Makefile

SYSTEMC   ?= /comelec/softs/opt/systemc/current
ARCH       = linux64

CPPFLAGS  =  -isystem $(SYSTEMC)/include
CXXFLAGS  =  -Wall -g
LDFLAGS   =  -L$(SYSTEMC)/lib-$(ARCH)
LDLIBS    =  -lsystemc