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

Les sc_signal utilisent ces mêmes notions d’interfaces et canaux et de ports.

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

En plus des sc_signal, dans la bibliothèque, un certain nombre de canaux standards sont définis.

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

SystemC définit la notion de canal hiérarchique. Un canal hiérarchique n’est en réalité qu’un sc_module qui, en utilisant entre autre des sc_export, peut se présenter comme un canal de communication complexe.

On peut donc y trouver des processus et modéliser les comportements du canal de communication.

Pour définir explicitement un canal hiérarchique on utilisera la classe sc_channel qui n’est qu’un alias de la classe sc_module.