Introduction à SystemC

Les canaux de communication

Tarik Graba

P4 2018-2019

Au-delà des simples signaux

Interface et canal

En SystemC on peut définir des canaux de communication complexes.

L’interface de ces canaux est séparée de la définition de leur comportement pour permettre de faire évoluer les canaux de communication sans modifier ce qui se trouve des deux cotés du canal.

sc_interface

Définit le minimum de méthodes à implémenter pour fonctionner avec le simulateur :

  • comment enregistrer un port connecté à l’interface et
  • l’évènement par défaut.

Toute interface doit hériter de ce type pour pouvoir s’intégrer dans une simulation.

sc_prim_channel

Définit en plus les méthodes permettant l’interaction avec le moteur de simulation :

  • affectation différée et mise à jour,
  • attente (par exemple wait()…)

sc_port

Permet de déclarer un port pour une interface particulière. C’est une classe template dont l’un des paramètres est l’interface utilisée. Les autres paramètres correspondent au nombre de canaux qu’on peut y connecter (par défaut exactement 1).

Exemple d’utilisation

Prenons le temps de regarder le code de l’exemple.

Et pour les sc_signal

L’interface

Pour les signaux les deux interfaces suivantes sont définies :

  • sc_signal_in_if<T> : interface en lecture
  • sc_signal_inout_if<T> : interface en écriture

Les ports sc_in, sc_out

  • Un sc_in est équivalent à un sc_port<sc_signal_in_if<T>,1>
  • Un sc_out et un sc_inout sont équivalents à un sc_port<sc_signal_inout_if<T>,1>

Le sc_signal

Est défini comme :

Des canaux standards

Les sc_buffer<T>

Un sc_buffer est équivalent à un sc_signal et implémente la même interface.

La seule différence, vient du fait que pour un sc_buffer il y a un évènement notifié à chaque écriture alors que pour un sc_signa il faut que la valeur change.

Les sc_fifo<T>

Permet d’instances des fifos dont la taille est définie à l’instanciation.

Elles implémentent les interfaces :

  • sc_fifo_in_if<T>
  • sc_fifo_out_if<T>

Des ports spéciaux sont aussi prévus :

  • sc_fifo_in
  • sc_fifo_out

Les sc_mutex et sc_semaphore

La bibliothèque définit d’autres canaux standards permettant la synchronisation de SC_THREAD pour l’accès à des ressources partagées.

sc_channel