Title: Filire 1 UV4 conception de systmes numriques le langage SystemC
1Filière 1UV-4 conception de systèmes numériques
le langage SystemC
- JEGO CHRISTOPHE, Ed. 2006
2 Plan
- 1 Introduction sur le langage SystemC
- 2 Structure du langage SystemC
- 3 Lenvironnement de simulation
- 4 Un exemple la porte NAND
3Un langage de conception système Pourquoi
- Pourquoi lutilisation dun langage de conception
au niveau système devient indispensable - Quatre grandes raisons peuvent être énoncées
- Les systèmes sont une combinaison de blocs
matériel(s) et logiciel(s). - ? les langages de conception sont dédiés à la
partie matérielle uniquement. - Les systèmes comprennent des blocs IPs de
sources différentes. - ces différentes sources doivent avoir un langage
de description système commun pour modéliser
lensemble de lapplication. - La simulation au niveau RTL devient trop
complexe - une simulation à un haut niveau dabstraction
pour des systèmes complexes permet un gain de
temps important. - La modélisation au niveau système doit être
exploitable lors des - synthèses logicielles et matérielles
- un prototype virtuel de la partie matérielle
doit être disponible pour le - développement de la partie logicielle
4Un langage de conception système SystemC
5Un langage de conception système SystemC
- SystemC est un sous-ensemble du langage ANSI-C
combiné à un ensemble de librairies favorisant la
spécification, la simulation et la synthèse de
systèmes numériques complexes. - Initialement, le langage SystemC était dédié à la
simulation au niveau architectural mais ce
langage senrichit de bibliothèques pour pouvoir
répondre à toutes les caractéristiques dun
langage système.
6Un langage de conception système SystemC
Origines du langage
7Un langage de conception système SystemC
8Un langage de conception système SystemC
9 Plan
- 1 Introduction sur le langage SystemC
- 2 Structure du langage SytemC
- Le module
- Le processus
- Le port
- Le canal
- Linterface
- Les types de donné
- 3 Lenvironnement de simulation
- 4 Un exemple la porte NAND
10Structure du langage SystemC
- le module un modèle SystemC est construit à
partir dune hiérarchie de modules qui peuvent
eux-mêmes contenir des modules et des processus
(similaire en VHDL et Verilog). Les modules et
les processus communiquent à travers des signaux
par lintermédiaire de ports (in, out, in/out)
associés aux modules. - le processus il existe 3 types de processus
- SC_METHOD sexécute directement (pas dattente
ou de boucle infinie) - SC_THREAD sexécute séquentiellement grâce à
linstruction Wait (ex FSM) - SC_CTHREAD cas particulier du précédent, une
horloge est associée à ce type de processus. Les
signaux de sortie sont alors disponibles sur des
fronts de lhorloge - la synchronisation lattente (waiting) ? fin
du cycle ou événement - lobservation (watching) ? globale ou
locale - le canalensemble de variables et de fonctions
définissant le protocole de communication - linterface ensemble de fonctions de
communication spécifiées au sein du canal - () concept de SpecC
11Structure du langage SystemC le module
- Les modules en SystemC sont similaires aux
modules de Verilog et VHDL. - Ce sont les blocs structurels de base à
l'intérieur desquels sont instanciés d'autres
modules, des signaux, des canaux et des processus.
Déclaration SC_MODULE (module_name) //
déclaration des ports du module //
déclaration des signaux du module //
déclaration des processus // déclaration des
sous-modules SC_CTOR (module_name) //
spécification du type de processus //
spécification de la liste de sensibilité //
spécification des sous-modules
Un module correspond à une classe C les
données membres (attributs) sont les ports et les
signaux les fonctions (méthodes) sont les
processus et les sous-modules
12Structure du langage SystemC la hiérarchie
Déclaration SC_MODULE (module_name) //
déclaration des sous-modules sous_module
mon_sm SC_CTOR (module_name) //
spécification des sous-modules mon_sm new
sous_module ("label" ) mon_sm-gt e1(a)
mon_sm-gt e2(b)
13Structure du langage SystemC le processus
Le processus SC_CTHREAD ne fait plus partie la
norme. Il existe encore dans la bibliothèque,
pour maintenir la compatibilité avec les versions
précédentes, mais son emploi est déconseillé.
Nous ne le présenterons donc pas ici.
14Structure du langage SystemC le processus
- Les SC_METHOD
- sont, du point de vue du scheduler, des
fonctions normales - 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, puis exécutent un return(), qui
redonne la main au scheduler.
- Les SC_THREAD
- sont des fonctions indépendant du scheduler
- ils sont lancés une seule fois, au début de la
simulation, et plus jamais après - ce sont des boucles infinies, qui peuvent et
doivent être mises en veille à intervalle
réguliers. Le temps peut alors s'écouler. Les
SC_THREAD sont réveillés par leur liste de
sensibilité.
- La différence est claire
- un SC_METHOD est lancé à chaque fois que sa
liste de sensibilité le demande, et ne se suspend
pas (sinon le scheduler bloque). - un SC_THREAD est lancé une seule fois, c'est un
thread (au sens Unix du terme) indépendant. Sa
liste de sensibilité sert à le sortir de veille.
Il peut bloquer (veille, boucle infinie, ...), ça
ne gêne pas le simulateur. - la liste de sensibilité d'un SC_METHOD spécifie
quand est-ce qu'il doit être exécuté - la liste de sensibilité d'un SC_THREAD spécifie
quand est-ce qu'il doit être réveillé.
15Structure du langage SystemC le processus
Exemple la fonction addition
16Structure du langage SystemC le port
- port interface daccès (entrée/sortie) au
module. Il permet daccéder à linterface dun
canal externe ou à un port dun autre module. - La plupart des ports sont destinés à être
connectés à des signaux. Ils possèdent donc les
méthodes des interfaces propres aux signaux
(read, write, event, ...). Laccession à ce type
de port est réalisée par "." - Les principaux ports spécialisés sont
- pour un sc_signal sc_in, sc_out et sc_inout
- pour un sc_signal_resolved sc_in_resolved,sc_o
ut_resolved, et sc_inout_resolved - pour un sc_signal_rv sc_in_rv, sc_out_rv et
sc_inout_rv - pour un sc_fifo sc_fifo _in et sc_fifo _out
Déclaration SC_MODULE (module_name)
// déclaration des ports du module sc_inlt
type gt nom1 sc_outlt type gt nom2n
17Structure du langage SystemC le canal
- canal moyen de communication pour SystemC, une
sorte de généralisation des signaux de Verilog et
VHDL. - Les principaux types de canaux sont
- les signaux communication multi-point un
émetteur et n récepteurs qui est activée pour
chaque nouvelle donnée. - les buffers communication multi-point un
émetteur et n récepteurs qui est activée pour
chaque nouvel évènement. - les fifo communication point à point entre un
émetteur et un récepteur à partir dune mémoire à
accès séquentiel. - les mutex (verrous daccès concurrent)
communication sécurisée (bloquante) permettant le
partage dune ressource entre plusieurs
processus. - les sémaphores généralisation des canaux mutex
avec n accès concurrents. - Les canaux sont utilisés pour la communication
entre deux processus au sein dun module ou pour
la communication entre modules.
18Structure du langage SystemC le signal
- signal type de canal utilisé pour modéliser
des fils ou des bus - Un signal permet la transmission de données
entre un processus et un autre processus ou un
port de module - Les différents types de signaux sont
- sc_signal signal
- sc_signal_resolved signal avec une fonction de
résolution - sc_signal_rvltngt signal de n bits avec une
fonction de résolution -
Fonction de résolution des 4 états 0 gt état
bas Z gt haute impédance 1 gt état haut X gt
indéterminé
Déclaration SC_MODULE (module_name)
// déclaration des signaux du
module sc_signallt type gt signal_nom1 sc_s
ignallt type gt signal_ nom2n
19Structure du langage SystemC linterface
- interface classe C ne comportant que les
déclarations des méthodes (fonctions) d'un canal
auxquelles il est possible daccéder à laide des
ports. - pour un signal 2 interfaces sc_signal_in_ifltTgt
et sc_signal_inout_ifltTgt - pour un buffer 2 interfaces
sc_signal_in_ifltTgt et sc_signal_inout_ifltTgt - pour une fifo 2 interfaces sc_fifo_in_ifltTgt et
sc_fifo_out_ifltTgt - pour un mutex 1 interface sc_mutex_if
- pour un sémaphore 1 interface sc_semaphore_if
- Fonctionnement Les ports et les canaux sont
des classes C qui héritent de leur classe de
base et de la classe de l'interface. - Intérêt différentes interfaces peuvent être
associer à un même canal suivant le niveau
dabstraction.
20Structure du langage SystemC les types de données
Types de données natif ANSI-C
- les types entier
- bool booléen (vrai /faux)
- char, unsigned char caractère, caractère non
signé gt 8 bits - short, unsigned short entier, entier positif
ou nul gt 16 bits - int, unsigned int entier, entier positif ou
nul gt 16 ou 32 bits - long, unsigned long entier, entier positif ou
nul gt 32 bits - les types réels
- float réel gt 32 bits
- double réel double gt 64 bits
- long double réel double gt 80 bits
21Structure du langage SystemC les types de données
Types de données SystemC dédié au matériel
- les types bits
- sc_bit type prenant deux valeurs 0 et 1
- sc_logic type prenant quatre valeurs 0, 1, X
et Z - les vecteurs de bits
- sc_bvltngt extension du type sc_bit à n bits
- sc_lvltngt extension du type sc_logic à n bits
- les types entiers
- sc_intltngt, sc_uintltngt entiers signés et non
signés, sur n bits, n allant de 1 à 64 (inclus) - sc_bigintltngt, sc_biguintltngt extensions de
sc_int et sc_uint à un nombre de bits arbitraire
illimité - les nombres en virgule fixe
- sc_fixedltngt, sc_ufixedltngt les paramètres de
quantification et de dépassement défini à la
compilation - sc_fixltngt, sc_ufixltngt les paramètres de
quantification et de dépassement peuvent être
changés lors de l'exécution
22Structure du langage SystemC les types de données
Types de données SystemC dédié au matériel
- le temps le type sc_time permet dintroduire
une notion temporelle dans le système. Un type
unité de temps sc_time_unit lui est associé
prenant les valeurs sc_fs, sc_ps, sc_ns (unité
par défaut), sc_us, sc_ms ou sc_sec. - horloge le type sc_clock permet de définir une
horloge pour la synchronisation des systèmes. Il
a pour syntaxe - sc_clock nom_horloge("label" , period, unit,
duty_ratio, offset, start_value)
Déclaration SC_MODULE (module_name)
// déclaration du temps sc_time temps(10,
sc_ns) sc_clock horloge("clk" ,
temps) sc_clock horloge_bis("clk2" , 20,
sc_ns, 0.5, 5, true)
23 Plan
- 1 Introduction sur le langage SystemC
- 2 Structure du langage SystemC
- 3 Lenvironnement de simulation
- 4 Un exemple la porte NAND
24Lenvironnement SystemC_Win
SystemC_Win est un environnement dédié au langage
SystemC permettant la modélisation, la
compilation et lexécution de projets en SystemC.
SystemC_Win permet également de visualiser les
signaux modélisés dans le format vcd
25Lenvironnement SystemC_Win
Composition dun projet SystemC
- Lensemble des fichiers de nos projets se trouve
sous le répertoire - C\Program Files\SystemC_Win\Projects.
- Chaque projet comprend
- un ou plusieurs fichiers .h décrivant
lapplication - un ou plusieurs fichiers .cpp décrivant
lapplication - un fichier stimuli.h décrivant les différents
stimuli - un fichier stimuli.cpp affectant les signaux
- un fichier main.cpp (programme principal)
-
- Après compilation, un fichier .vcd
décrivant les signaux demandés est généré. Il
correspond au chronogramme du projet.
26Lenvironnement SystemC_Win
Composition dun projet SystemC
27Lenvironnement ModelSim de Mentor Graphics
ModelSim Version 6
28Lenvironnement ModelSim de Mentor Graphics
Composition dun projet SystemC
- Lensemble des fichiers sont regroupés au
sein dun projet sous ModelSim - Chaque projet comprend
- un ou plusieurs fichiers .h décrivant
lapplication - un ou plusieurs fichiers .cpp décrivant
lapplication - un fichier stimuli.h décrivant les différents
stimuli - un fichier stimuli.cpp affectant les signaux
- un fichier main.h (module TOP)
- un fichier main.cpp (programme principal)
- Après compilation, une étape dassociation
(link) est nécessaire
29 Plan
- 1 Introduction sur le langage SystemC
- 2 Structure du langage SystemC
- 3 Lenvironnement de simulation
- 4 Un exemple la porte NAND
30Lexemple de la porte NAND
NAND.h
Main.h
NAND_ stimuli.h
systemc.h
NAND.cpp
Main.cpp
NAND_ stimuli.cpp
31Lexemple de la porte NAND
Description du comportement NAND
/ fichier nand.h / include ltsystemc.hgt SC_M
ODULE(NAND) sc_inltboolgt A,
B sc_outltboolgt S void COMPORTEMENT()
SC_CTOR(NAND) SC_METHOD
(COMPORTEMENT) Sensitive ltltA ltltB
32Lexemple de la porte NAND
Description du module NAND
/ fichier nand.cpp / include
ltsystemc.hgt include "nand.h" // description du
module NAND void NANDCOMPORTEMENT() //
ClasseMéthode S ! (AB) //
SNOT(A.B)
33Lexemple de la porte NAND
Description du comportement NAND_Stimuli
/fichier nand_stimuli.h/ include
ltsystemc.hgt SC_MODULE(STIMULI)
sc_in_clk clk
sc_outltboolgt s1,s2 void STIM
() SC_CTOR(STIMULI) SC_CTHREAD
(STIM, clk.pos())
34Lexemple de la porte NAND
Description du module NAND_Stimuli
/ fichier nand_stimuli.cpp / include
ltsystemc.hgt include "nand_stimuli.h" //
description du module STIMULI void
STIMULISTIM() // ClasseMéthode
wait() s1 1 wait() s2 1
wait() s1 0 wait() s2 0
wait() s1 1 s2 1 wait() s2
0 wait() s1 0 wait(8)
sc_stop() // Pas nécessaire sous
ModelSim
35Lexemple de la porte NAND
Description du Main
/ fichier main.cpp / include
ltsystemc.h" include nand.h include
nand_stimuli.h int sc_main (int argc , char
argv) // signals sc_clock
clk("clk", 2, SC_NS, 0.5) // clk (name,
period ,unit,ratio) sc_signalltboolgt in1
sc_signalltboolgt in2 sc_signalltboolgt
out1 // instanciate NAND
nand1("NAND") STIMULI stimuli1("STIMULI")
nand1.A(in1) stimuli1.clk(clk)
nand1.B(in2) stimuli1.s1(in1)
nand1.S(out1) stimuli1.s2(in2)
36Lexemple de la porte NAND
Description du Main (suite)
// tracing sc_trace_file tf
// declaration dun fichier tf tf
sc_create_vcd_trace_file("trace")
// creation du fichier trace.vcd
((vcd_trace_file)tf)-gtsc_set_vcd_time_unit(-9)
// spécification de l unité de tps (ns)
sc_trace(tf, clk.signal(), "clk")
sc_trace(tf, in1, "in1") sc_trace(tf, in2,
"in2") sc_trace(tf, out1, "out") //
initialize in1 0 in2 0 out1
1 // start simulation sc_start(-1)
sc_close_vcd_trace_file(tf) return
0
37Lexemple de la porte NAND
Description du Main sous ModelSim
/ fichier main.h / include
ltsystemc.hgt include "nand.h" include
"nand_stimuli.h" SC_MODULE (TOP) //
signals sc_clock clk sc_signalltboolgt
in1 sc_signalltboolgt in2
sc_signalltboolgt out1 //
instanciate NAND nand1 STIMULI
stimuli1 void TOPINIT()
in1 0 in2 0 out1
1
38Lexemple de la porte NAND
Description du Main sous ModelSim
SC_CTOR(TOP) clk("clk", 2, SC_NS,
0.5), in1 ("in1"), in2
("in2"), out1 ("out1"), nand1
("nand1"), stimuli1("STIMULI")
nand1.A(in1)
nand1.B(in2) nand1.S(out1)
stimuli1.clk(clk)
stimuli1.s1(in1)
stimuli1.s2(in2)
39Lexemple de la porte NAND
Description du Main sous ModelSim
/ fichier main.cpp / include
ltsystemc.hgt include main.h
SC_MODULE_EXPORT(TOP)