113
Cours Fondamental du SystemC 1 CAO Électronique et Co- design Chapitre 2 YOUNES LAHBIB Jan-Fev 2008 [email protected] [email protected]

System c eniso_jan_fev_07

Embed Size (px)

Citation preview

Page 1: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

1

CAO Électronique et Co-designChapitre 2

YOUNES LAHBIB Jan-Fev 2008

[email protected] [email protected]

Page 2: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/232

PLAN DU COURS

Partie 1 Partie 1 Du C au C++: une courte présentation du langage C++ et ses différences avec C.

Partie 2 Partie 2 Les concepts clés de l’extension du C++ au SystemC pour la modélisation des circuits intégrés.

Partie 3Partie 3 Le langage SystemC

Page 3: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/233

Premiers pas: Déclaration des variables Les références Passage des arguments des fonctions par référence Surcharge des fonctions Paramètres par défaut Allocation dynamique de la mémoire Les streams C++

Partie 1 Partie 1 Du C au C++

Page 4: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/234

Les variables peuvent être déclarés n’importe où dans le code (pas nécessairement au début du code)

ex. 1ex. 1{

int a=0;a++;

// not allowed in C// not allowed in Cfloat b;;

...}

ex. 2ex. 2

/* the i counter is defined directly inside the block, and it is visible only inside it. */

for( int i=0; i<20; i++ ){...;}

Du C au C++ premiers pas: déclaration des variables

Page 5: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/235

Considérer le code suivant:int a;int & b = a;b = 5;

L’opérateur & signifie que « b » est: - une référence de a, et non une copie de a, - la meme variable avec un nom différent;- un changement sur « b » est refleté sur a et viceversa.

Syntaxe:datatype & var1 = var2;

Note: une variable référence doit toujours être initialisée à une autre variable lors de la déclaration;

Du C au C++ premiers pas: les références « & »

Page 6: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/236

Passage des arguments des fonctions par références

Le passage des variables par référence est l’application la plus importante des références.

Dans l’exemple, chaque fois qu’une variable de type int est passée à la fonction mult, « a » devient une référence de l’argument passé

Un changement quelconque de cet argument ( a) sera reflété sur la variable passée (val).

void mult(int & a)

{

a *= 2;

}

void main()

{

int val = 3;

mult(val); // now val = 6

}

Page 7: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/237

Premiers pas: surcharge des fonctions

C++ permet le surcharge des fonctions: – Plus q’une fonction peut avoir le même nom

et le même cadre. – Les fonctions doivent différer par au moins un

paramètre

void mult(int &a){

a *= 2;}void mult(int &a, int n){

a *= n;}

void main(){

int val = 3;

mult(val); // val = 6;mult(val,4); // val = 24;

}

Page 8: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/238

Arguments par défaut

C++ permet des arguments par défaut pour les fonctions

void mult(int & a, int n = 10){

a *= n;}void main( ){

int val = 3;mult(val); // val = 30;mult(val,4); // val = 120;

}

Page 9: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/239

Allocation Dynamique

C++ fournit deux opérateurs spéciaux, new et delete, pour allouer et détruire des objets.

int *p;p = new int; // p points to an int location;....delete p; // destroy the int memory location pointed by p

Ex of dynamic vectorsint *p = new int[num]; // now p points to a vector of num integers...delete [ ] p; // needed syntax to destroy a dynamic vector

/* Note: num can be a runtime value, elaborated during the execution of the code;*/

Page 10: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2310

CIN COUT C++ Streams

<< et >> sont surchargés pour les types natifs du C.

Il peuvent être surchargé pour tout type définie par l’utilisateur.

#include <iostream.h>void main(){char * c[20] = “Hello world !”;float z = 0.8;int a = 23cout << “c = “ << c << endl;cout << “z = “ << z << endl;cout << “a = “ << a << endl;}

Page 11: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2311

Programmation Objet

Classes et objets

Constructeurs et destructeurs

Polymorphisme

Surcharge des opérateurs

Héritage

Templates

Partie 1 Partie 1 Du C au C++

Page 12: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2312

Les objets interagissent entre eux par les fonctions dans la POO

Principe de la POOPrincipe de la POO

Page 13: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2313

Classes et objets: introduction

Page 14: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2314

Objets

OBJECTS – utilisés pour modéliser des entités réelles: personnes, place vecteur, temps, liste …

Comment définir un objet ?

Chaque objet peut être définie pour contenir des données et des fonctions manipulant ces données.

Page 15: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2315

ClassesLes classes permettent de modéliser les objets

Les classes contiennent des attributs (données) et des méthodes

class StudentRecord

{

private:

int SSN; //ATTRIBUTES

char first_name[20]; char last_name[20], int grade;

public:

void get_name(); //Methods :OPERATIONS on ATTRIBUTES

void print_name();

};

Page 16: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2316

Lien entre Classes et objets

Page 17: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2317

Classes et objets: pointeur « this »

« This » pointe sur l’objet de la classe elle-même.La fonction membre peut trouver l’adresse de l’objet auquel elle appartient

/* Function taking an object of type signal as an argument.*/void bind(signal s); […]class signal{

void bindme( ){bind(*this); // *this is the current object which is of type signal

}}

Page 18: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2318

Pointeur « this » (suite)

Peut être utilisé pour entre un argument et une variable de classe:

class A {int x = 3;void f(int x) {cout << "x= " << x << ", this->x= " << this->x << endl;}

};

int main() {A instance;instance.f(1); // x= 1, this->x= 3

}

Page 19: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2319

Les Constructeurs

Quand un objet de classe est créé, leurs membres peuvent être initialisés par le constructeur de cette fonction.

Le constructeur est exécuté quand un objet est déclaré ou créé dynamiquement (utilisant new)

Définir les constructeurs– A le même nom que la classe elle-même– Ne retourne pas des valeurs.– Ne peut pas être appelé explicitement– Peut passer des arguments.

Page 20: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2320

Constructeurs: exemple

class StudentRecord{private:

int SSN;//ATTRIBUTESchar first_name[20], last_name[20], address[40],grade;

public:StudentRecord(int SSN);//Constructor- -- -};

StudentRecord::StudentRecord(int SSN)//Constructor Definition{

this->SSN = SSN;}

Page 21: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2321

Passage des arguments au constructeurs

Quand déclarer une instance:– ClassName instance(arg1, arg2, …);

Quand utiliser l’opérateur new:– ptr = new ClassName(arg1, arg2, …);

Page 22: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2322

Polymorphisme de fonction

Exemple de surcharge de la fonction add() suivante:

/* The correct function to be invoked is determined by checking the number and type of argument*/

//Declarationsint add(int a,int b); //prototype 1int add(int a,int b,int c); //prototype 2int add(double a,int b); //prototype 3

//Function callscout<<add(5,10) //uses prototype 1cout<<add(5,10,20) //uses prototype 2cout<<add(0.72,10) //uses prototype 3

Page 23: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2323

Surcharge des opérateurs

C++ a plusieurs opérateurs: – +, -, *, /, %, ++, --, =, +=, …

Il est nécessaires d’utiliser ces opérateurs avec des objets. Exemple: si on veut ajouter deux strings, utiliser + est plus intuitive d’utiliser la fonction strcat.

Ceci peut se faire en traitant les opérateurs comme des fonctions.

La définition de ces fonctions peut se faire par: – a = +(b, c); pour faire a = b+c

Page 24: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2324

Surcharge des opérateurs (suite)// string.cc/* This is a memory efficient string class. It allocates just enough memory to store the string passed to it! It demonstrates overloading the += operator. This is overloaded as a MEMBER FUNCTION */

#include <iostream.h>#include <string.h>class String {private:

char *str;public:// Constructor

String(char* ptr);// member functions

void print();// Overloaded operators

const String& operator+=(const String& a);};

Page 25: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2325

Surcharge des opérateurs (suite)

Page 26: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2326

Héritage

Page 27: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2327

Héritage: Exemple (1/3)

Page 28: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2328

Héritage: Exemple (2/3)

Page 29: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2329

Héritage: Exemple (3/3)

Page 30: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2330

Héritage Multiple

Page 31: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2331

Généricité « Template »

Templates: utilise la même classe pour différents types de données.

Exemple:

On peut représenter une pile comme un tableau d’éléments, un entier indiquant le sommet de la pile (LIFO), et des méthodes comme « push et pop ».

Page 32: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2332

Classes templates

On veut faire des piles d’entiers, de double et de réels sans écrire plus qu’une fois ce code.

Pour cela on va utiliser les classes templates

Page 33: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2333

Classes templates

Si une classe est entrain d’utiliser « int » pour les opérations de la pile une autre qui utilise des « strings » alors il n’y a pas besoin de d’utiliser deux classes différentes mais utiliser des templates.

Page 34: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2334

Classes templates

La classe template qui a été définie utilise un type paramètre T.

Pour créer une classe on doit spécifier quel est le type de T. exemple:– Stack<int> iStack– Stack<string> fStack;

Mettant ‘int’ dans <> on dit que T est assigné à un entier ‘int’.

Page 35: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2335

Plus q’un paramètre ?

Il est possible de créer des classes templates avec plus qu’un seul paramètre.

template <class X, class Y>

class SampleClass

{

// code

};

Dans ce cas X et Y ont besoin d’être spécifiés lorsque on crée un objet:

SampleClass<int, bool> S;

Page 36: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2336

Fonctions Templates (exemple)

On peut déclarer la fonction qui calcule le carré par :

On peut utiliser la fonction ainsi :

T réfère ici au type du paramètre (entier, réel, …)

Page 37: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2337

Exemple d’affichage d’un tableau

Cette fonction template affiche un tableau de types de données quelconque. Si le tableau doit contenir des objets définis par l’utilisateur, l’opérateur << dot être surchargé correctement.

Page 38: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

38

Partie N°2

Du C++ au SystemC

Page 39: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2339

Partie 2 Partie 2 Du C++ au SystemC

Les concepts clés de l’extension du C++ au SystemC pour la

modélisation des circuits intégrés.

Page 40: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2340

Besoin des langages de modélisation mixte logicielle/matérielle

=>Problématique: on veut un langage permettant de modéliser à la fois du HW et du SW dans les SoCs (systèmes sur puces)!!

Les langages de description du matériel– Verilog, VHDL – ne sont pas dédiés à la modélisation du software

Langages de programmation généralistes– C, Ada, langages Orientés Objet– Manque de primitives permettant la modélisation du Hardware – Besoin d’implémenter un cœur de simulation

Permettre une co-simulation hétérogèneApparition de Langages dédiés au hard basées sur le C

– HardwareC, Hpascal, SpecC, cowareC…– ce sont des langages propriétaires (académiques, CAD vendeurs)

=>Besoin d’un Langage à la fois pour la modélisation et la programmation!!

Page 41: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2341

Peut-on utiliser le C++ tel qu’il est pour le HW-SW?

C++ ne supporte pas: Communication hardware : Signaux, protocoles, … Notion de temps : opérations séquencées par le temps

(cycles, délais en ns …) Concurrences: HW et SW opèrent en parallèle Réactivité: le HW réponde au stimuli et il a une

interaction constante avec son environnement, ce qui nécessite le traitement des exceptions.

Types de données HW : Bit, bit-vector, multi-valued logic (0, 1, « x », « z »), signed et unsigned, integer, fixed-pointed, float …

Un cœur de simulation intégré!!

Page 42: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2342

SystemC approbation ?

Développé à l’origine par Synopsys, Frontier Design et Coware OSCI (Open SystemC initiative) lancé en Sep 27, 1999 Supporté par plus que 45 sociétés avec 10 membres

Page 43: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2343

Histoire du SystemC

Page 44: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2344

SystemC 2.0

Page 45: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2345

Modélisation d’un Système avec SystemC

Un système est modélisé par: un ensemble de modules (instances de C++ classes), organisées de façon hiérarchiques et fonctionnent de façon concurrente. un ensemble d’élément de communication (signals, channels …) interconnexions (binding) entre des éléments de communication

Tout est basée sur des objets (POO) l’ordonnancement (Scheduling) est assuré par le cœur du SystemC!!

Page 46: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2346

Exemple de systèmes

Page 47: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2347

Caractéristiques de SystemC

Haute vitesse de simulationPlusieurs niveaux d’abstraction– Haut niveau fonctionnel (algorithmique, TLM, PV, PVT)– CA (Cycle Accurate)– RTL– Classique flow de conception

Protocoles de communication – Channels– Capacité de raffinement

Support de déboguage– Approache C++ -> débuggeurs classiques (gdb, …)– Prendre en compte du paradigme multi-threading pour le

déboguage.

Page 48: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2348

Partie 3 Partie 3 les concepts de SystemC

1. Introduction

2. Les éléments de langage SystemC

3. Le cœur de la simulation

4. Les niveaux d’abstraction

Page 49: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2349

Introduction (1)

SystemC =Librairie de classe C++ => Approche objetInitiative OpenSource: http://www.systemc.orgModélisation du hard et du softMéthodologie de conception et raffinementdes modèles de simulation :

untimed => timed => bus cycle accurate => cycle accurate

Steering Group de 13 companies9 Université et +50 compagnies participent à

l’initiative

Page 50: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2350

SystemC motivation (intro 2)

Un langage de description d’architectures et de logiciels

Une méthodologie pour affiner les modèles de simulation jusqu’à des simulateurs précis au cycle

Un seul langage pour tous les niveaux d’abstraction : C, C++

Page 51: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2351

SystemC design flot (Intro 3)

Page 52: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2352

Développement en SystemC (intro 4)

Page 53: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2353

Principe (intro 5)

Page 54: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2354

Module en interne (intro 6)

Page 55: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2355

Comparaison entre SystemC et VHDL

Page 56: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2356

Environnement de Vérification d’un module

Page 57: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2357

Eléments de langage SystemCplan

Page 58: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2358

Types de données: avant proposLes types de C++ peuvent être utilisés mais ne sont pas

adéquate pour le hardware:

SystemC fournis d’autres types qui sont nécessaires pour la modélisation des systèmes hard-soft. Il commencent par le préfixe « SC_SC_ »:

Page 59: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2359

Syntaxes de sc_int, sc_uint, sc_bigint

Page 60: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2360

Eléments de langage SystemCplan

Page 61: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2361

Module Un module (SC_MODULE)(SC_MODULE) est un

container. C’est le block basique du SystemC.

– Comme entityentity en VHDL

L’interface du module est dans le fichier header (ending.h)

Fonctionnalités dans le CPP

Module Contient:– Port– Signaux et variables internes– Processus de différents types– Des méthodes C++– Instances d’autres modules– Constructeur

Page 62: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2362

Syntaxe du module

Page 63: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2363

Structure de base de modélisation

Page 64: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2364

Ports (avant propos)

Les ports sont l’interface externe du module– Passe des information au et à partir du module– Contient trois types (in, out, et inout)– Ports sont toujours mappés au signaux (binding,

port-map)– Ports sont des membres du module ( de la classe

sc_module)– Chaque port a un type de donnée passé comme un

template

Page 65: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2365

Déclaration des portsLes ports sont déclarés dans le module

– La direction du port est spécifiée par son type: Input sc_in<>sc_in<> Output sc_out<>sc_out<> Inout sc_inout<>sc_inout<>

Le type de donnée est passé en paramètre template:

Page 66: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2366

Les signaux (avant propos)

Les signaux sont utilisés pour la communication

Echange les données entre les modules et les processus.

Il y a un seul type de signaux

Les signaux peuvent ne pas être mappées aux ports

Les signaux peuvent être:– Des données membres du SC_MODULE– Utilisés au top pour la connexion entre les modules

Les types de données des signaux sont passés en paramètre.

Page 67: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2367

Déclaration des signaux

Sont déclarés à l’intérieur du module ou à l’exterieur.

Il y a un seul type:– sc_signal <>sc_signal <>

Les données sont passées en paramètre (template)

Page 68: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2368

Exemple ports-signaux

• Les ports et les signaux sont deux données membres du SC_MODULE

Page 69: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2369

Lecture/écriture des ports et des signaux

Page 70: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2370

Les Variables

Page 71: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2371

Le constructeur

Page 72: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2372

Exemple de Constructeur

Page 73: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2373

Eléments de langage SystemCplan

Page 74: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2374

Processus (avant propos)

Page 75: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2375

SC_METHOD (1)

Page 76: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2376

SC_METHOD (2)

Page 77: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2377

SC_METHOD: sensitivité

Page 78: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2378

SC_METHOD : Exemple

Page 79: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2379

SC_METHOD : Mode d’exécution

Page 80: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2380

Les Processus de type thread

Page 81: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2381

Utilisation des Threads

Page 82: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2382

Fonctions du contrôle de temps

Page 83: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2383

La fonction wait()

Page 84: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2384

Mode d’exécution d’une SC_THREAD

Page 85: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2385

SC_THREAD exemple

Page 86: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2386

Les événement spéciaux (la classe: sc_event)

Events are special objects which can be specified inside a module and invoked by thread processes of this module to synchronize those other threads who are waiting on them.

To declare an event, you have just to instantiate it calling its constructor without arguments:

sc_event sc_event my_event;my_event;To notify this event, you call its member function notify:– examples

sc_time t( 10, sc_ns );my_event.notify( t ); // notify in 10 ns

– ex 2

my_event.notify(0); // notify on the next delta cycle

Page 87: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2387

Notification des events

Page 88: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2388

Page 89: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2389

Formes de wait()

Page 90: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2390

Implémentation du Système

Page 91: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2391

Implémentation du Système: définir les signaux internes

Page 92: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2392

Implémentation du Système: définir des objets des sous-systèmes

Page 93: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2393

Implémentation du Système: créer des instances des sous-systèmes

Page 94: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2394

Implémentation du Système: interconnexion des sous modules

Page 95: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2395

Exemple d’une Bascule D

Page 96: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2396

Page 97: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2397

Page 98: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2398

Exemple d’un générateur d’interruptions (exercice)

Page 99: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/2399

Page 100: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

100

Le cœur de simulation du SystemC

Page 101: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/23101

Page 102: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/23102

Page 103: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/23103

Page 104: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/23104

Page 105: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/23105

Page 106: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/23106

SystemC Scheduler

Page 107: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/23107

SystemC Scheduler

Page 108: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

108

Les niveaux d’abstraction en SystemC

Page 109: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/23109

Page 110: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/23110

Page 111: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/23111

Page 112: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/23112

Page 113: System c eniso_jan_fev_07

Co

urs F

on

dam

ental d

u S

ystemC

17/04/23113