Contrôle de connaissances SE207 “SystemC”

23 juin 2021

Instructions

Ce contrôle de connaissances est strictement individuel. Vous devez modifier la fiche de réponse pour y inclure vos réponses puis l’ajouter à votre dépôt dans un dossier CC à la racine de ce dernier.

Questions

Question 1

Nous souhaitons modéliser en SystemC un opérateur numérique calculant la moyenne arithmétique de 8 nombres codés sur 8 bits.

  1. Quels types pouvez-vous utiliser en SystemC pour représenter ces entiers ?
  2. Quels critères vous feraient choisir un type plutôt qu’un autre et quelles implications sur les performances et la précision de la simulation ?

Ceci est un exemple de réponse. Merci d’effacer ce paragraphe

LAISSEZ les groupes de trois tirets précédés et suivis d’une ligne vide

// ceci est un exemple de code
int main() {
   return 0;
}

Question 2

Les notions d’affectations différées et de signal sont des notions importantes pour un simulateur évènementiel.

  1. Expliquez brièvement à quoi correspondent ces notions et dans quels cas il est indispensable de les utiliser.
  2. Expliquez comment elles sont mises en œuvre en SystemC.


Question 3

Nous voulons modéliser un système synchrone générant des requêtes utilisant un rendez-vous (handshake) avec l’interface suivante:

Une requête est complétée si valid et ready sont tous deux à l’état haut au front d’horloge.

Après l’initialisation, nous voulons le comportement suivant:

  1. Complétez le code des deux module SystemC suivants :



// En utilisant un SC_THREAD
SC_MODULE(SeqThread) {
  sc_in<bool>  clk;
  sc_in<bool>  nrst;
  sc_out<bool> valid;
  sc_in<bool>  ready;
...
  SC_CTOR(SeqThread){
    SC_THREAD(run);
  }
...
}

// En utilisant une ou plusieurs SC_METHOD
SC_MODULE(SeqMethod) {
  sc_in<bool>  clk;
  sc_in<bool>  nrst;
  sc_out<bool> valid;
  sc_in<bool>  ready;
...
  SC_CTOR(SeqThread){
    SC_METHOD(fsm);
  }
...
}

Question 4

  1. Expliquez pourquoi les SC_THREAD contiennent souvent une boucle infinie ?
  2. Que ce passe-t-il si une boucle infinie est présente dans une SC_METHOD ?


Question 5

Soit les deux modules suivants servant à modéliser deux composants matériels synchrone (à une horloge clk) qui s’échangent des données (des entiers de 32 bits).

Pour modéliser le canal de communication, nous voulons utiliser une sc_fifo.


// La fonction produisant les valeurs à transmettre
// est définie ailleurs
int prod();

SC_MODULE(PROD){
  sc_in<bool> clk;

  void P1() {
    for(;;){
       out.write(prod());
       wait();
    }
  }
  SC_CTOR(PROD){
  }
};

// La fonction utilisant les données reçues
// est définie ailleurs
void use(int);

SC_MODULE(CONSO){
  sc_in<bool> clk;

  void P2() {
    for(;;){
       use(in.read());
       wait();
    }
  }
  SC_CTOR(CONSO){
  }
};

  1. Quel type de processus SystemC devons-nous utiliser ici ?
  2. Complétez le code en:
  3. En conservant la sc_fifo et le type de processus, pouvons-nous garantir que le modèle se comporte correctement s’il est simulé avec d’autres modèles synchrones ?
  4. Nous voulons une un modèle plus proche d’un modèle RTL pour le module PROD. Pour cela, on vous propose d’utiliser une SC_METHOD.