Vous êtes sur la page 1sur 42

Module: SYSTEMES EMBARQUES ET PROTOTYPAGE

TP
Introduction au SystemC

Achraf Jaoujal
Définition
• SystemC est un langage de description de matériel, au même titre
que VHDL ou Verilog.
• Il est utilisé aussi pour la conception des systèmes Temps réel.
• SystemC est un langage de description de plus haut niveau, puisqu'il
permet une modélisation de systèmes au niveau comportemental.
• SystemC n'est pas un langage à part entière mais un ensemble de
classes C++ qui introduisent les concepts nécessaires à la
modélisation du matériel Conservant les fonctionnalités du C++, il
reste possible de décrire des fonctions purement logicielles.
• SystemC permet donc de modéliser des systèmes matériels,
logiciels. Il est donc particulièrement approprié à la conception de
systèmes de type SoC.

A. Jaoujal/Module: SYSTEMES EMBARQUES


2
ET PROTOTYPAGE
Objectif
Comme tout langage de description de matériel (Hardware Description
Langage, HDL), SystemC est une instance d'une classe de langage
informatique ayant pour but la description formelle d'un système
électronique. Il peut généralement :

• Décrire le fonctionnement du circuit.


• Décrire sa structure.
• Et servir à vérifier sa fonctionnalité par simulation ou preuve
formelle.

A. Jaoujal/Module: SYSTEMES EMBARQUES


3
ET PROTOTYPAGE
Objectif
Le but des HDL est double :

La simulation:

l'un des objectifs des HDL est d'aboutir à une représentation


exécutable d'un circuit, soit sous forme autonome, soit à l'aide d'un
programme externe appelé simulateur. Cette forme exécutable
comporte une description du circuit à simuler, un générateur de
stimuli (vecteurs de test), ainsi que le dispositif implémentant la
sémantique du langage et l'écoulement du temps.
Il existe deux types de simulateurs, à temps discret, généralement
pour le numérique, et à temps continu pour l'analogique. Des HDL
existent pour ces deux types de simulations.
A. Jaoujal/Module: SYSTEMES EMBARQUES
4
ET PROTOTYPAGE
Objectif
Le but des HDL est double :

La Synthèse

Un programme spécial appelé synthétiseur peut transformer une


description de circuit en une netlist de portes logiques ayant le
même comportement que le circuit de départ. Le sous-ensemble du
langage utilisé à ce propos est alors dit synthétisable.

A. Jaoujal/Module: SYSTEMES EMBARQUES


5
ET PROTOTYPAGE
Composants Structurels de SystemC

Modules

Un module en SystemC est composé d'autres modules, de canaux de


communication entre ces modules (signaux, ou canaux plus
abstraits), et éventuellement de processus.

A. Jaoujal/Module: SYSTEMES EMBARQUES


6
ET PROTOTYPAGE
Composants Structurels de SystemC
Ports

Un module possède un ou plusieurs ports. Les ports sont juste des


points d'entrée ou de sortie.
Par contre, les ports doivent déclarer les fonctions qui seront
utilisées pour communiquer à travers eux. Exemples :
• Un port en entrée destiné à être relié à un signal normal déclarera
qu'il utilise la fonction read des signaux.
• Un port similaire mais bidirectionnel déclarera qu'il utilisera les
fonctions read et write.
• La déclaration des fonctions qu'il va utiliser est appelée interface.

• Exemple: sc_in, sc_out et sc_inout

A. Jaoujal/Module: SYSTEMES EMBARQUES


7
ET PROTOTYPAGE
Composants Structurels de SystemC

Interfaces

Une interface est une déclaration des fonctions qui pourront être
utilisées à travers les ports d'un module.

Les interfaces permettent au compilateur de détecter très tôt le


branchement d'un port à un canal qui ne lui est pas adapté.

• Exemple: sc_signal_in_if et sc_signal_inout_if

A. Jaoujal/Module: SYSTEMES EMBARQUES


8
ET PROTOTYPAGE
Composants Structurels de SystemC
Canaux

Les canaux sont les moyens de communication entre les modules. Ils
peuvent être basique et concrets (signaux), ou plus évolués / plus
abstraits (fifo, réseau ethernet, ...).

Les canaux contiennent (entre autres) l'implémentation du code C++


déclaré dans les interfaces. On dit qu'ils implémentent une interface.

Exemple: sc_signal<T> , sc_buffer<T> …

A. Jaoujal/Module: SYSTEMES EMBARQUES


9
ET PROTOTYPAGE
Composants Structurels de SystemC
Canaux

On branche un canal à un module par l'intermédiaire d'un port, ce


port devant déclarer l'interface implémentée par le canal. L'intérieur
du module peut alors accéder au canal en appelant les
fonctions déclarées dans l'interface. De façon imagée, les ports
publient une offre d'embauche (l'interface) et les canaux aptes à y
répondre font le boulot.
L'interface est donc ce qui lie les ports et les canaux en décrivant
comment l'information transite par les ports

A. Jaoujal/Module: SYSTEMES EMBARQUES


10
ET PROTOTYPAGE
Composants Structurels de SystemC
Processus

Il décrivent une fonctionnalité, un comportement.


Un processus ne doit pas être appelé directement; c'est le moteur de
simulation SystemC qui se charge de l'appeler (le déclencher) sur
certains événement particuliers : ceux qui sont dans sa liste des
sensibilité.

A. Jaoujal/Module: SYSTEMES EMBARQUES


11
ET PROTOTYPAGE
Composants Structurels de SystemC
Processus

Il existe trois types de processus en SystemC:

• SC_METHOD
• SC_THREAD
• SC_CTHREAD

Les deux premiers sont les plus utilisés.

A. Jaoujal/Module: SYSTEMES EMBARQUES


12
ET PROTOTYPAGE
Composants Structurels de SystemC
Processus

SC_METHOD:

• Ils sont appelés par le scheduler à chaque notification


d'événement de leur liste de sensibilité.
• Ils s'exécutent en entier, dans le contexte du scheduler.

A. Jaoujal/Module: SYSTEMES EMBARQUES


13
ET PROTOTYPAGE
Composants Structurels de SystemC
Processus

SC_METHOD:

• Ils sont appelés par le scheduler à chaque notification


d'événement de leur liste de sensibilité.
• Ils s'exécutent en entier, dans le contexte du scheduler.
Exemple:
SC_METHOD(mon_processus);

// Déclaration de sa liste de sensibilité


sensitive << a
A. Jaoujal/Module: SYSTEMES EMBARQUES
14
ET PROTOTYPAGE
Composants Structurels de SystemC
Processus

SC_THREAD:

• C'est du multitâche coopératif.


• Ce type de processus peuvent et être mises en veille.

A. Jaoujal/Module: SYSTEMES EMBARQUES


15
ET PROTOTYPAGE
Composants Structurels de SystemC

A. Jaoujal/Module: SYSTEMES EMBARQUES


16
ET PROTOTYPAGE
Etude d’un porte combinatoire AND à trois
entrées

A. Jaoujal/Module: SYSTEMES EMBARQUES


17
ET PROTOTYPAGE
Etude d’un porte combinatoire AND à trois
entrées

A. Jaoujal/Module: SYSTEMES EMBARQUES


18
ET PROTOTYPAGE
Etude d’un porte combinatoire AND à trois
entrées

A. Jaoujal/Module: SYSTEMES EMBARQUES


19
ET PROTOTYPAGE
Etude d’un porte combinatoire AND à trois
entrées

A. Jaoujal/Module: SYSTEMES EMBARQUES


20
ET PROTOTYPAGE
Etude d’un porte combinatoire AND à trois
entrées

A. Jaoujal/Module: SYSTEMES EMBARQUES


21
ET PROTOTYPAGE
Etude d’un porte combinatoire AND à trois
entrées

A. Jaoujal/Module: SYSTEMES EMBARQUES


22
ET PROTOTYPAGE
Type de données
Les modèles SystemC peuvent utiliser différents types de données
spécifiquement dédiés au matériel.
Les principaux types de SystemC sont :

• Les types bits


• Les vecteurs de bits
• Les types entiers
• Les nombres en virgule fixe
• Les types temporels

A. Jaoujal/Module: SYSTEMES EMBARQUES


23
ET PROTOTYPAGE
Type de données

Les types bits:

SystemC propose deux types de bit : bool et sc_logic.

bool: Ce type est destiné à représenter un bit ne pouvant prendre


que deux valeurs, '0' (false) et '1' (true)

Exemple :
bool c;

sc_in <bool> c;

A. Jaoujal/Module: SYSTEMES EMBARQUES


24
ET PROTOTYPAGE
Type de données

Les types bits:

sc_logic: Ce type est une extension de bool à la logique 4-valuée. Il


représente un bit pouvant prendre les valeurs '0', '1', 'Z' et 'X'

Exemple :
sc_logic out;
bool data, enable;
if(enable)
out = data;
else
out = 'Z';

A. Jaoujal/Module: SYSTEMES EMBARQUES


25
ET PROTOTYPAGE
Type de données

Les types Entiers:

SystemC propose une extension du type int, signés et non-signés,


allant de 1 bit à l’infini, autant qu'on veut:

• sc_int
• sc_uint
• sc_bigint
• sc_biguint

A. Jaoujal/Module: SYSTEMES EMBARQUES


26
ET PROTOTYPAGE
Type de données

Les types Entiers:

sc_int<n>, sc_uint<n> : Ces types sont des entiers signés et non


signés (resp.), représentés sur n bits (n allant de 1 à 64).

Exemple :
sc_int<64> res; // entier signé sur 64 bits
sc_uint<10> val3; // entier non signé sur 10 bits

A. Jaoujal/Module: SYSTEMES EMBARQUES


27
ET PROTOTYPAGE
Type de données

Les types Entiers:

sc_bigint<n>, sc_biguint<n>: Ces types sont des extensions


de sc_int et sc_uint à un nombre de bits arbitraire illimité.

A. Jaoujal/Module: SYSTEMES EMBARQUES


28
ET PROTOTYPAGE
Type de données

Les Vecteurs De Bits:

• Les types vecteurs de bits ne doivent pas être confondus avec les
types entiers.
• Ce sont des tableaux de bits, pas des nombres. Ils sont optimisés
pour les manipulations de bits, et ne disposent pas d'opérations
arithmétiques.

A. Jaoujal/Module: SYSTEMES EMBARQUES


29
ET PROTOTYPAGE
Type de données

Les Vecteurs De Bits:

sc_bv<n> : Vecteur de bits 2-valués.

Il dispose de méthodes de :

• Sélection de bit [], sélection d'un ensemble de bits .Range() et


concaténation ", "
• Réduction : .And_reduce(), .Or_reduce(), .Xnor_reduce(), ...
• Assignation : =, &=, |=, ^=
• Manipulation de bits : ~, &, |, ^, <<, >>
• Egalité : ==, !=

A. Jaoujal/Module: SYSTEMES EMBARQUES


30
ET PROTOTYPAGE
Type de données
Les Vecteurs De Bits:

sc_bv<n> : Vecteur de bits 2-valués.

Exemple :

sc_bv<8> x;
bool y;

x = "01000111";
y = x[6]; // y vaut '1'

A. Jaoujal/Module: SYSTEMES EMBARQUES


31
ET PROTOTYPAGE
Type de données
Les Vecteurs De Bits:

sc_bv<n> : Vecteur de bits 2-valués.

Exemple :

sc_bv<16> data16;
sc_bv<32> data32;

data32.range(15,0) = data16;

data16 = (data32.range(7,0), data32.range(23,16));

A. Jaoujal/Module: SYSTEMES EMBARQUES


32
ET PROTOTYPAGE
Type de données

Les Vecteurs De Bits:

sc_lv<n> : Vecteur de bits 4-valués (sc_logic). Il accepte donc les


valeurs 'X' et 'Z' en plus de celles des sc_bv.

Son comportement est le même que celui des sc_bv, mais simule
moins vite

A. Jaoujal/Module: SYSTEMES EMBARQUES


33
ET PROTOTYPAGE
Type de données

Le Temps:

En SystemC 2.x, le temps est de type entier non signé sur 64 bits. La
résolution par défaut est 1ps.
Une valeur temporelle est de type sc_time, et demande deux
arguments lors de sa création :

• Un argument spécifiant la valeur,


• Un argument de type énuméré sc_time_unit en spécifiant l'unité.

A. Jaoujal/Module: SYSTEMES EMBARQUES


34
ET PROTOTYPAGE
Type de données
Le Temps:
sc_time_unit peut valoir :

• SC_FS : femtosecondes
• SC_PS : picosecondes
• SC_NS : nanosecondes (unité par défaut)
• SC_US : microsecondes
• SC_MS :millisecondes
• SC_SEC : secondes

Exemple :

sc_time t1( 20, SC_NS );

A. Jaoujal/Module: SYSTEMES EMBARQUES


35
ET PROTOTYPAGE
Exemple: Porte logique OR

Dans cet exemple on va étudier le cas d´une porte OR:

a
c
b
a b c

c=a+b

A. Jaoujal/Module: SYSTEMES EMBARQUES


36
ET PROTOTYPAGE
Exemple: Porte logique OR
Le programme décrivant cette porte OR sur SystemC est:

On va enregistrer ce programme
sous le nom :

or_gate.h

A. Jaoujal/Module: SYSTEMES EMBARQUES


37
ET PROTOTYPAGE
Exemple: Porte logique OR
Testbench
Avant de passer le code à la plaque électronique, il faut le tester
pour vérifier le bon fonctionnement de notre configuration.
Pour faire cette vérification il faut programmer un DRIVER qui va
générer les signaux pour nos entrées a et b.
Grace au MONITEUR nous pouvons vérifier les signaux sur les port a,
b et c.

Notre programme
est le DUT (Device
Under Test)

A. Jaoujal/Module: SYSTEMES EMBARQUES


38
ET PROTOTYPAGE
Exemple: Porte logique OR
Testbench

Le programme du DRIVER pour notre porte OR est:

Voir fichiers joints

driver.h

A. Jaoujal/Module: SYSTEMES EMBARQUES


39
ET PROTOTYPAGE
Exemple: Porte logique OR
Testbench

Le programme du MONITOR pour notre porte OR est:

Voir fichiers joints

monitor.h

A. Jaoujal/Module: SYSTEMES EMBARQUES


40
ET PROTOTYPAGE
Exemple: Porte logique OR
Testbench

Maintenant on va réunir touts les module dans un même


programme, ces modules seront interconnectés à l’aide des
signaux qui vont faire le rôle d’un canal,:

Voir fichiers joints

main_sc.cpp

A. Jaoujal/Module: SYSTEMES EMBARQUES


42
ET PROTOTYPAGE
Exemple: Porte logique OR
Testbench

Resultats:

A. Jaoujal/Module: SYSTEMES EMBARQUES


43
ET PROTOTYPAGE