Filire 1 UV4 conception de systmes numriques le langage SystemC - PowerPoint PPT Presentation

1 / 39
About This Presentation
Title:

Filire 1 UV4 conception de systmes numriques le langage SystemC

Description:

Pourquoi l'utilisation d'un langage de conception au niveau syst me devient indispensable ... les diff rents stimuli. un fichier stimuli.cpp affectant les signaux ... – PowerPoint PPT presentation

Number of Views:105
Avg rating:0.0/5.0
Slides: 40
Provided by: pc75443
Category:

less

Transcript and Presenter's Notes

Title: Filire 1 UV4 conception de systmes numriques le langage SystemC


1
Filiè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

3
Un 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

4
Un langage de conception système SystemC
5
Un 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.

6
Un langage de conception système SystemC
Origines du langage
7
Un langage de conception système SystemC
8
Un 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

10
Structure 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

11
Structure 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
12
Structure 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)
13
Structure 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.
14
Structure 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é.

15
Structure du langage SystemC le processus
Exemple la fonction addition
16
Structure 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
17
Structure 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.

18
Structure 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
19
Structure 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.

20
Structure 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

21
Structure 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

22
Structure 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

24
Lenvironnement 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
25
Lenvironnement 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.

26
Lenvironnement SystemC_Win
Composition dun projet SystemC
27
Lenvironnement ModelSim de Mentor Graphics
ModelSim Version 6
28
Lenvironnement 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

30
Lexemple de la porte NAND
NAND.h
Main.h
NAND_ stimuli.h
systemc.h
NAND.cpp
Main.cpp
NAND_ stimuli.cpp
31
Lexemple 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
32
Lexemple 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)
33
Lexemple 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())
34
Lexemple 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
35
Lexemple 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)
36
Lexemple 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
37
Lexemple 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
38
Lexemple 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)
39
Lexemple de la porte NAND
Description du Main sous ModelSim
/ fichier main.cpp /   include
ltsystemc.hgt include main.h
SC_MODULE_EXPORT(TOP)
Write a Comment
User Comments (0)
About PowerShow.com