Introduction à SystemC

Niveaux d’abstraction et raffinement

Tarik Graba

P4 2018-2019

Niveaux d’abstraction et raffinement

Fonctionnel vers RTL

En SystemC on peut partir d’une description fonctionnelle et aller jusqu’à une représentation RTL.

Comment utiliser les processus de SystemC pour faire cela.

Étapes de raffinement

  1. Décrire l’algorithme
  2. Écrire une version fonctionnelle
  3. Définir l’interface du module
    • les entrées/sortie
    • un éventuel protocole
  4. Encapsuler la fonction dans un SC_THREAD
    • la version fonctionnelle servant de référence
  5. Ajouter une information sur le temps en ajoutant des wait
    • en nombre de cycles ou en temps absolu
  6. Refaire une version RTL… en utilisant des SC_METHOD
    • la version précédente servant de référence

Exemple pratique, Calculer le PGCD

Choix de l’algorithme

Nous voulons modéliser un module matériel calculant le PGCD de deux nombres entiers.

L’algorithme d’Euclide peut être utilisé pour cela. Il existe deux variantes de cet algorithme utilisant :

  • des divisions successives ou
  • des soustractions successives.

Pour une implémentation matérielle, nous utiliserons la variante avec des soustractions car elle utilisera moins de ressources.

Définir les interfaces

Comme l’algorithme est itératif, nous allons l’implémenter en utilisant de la logique séquentielle.

Le module aura l’interface représentée dans le schéma suivant :

Interface du module PGCD
Interface du module PGCD

Modèle temporel

Modifiez le modèle pour avoir un comportement temporel réaliste.

Modèle RTL

Cette figure représente le chemin de donnée d’une implémentation possible de cet algorithme.

Datapath du PGCD
Datapath du PGCD