System c eniso_jan_fev_07
-
Upload
haythem2015 -
Category
Engineering
-
view
13 -
download
1
Transcript of 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
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
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++
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
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 « & »
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
}
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;
}
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;
}
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;*/
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;}
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++
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
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2313
Classes et objets: introduction
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.
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();
};
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2316
Lien entre Classes et objets
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
}}
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
}
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.
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;}
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, …);
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
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
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);};
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2325
Surcharge des opérateurs (suite)
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2326
Héritage
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2327
Héritage: Exemple (1/3)
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2328
Héritage: Exemple (2/3)
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2329
Héritage: Exemple (3/3)
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2330
Héritage Multiple
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 ».
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
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.
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’.
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;
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, …)
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.
Co
urs F
on
dam
ental d
u S
ystemC
38
Partie N°2
Du C++ au SystemC
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.
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!!
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é!!
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
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2343
Histoire du SystemC
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2344
SystemC 2.0
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!!
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2346
Exemple de systèmes
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.
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
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
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++
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2351
SystemC design flot (Intro 3)
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2352
Développement en SystemC (intro 4)
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2353
Principe (intro 5)
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2354
Module en interne (intro 6)
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2355
Comparaison entre SystemC et VHDL
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2356
Environnement de Vérification d’un module
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2357
Eléments de langage SystemCplan
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_ »:
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2359
Syntaxes de sc_int, sc_uint, sc_bigint
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2360
Eléments de langage SystemCplan
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
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2362
Syntaxe du module
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2363
Structure de base de modélisation
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
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:
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.
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)
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
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2369
Lecture/écriture des ports et des signaux
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2370
Les Variables
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2371
Le constructeur
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2372
Exemple de Constructeur
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2373
Eléments de langage SystemCplan
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2374
Processus (avant propos)
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2375
SC_METHOD (1)
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2376
SC_METHOD (2)
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2377
SC_METHOD: sensitivité
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2378
SC_METHOD : Exemple
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2379
SC_METHOD : Mode d’exécution
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2380
Les Processus de type thread
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2381
Utilisation des Threads
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2382
Fonctions du contrôle de temps
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2383
La fonction wait()
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2384
Mode d’exécution d’une SC_THREAD
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2385
SC_THREAD exemple
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
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2387
Notification des events
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2388
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2389
Formes de wait()
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2390
Implémentation du Système
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2391
Implémentation du Système: définir les signaux internes
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
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
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2394
Implémentation du Système: interconnexion des sous modules
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2395
Exemple d’une Bascule D
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2396
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2397
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2398
Exemple d’un générateur d’interruptions (exercice)
Co
urs F
on
dam
ental d
u S
ystemC
17/04/2399
Co
urs F
on
dam
ental d
u S
ystemC
100
Le cœur de simulation du SystemC
Co
urs F
on
dam
ental d
u S
ystemC
17/04/23101
Co
urs F
on
dam
ental d
u S
ystemC
17/04/23102
Co
urs F
on
dam
ental d
u S
ystemC
17/04/23103
Co
urs F
on
dam
ental d
u S
ystemC
17/04/23104
Co
urs F
on
dam
ental d
u S
ystemC
17/04/23105
Co
urs F
on
dam
ental d
u S
ystemC
17/04/23106
SystemC Scheduler
Co
urs F
on
dam
ental d
u S
ystemC
17/04/23107
SystemC Scheduler
Co
urs F
on
dam
ental d
u S
ystemC
108
Les niveaux d’abstraction en SystemC
Co
urs F
on
dam
ental d
u S
ystemC
17/04/23109
Co
urs F
on
dam
ental d
u S
ystemC
17/04/23110
Co
urs F
on
dam
ental d
u S
ystemC
17/04/23111
Co
urs F
on
dam
ental d
u S
ystemC
17/04/23112
Co
urs F
on
dam
ental d
u S
ystemC
17/04/23113