Introduction à SystemC

Hiérarchie et modules

Tarik Graba

P4 2018-2019

Les modules

sc_module

Les modules sont les éléments principaux pour construire une description hiérarchique en SystemC.

Un module SystemC est une classe qui hérite de la classe sc_module

Un module ne peut être déclaré après le début de la simulation.

Le constructeur d’un module

Un module doit avoir un nom à l’instanciation. Ce nom est passé comme argument de son constructeur et doit être transmis à la classe parent sc_module.

Par exemple :

La méthode name() permet de récupérer ce nom durant l’exécution de la simulation.

Les macros prédéfinies

Deux macros sont définies pour simplifier cette déclaration :

  • SC_MODULE() pour déclarer le module
  • SC_CTOR() pour définir le constructeur

Constructeurs additionnels

Si un constructeur additionnel est ajouté il doit aussi appeler le constructeur de la classe parent sc_module

Par exemple :

Dans ce cas, la macro SC_CTOR ne peut plus être utilisée.

Les ports

sc_in, sc_out, sc_inout

SystemC définit trois types de ports sous la forme de templates :

  • sc_in<T> les entrées de type T
  • sc_out<T> les sorties de type T
  • sc_inout<T> les ports bidirectionnels de type T

Comment utiliser les ports

Les ports SystemC doivent être connectés à des signaux avant de pouvoir les utiliser. Lire ou écrire dans un port non connecté entraine une erreur durant la simulation.

Ports et signaux
Ports et signaux

Types résolus

Comme pour les signaux, il existe des ports pour les types résolus :

  • sc_in_resolved, sc_out_resolved et sc_inout_resolved
  • sc_in_rv<N>, sc_out_rv<N> et sc_inout_rv<N>

Ils doivent être connectés à des signaux du bon type.

Instances

Dans le sc_main

Les modules peuvent être instanciés dans la fonction sc_main.

Ils peuvent être connectés à des signaux déclarés au même niveau.

L’opérateur () est surchargé pour connecter les ports d’un module à des signaux. En interne, la méthode bind est appelée et des vérifications sont faites avant le début de la simulation.

Dans un module

Les sous modules sont déclarés comme des attributs du module.

Les connexions se font alors dans le constructeur du module.

Un port peut être connecté soit à :

  • un autre port
  • un signal interne

Les exports

sc_export

SystemC 2.2 ajoute les export qui permettent d’accéder à un signal interne à partir de l’extérieur d’un module.

Exports et signaux
Exports et signaux

Sûr et transparent

On peut connecter un export directement à un port.

Exports et Ports
Exports et Ports

On a la garantie à la compilation qu’on propagera les même types.