Introduction à SystemC

Les types

Tarik Graba

P4 2018-2019

Le type logique

Le type logique

En C++ le type bool permet de représenter une valeur logique

  • (true, false).

SystemC définit, en plus, le type sc_logic pouvant prendre 4 valeurs

  • (0, 1, Z, X).

Les vecteurs

Les bit vectors sc_bv<N>

Vecteur d’éléments binaires (bool).

Le paramètre de template est un entier qui permet de définir la taille du vecteur.

Les logic vectors sc_lv<N>

Vecteur de variables logiques (sc_logic).

Le paramètre de template est un entier qui permet de définir la taille du vecteur.

Les entiers de taille arbitraire

Remarque

Pour des raisons d’efficacité, les types sc_lv et sc_bv ne permettent pas de faire d’opérations arithmétiques.

Pour cela, la bibliothèque SystemC fournit des types permettant de manipuler des entiers de taille arbitraire.

sc_int<N> et sc_uint<N>

SystemC définit ces deux classes pour les entiers de taille inférieure ou égale à 64 bits.

En interne, ils utilisent les entiers 64 bits natifs de C++ pour avoir une implémentation efficace des opérateurs arithmétiques. Les opérations de troncature et d’extension sont gérées automatiquement.

sc_bigint<N> et sc_biguint<N>

Si l’on a besoin de représenter des entiers de taille arbitraire supérieure à 64 bits, il faut utiliser ces types.

Ils sont prévus pour permettre des calculs sur une taille illimitée mais pour des raisons pratiques, l’implémentation de référence limite leur taille à SC_MAX_NBITS. Cette valeur est définie dans le fichier kernel/sc_constants.h et peut être modifiée si nécessaire.

Les nombre en virgule fixe

Les types définis

Pour représenter un nombre en virgule fixe on doit préciser sa taille et la position de la virgule.

SystemC propose deux familles de types pour représenter ces nombres :

  • Les sc_fixed et sc_ufixed pour lesquels les paramètres sont statiques (définis par des templates)
  • Les sc_fix et sc_ufix pour lesquels les paramètres peuvent être définis dynamiquement

Les sc_fixed et sc_ufixed

avec :

  • wl la taille totale
  • iwl la taille de la partie entière
  • q_mode le mode de quantification
  • o_mode le mode de saturation
  • n_bits le nombre de bits qui saturent

Comment les utiliser

Ces types peuvent être initialisés à partir de float ou de double.

Toutes les opérations arithmétiques et logique sont faites en fonction des paramètres sur lesquels ils ont été définis.

Les sc_fix et sc_ufix

Ces deux types diffèrent des précédents par le fait que les paramètres sont modifiables dynamiquement en fonction d’un contexte. Comme les paramètres sont dynamiques, ils sont plus lents à l’exécution.

Pour définir un contexte :

Le temps

Le type sc_time

SystemC définit un type pour représenter le temps de simulation ou des intervalles de temps.

Un sc_time est construit à partir d’un double et d’une unité. L’unité est une des valeurs du type énuméré sc_time_unit