B. Miramond M2 S2IC/ESA
B. Miramond - UCP
Plan du chapitre
I. II. III. IV. Introduction Programmer en SystemC Noyau de simulation Niveaux dabstraction : une mthodologie de conception VI. Modlisation matrielle en SystemC VII. Modlisation TLM VIII. Concepts avancs (30min) (1h30) (1h) (30min) (30min) (1h) (30min)
B. Miramond - UCP
I.
B. Miramond - UCP
Plan de la section I
1. 2. 3. 4. 5. 6.
Motivations Historique Quest ce que SystemC Les concurrents Les librairies SystemC Quelques dfinitions pour dmarrer
B. Miramond - UCP
1) Motivations
Changement dchelle : conception de systmes sur puce. Sur des technos plus anciennes, la conception reliait un microprocesseur, une mmoire et un ASIC (acclrateurs matriels). Des experts ralisaient alors le partitionnement de lapplication entre les parties logicielles et matrielles. Pour la partie Hw, la spcification des ASICs correspondait qqs milliers de portes. Ce qui restait exprimable dans un langage HDL un niveau RTL.
B. Miramond - UCP
RTL description is a way of describing the operation of a synchronous digital circuit. In RTL design, a circuit's behavior is defined in terms of the flow of signals (or transfer of data) between hardware registers, and the logical operations performed on those signals.
Vhdl process(clk) begin if rising_edge(clk) then Q <= not Q; end if; end process;
The term refers to the fact that RTL focuses on describing the flow of signals between registers
B. Miramond - UCP
Et maintenant
plusieurs proc., microcontrleurs 32 bits ou DSP. On-chip memory Acclrateurs matriels pour fonctions ddies Contrleurs de priphriques Le tout reli par un rseau complexe de communication.
A ce niveau de complexit, le partitionnement nest plus vident entre logiciel et matriel. La conception matrielle sexprime en millions de portes.
B. Miramond - UCP
SoC Architecture
Debug port JTAG ARM 946E core ICache DCache HW coprocessor RISC core DMA Controler Boot ROM SDRAM/Flash Multiport memory
Arbiter Bridge
Timer Arbiter
B. Miramond - UCP
Conception cost
Small thin Eng. In House P&R Large block Reuse $ 100.000.000.000
predicted
$ 10.000.000.000
measured
$ 1.000.000.000
$ 100.000.000
$ 10.000.000 1985 1990 1995 2000 B. Miramond - UCP 2005 2010 2015 2020
La prise de dcision de limplantation est repousse car elle doit tre explore. Donc, pour dcrire des systmes encore la fois logiciels et matriels il faut aller au-del du niveau RTL, et ce niveau les HDLs ne sont plus adapts. On parle de conception au niveau systme. Et du besoin de langage de modlisation supportant ce niveau.
B. Miramond - UCP
2) Positionnement du langage
Requirements Specifications HW/SW Behavior Functional Verification Test bench RTL Gates Transistor
B. Miramond - UCP
Verilog
VHDL
Objectifs
Environnement unifi de description matriel et logiciel Explorer les solutions de conception en travaillant un niveau systme
B. Miramond - UCP
Rseau de processus communiquant (HDL) Supportant diffrents modles de traitements (MoCs) Permettant de modliser des systmes logiciels et matriels
Cest aussi un environnement de simulation temporelle (eventdriven simulation, cf. HDL). Bas sur une librairie de classes C++
Open Source
SystemC nest pas une mthodologie, mais vous avez besoin dune mthodologie pour lutiliser !
B. Miramond - UCP
Mthodologie de conception
Spcifications
Software (C/C++)
Modle TLM
Cosimulation
Software
Testbench
Quelques dfinitions
Niveau dabstraction = est un niveau de description dun systme apportant un niveau de dtails donnes. Un flot de conception est une succession de niveaux dabstraction. Raffinement = Le raffinement est le mcanisme permettant de passer dun niveau dabstraction un autre. Celui-ci doit tre le plus possible automatisable. Spcification excutable = est un modle fonctionnel qui fournit le comportement dun composant quelque soit le niveau dabstraction et de manire indpendante de limplmentation (plateforme).
B. Miramond - UCP
Spcification et conception diffrents niveaux dabstraction Intgration de portions de logiciel embarqu, la fois sous la forme de modles et de code : rutilisation, Cration de spcification excutables. Cration de plateformes excutables sur lesquelles seront mappes les spcifications. Simulations rapides pour permettre lexploration de lespace de conception (spcifications + plateformes) Structuration des modles autorisant la sparation de la fonctionnalit et de la communication
B. Miramond - UCP
Proprits supplmentaires
Bas sur un langage de programmation existant pour bnficier des outils de compilation, de debug, Un langage orient objet fournirait les mcanismes de base pour la flexibilit des modles et la rutilisation. (hritage, templates)
B. Miramond - UCP
4) Historique
Synopsys- SCENIC IMEC CoWare N2C Master-Slave Lib Channels Bug fix Dynamic Processes RTOS / Software SystemC 1.0 SystemC 1.2.1 Beta SystemC 2.0 SystemC 2.0.1 SystemC 2.1 puis 2.2 SystemC 3.0 B. Miramond - UCP LWG / OSCI Adelante AJRT Lib Fixed Point Types
Future
4) Les concurrents
Sur le crneau de la modlisation niveau systme : SpecC D. Gajski de lUniversit de Irvine
OCAPI - IMEC
Cynlib CynApps
B. Miramond - UCP
Ajoute de fonctionnalits pour la vrification des design (Cadence) Langage de dveloppement de testbench (Testbuilder) Constrained randomization, introspection, transaction recording http://www.testbuilder.net Extension de SystemC pour la description de processeurs http://www.archc.org Protocole de communication http://www.systemc.org Free peer-reviewed portable C++ source libraries http://www.boost.org
B. Miramond - UCP
Master/Slave library
Bibliographie
Books System Design with SystemC (4th edition), Grtker et al., Kluwer Academic Publisher, 2004
From the ground-up (SystemC 2.1), D. Black & J. Donovan, Kluwer Academic Publisher, 2005
Transaction level modeling with SystemC : TLM concepts and applications for embedded systems, by Frank Ghenassia, Springer 2005.
SystemC kernel extensions for heterogeneous system modeling : a framework for Multi-MoC modeling & simulation, by Hiren D. Patel and Sandeep K. Shukla, 2004
Ensea, dispo
Weblinks http://www.systemc.org
B. Miramond - UCP
I. Programmer en SystemC
B. Miramond - UCP
Plan de partie II
1. 2.
1.
1.
Sensibilit
1. 2. 3. 4.
3.
1. 2. 3. 4.
2. 3. 4.
4. 5.
1. 2.
Processus vnements
sc_events notification
B. Miramond - UCP
1. Architecture du langage
http://www.systemc.org
B. Miramond - UCP
Standard Channels
Kahn Process Network, Static Dataflow, Etc.
Elementary Channels
Signal, Timer, Mutex, FIFO
Core Language
Modules Ports Processes Events Interfaces Channels
Data-Types
4-valued logic types (O1XZ) 4valued logic vectors Bits and bit-vectors Arbitrary-precision integers Fixed point numbers C++ user-defined types
Architecture de SystemC
User Applications
Standard Channels
Kahn Process Network, Static Dataflow, Dataflow, Etc.
Elementary Channels
Signal, Timer, Mutex, FIFO
Core Language
Modules Ports Processes Events Interfaces Channels
Data-Types
4-valued logic types (O1XZ) 4valued logic vectors Bits and bit-vectors Arbitrary-precision integers Fixed point numbers C++ user-defined types
SystemC Standard
WorkStation Environment
B. Miramond - UCP
g++ -I$ (SYSTEMC) /include \ -L$ (SYSTEMC) /lib-$ (ARCH) lsystemc \ $(SRC) systemc
STL
Le rsultat contient la fois votre code applicatif et le code de la machine de simulation SystemC !!
File1.h File1.cpp Filen.h Filen.cpp systemc.h File1.o Filen.o
g++
ld
.exe
B. Miramond - UCP
2. Structures
Processes (Concurrency) Modules (Structure) Channels (Communication) Events (time, Spares synchronisation) Port (Structure) Fonctionnalit Communication Interfaces (Communication Data types (Hardware, / Traitement refinement) fixed point)
Module P2
P3
a. Modules
sc_module
B. Miramond - UCP
Cette dclaration cre une nouvelle classe dobjets de type Adder. Les dfinition sont ralises dans des fichier .CPP. Les dclaration dans des fichiers .H
B. Miramond - UCP
Instanciation de SC_MODULE
Les SC_MODULE peuvent tre instancis lors de la phase dlaboration uniquement (cf. section III) En prcisant un nom de module Avec la syntaxe suivante : Adder MyAdder(MyAdder);
B. Miramond - UCP
En modlisation matriel classique (RTL), le signal est le moyen de communication entre processus. Au niveau systme, le moyen de communication na pas encore dimplantation tablie (bus Hw, appel de service logiciel comme FIFO, mutex). SystemC offre cette flexibilit par la sparation entre
Les canaux qui sont le moyen de transmission des donnes Les interfaces qui fournissent les prototypes des services daccs au canal Les ports qui sont une instanciation des interfaces dans un module client.
B. Miramond - UCP
a. Interfaces
Un canal exporte son interface travers la classe abstraite sc_interface. Linterface spcifie donc uniquement la signature (le prototype) des oprations/services fournies par son canal.
Rappel : Les sc_interface sont des classes templates C++. Une classe template permet de paramtrer le type des donnes quelle manipule en placant le type entre <T>.
B. Miramond - UCP
Exemple
sc_signal_in_if<T> Drive directement de sc_interface et est paramtre par le type T. Elle ne fournit quun seul service : read() qui retourne une rfrence la valeur de type T. sc_signal_inout_if<T> Celle-ci fournit en plus une fonction virtuelle write() qui prend en paramtre la valeur placer. Cette seconde interface drive de sc_signal_in_if et hrite donc de la fonction read().
B. Miramond - UCP
sc_interface register_port()
(virtual)
class sc_signal_in_if : virtual public sc_interface { public : virtual const T& read() = 0; }
sc_signal est utilis pour la communication lintrieur dun module entre processus.
// dclaration
// Affectation
b. Ports
Les ports sont utiliss comme dclaration de connexion un canal via son interface. La dclaration doit spcifier linterface laquelle il correspond. Dclaration
Exemple (suite)
class Adder : public sc_module { // Ports, processes, internal data sc_in <int> a; sc_in <int> b; sc_in <int> c; Adder (sc_module_name name, int other_param) : sc_module(name){ // Body of constructor : // Process declaration, sensitivities } };
Adder
La dclaration des ports doit intervenir en premier dans le module!! Et lordre a une importance.
B. Miramond - UCP
c. Channels
sc_channel
Alors que les ports et interfaces dfinissent quelles fonctions sont disponibles, le canal dcrit limplmentation de ces fonctions. Tous les canaux hritent de sc_prime_channel. La classe canal doit grer les accs multiples (tel que sur un bus). Ses mthodes daccs suivent un schma dit : Request-Update
B. Miramond - UCP
d. Hierarchical Channels
Plusieurs canaux peuvent implmenter la mme interface. Ainsi, un primitive channel ne contient pas dautres structures SystemC (modules, process). Au contraire, il est parfois ncessaire de modliser des structures de communication plus complexes :
Le standard OCB = On-Chip Bus de VSIA : Arbitrer Control Program Unit Decoder Unit
Lavantage des ports et interfaces est donc clair, ils permettent de dcoupler linterface de son implmentation et donc de raffiner les communications (par ex.) dun B. Miramond - UCP un canal hirarchique. canal simple
4. Processus
Process
La nature parallle des systmes lectronique ncessite la description de fonctionnalits concurrentes. A process SystemC doit tre contenu dans un module. Le code associ au process doit tre une fonction membre du SC_MODULE Les processus accdent aux canaux extrieurs par lintermdiaire des ports de leur module.
B. Miramond - UCP
Exemple (suite)
class Adder : public sc_module { // Ports, processes, internal data sc_in <int> a; sc_in <int> b; sc_out<int> c;
Adder
void compute (){ c = a + b; } SC_HAS_PROCESS(Adder); Adder (sc_module_name name, int other_param) : sc_module(name){ // Process declaration, sensitivities SC_METHOD(compute); sensitive << a << b; } };
B. Miramond - UCP
Piges
Le fait de dclarer une nouvelle mthode dans un SC_MODULE ne fait pas delle un process. Cest lappel SC_METHOD qui enregistre la mthode en paramtre auprs du scheduler de SystemC. Cet enregistrement (lappel SC_METHOD) ne peut tre fait qu la phase dlaboration, pas pendant la simulation. Les SC_METHOD ne peuvent tre intrrompus, il ne doivent donc pas contenir de boucle infinies !!
B. Miramond - UCP
SC_METHOD()
Processus ne pouvant tre interrompus (ils ne peuvent appel wait()) Le code doit tre fonction membre dun SC_MODULE Le plus rapide la simulation. Processus pouvant tre interrompus (par wait) Ses variables sont persistantes (contrairement au SC_METHOD) Le code nest pas ncessairement fonction membre du module Autorise la cration dynamique de processus, donc aprs la phase dlaboration. Le code nest pas ncessairement fonction membre du module
SC_THREAD()
B. Miramond - UCP
Structure of a process
SC_METHOD : simulation engine call them repeatedly void my_process (){ // run to completion scheme // treatment } SC_THREAD : void my_thread(){ // infinite loop scheme while (1){ // treatment wait(); // static event } }
B. Miramond - UCP
5. Events
Un processus dispose dune liste de sensibilit dcrivant les vnements auxquels il doit ragir. Lorsque lexcution dun processus rencontre un wait(), il est interrompu. Il attend le dclenchement (implicite) dun des vnements de sa liste de sensibilit statique. Lorsquun de ses vnements est dclench, le scheduler place le Thread dans la liste des processus READY.
B. Miramond - UCP
a. sc_event
sc_event e;
Il na ni dure, ni valeur. Lacte dindiquer une modification dun vnement est appel notification.
e.notify(); notify(e);
Lvnement garde une liste des processus qui lui sont sensibles (par wait(e)). Lorsque un event est notifi, il informe le scheduler des processus (re)lancer.
B. Miramond - UCP
b. Notification
Immediate : e.notify();
Notification immdiate, le processus en attente est replac immdiatement dans la liste Ready Notification aprs un cycle dvaluation appel Delta-cycle, lorsque tous les processus en attente se seront excuts. Place lvnement en fil dattente jusqu la dure indique.
B. Miramond - UCP
Delta_delay : e.notify(SC_ZERO_TIME);
6. Sensitivity
a. Sensibilit statique =
La liste des vnements dactivation dun process est dtermin avant la simulation (dans les constructeurs). sensitive << a << b; Permet de remplacer la liste statique par un vnement dsign lors de la simulation. Le processus nest alors plus sensible aux vnements de sa liste statique. wait(e);
B. Miramond - UCP
b. Sensibilit dynamique =
Exemple (suite)
class Adder : public sc_module { // Ports, processes, internal data sc_in <int> a; sc_in <int> b; sc_out<int> c;
Adder
Cas particulier : Ici a et b sont des sc_ports. void compute (){ La sensibilit se fait par c = a + b; lintrmdiaire de la } fonction default_event SC_HAS_PROCESS(Adder); associe. Adder (sc_module_name name) : sc_module(name){
// Process declaration, sensitivities SC_METHOD(compute); sensitive << a << b; } };
B. Miramond - UCP
c. Composition dvnements
Conjonction :
wait (e1 & e2 & e3); ou wait (timeout | e1 | e2); Activation si les 3 event sont dclenchs
Disjonction :
wait(e1 | e2 | e3); ou wait (timeout | e1 | e2); Activation si 1 des 3 event est dclench ou bien un timeout Il nest pas possible de savoir quel vnement a provoqu le dclenchement. Par contre il est possible de savoir si cest le timeout :
B. Miramond - UCP
7. Final Example
A la manire des classes et des objets, les modles sont opposs aux instances (de modules et de canaux) en SystemC comme en HDL. Exemple hirarchique :
in1 in2 in3
Adder1
sum
Adder2
Add3
B. Miramond - UCP
class Add3 : public sc_module { sc_in<int> in1; sc_in<int> in2; sc_in<int> in3; sc_out<int> sum;
// signal (channel) interne
temp
sum
Adder2
Add3
temp;
Add3(sc_name name) : sc_module(name){ adder 1 = new Adder(Adder1); (*adder1)(in1, in2, temp); // Connectique forme positionnelle adder 2 = new Adder(Adder2); adder2->a(temp); adder2->c(sum); adder2->b(in3); } }
B. Miramond - UCP
int sc_main(int argc, char* argv[]){ // initialisation // simulation top_level(); // Nettoyage des structures return 0; } top_level(){ sc_signal <int> sig_a, sig_b, sig_c; Add3 my_adder(my_adder); //Autres modules et tesbenchs qui positionnent // les valeurs de sig_a et sig_b
temp
in1 in2 in3
Adder1
sum
Adder2
Add3
//Lance la phase dElaboration puis celle de Simulation //Excution durant 1000 secondes (de temps de simulation) sc_start(1000, SC_SEC); //Suite de la simulation pendant 100 ms sc_start(100, SC_MS); }
B. Miramond - UCP
8. Debugging
#include systemc.h Class nand2 : public sc_module { sc_port<sc_signal_in_if<bool>, 1> A; sc_in<bool> B; sc_out<bool> F; void do_nand2(){ F.write( !(A.read() && b.read()) ); } SC_HAS_PROCESS(nand2); nand2 (sc_name name) : sc_module(name){ // Constructor SC_METHOD(do_nand2);// register do_nand2 with scheduler sensitive << A << B; } };
B. Miramond - UCP
2-input xor
F = A B = ( A + B).( A + B )
A S2 F S1 S3
B. Miramond - UCP
xor2(sc_name name) : n1(N1), n2(N2), n3(N3), n4(N4) class xor2 : public sc_module { { n1.A(A); sc_in<bool> A, B; n1.B(B); sc_out<bool> F; n1.F(S1); nand2 n1, n2, n3, n4; sc_signal<bool> S1, S2, S3;
A S2 F S1 S3
a. Debug Environnement
A S2
xor2
F S1 S3
Stimuli Generator
B
Monitor
B CK
Clock
B. Miramond - UCP
#include systemc.h class stim : public sc_module{ sc_out<bool> A, B; sc_in_clk Clk; void StimGen(){ A.write(false); B.write(false); wait(); A.write(false); B.write(true); wait(); A.write(true); B.write(false); wait(); A.write(true); B.write(true); wait(); sc_stop(); } SC_HAS_PROCESS(stim); stim(sc_name name) : sc_module(name){ SC_THREAD(StimGen); sensitive << Clk.pos(); } };
#include systemc.h #include <iomanip.h> class monitor : public sc_module{ sc_in<bool> A,B, F; sc_in<bool> Clk; void do_monitor(){ cout << setw(10) << time; cout << setw(2) << A; // while(true){ cout << setw(10) << sc_time_stamp(); cout << setw(2) << A.read(); // wait(); } } SC_HAS_PROCESS(monitor); monitor(sc_name name) : sc_module(name){ SC_THREAD(monitor): sensitive << Clk.pos(); } };
B. Miramond - UCP
b. Testbench results
#include systemc.h #include stim.h #include exor2.h #include mon.h int sc_main (){ sc_signal<bool> ASig, BSig, FSig; sc_clock TestClk(TestCk, 10, SC_NS, 0,5); stim Stim1(Stimulus); exor2 DUT(exor2); monitor Monitor1(Monitor); // Connection with ASig, BSig et FSig sc_start(); // run forever return 0; }
B. Miramond - UCP
Time A B F ,,,,,,1 ns 0 0 0 11 ns 0 0 0 21 ns 0 1 1 31 ns 1 0 1 41 ns 1 1 0
#include systemc.h #include stim.h #include exor2.h #include mon.h int sc_main(int argc, char *argv[]){ sc_signal<bool> ASig, BSig, FSig; sc_clock TestClk(TestClock, 10, SC_NS, 0,5, 1, SC_NS); instance of stim exor2 DUT(exor2); DUT.A(ASig); DUT.B(BSig); DUT.F(FSig); instance of monitor sc_trace_file* Tf; Tf = sc_create_vcd_trace_file(traces); Tf->set_time_unit(1, SC_NS);
//deprecated : //((vcd_trace_file*)Tf)->sc_set_vcd_time_unit(-9);
c. Waveform tracing
Declare the trace Create trace file (optional : specify the trace time unit) Register signals or variables for tracing (even hierarchically : DUT.S1) // DUT = Design Under Test
sc_trace(Tf, ASig, A); sc_trace(Tf, BSig, B); sc_trace(Tf, FSig, F); sc_trace(Tf, DUT.S1, S1); sc_trace(Tf, DUT.S2, S2); sc_trace(Tf, DUT.S3, S3); sc_start(); sc_close_vcd_trace_file(Tf); return 0;
d. Resulting waveforms
B. Miramond - UCP
B. Miramond - UCP
Concurrence simule
Lobjectif du scheduler SystemC est de simuler lexcution parallle de la plateforme matrielle dcrite bien que la simulation tourne sur une station de travail mono-processeur. La concurrence simule en SystemC nest pas premptive, cest le code de chaque processus qui redonne la main au scheduler (wait).
B. Miramond - UCP
Section organisation
1. 2. 3.
1. 2. 3. 4. 5. 6.
4. 5.
1. 2. 3.
6.
Le simulateur SystemC est discret. Il utilise un quantum de temps minimal qui peut tre dfinit par sc_set_time_resolution(int, sc_time_unit) Par dfaut, la plus petite rsolution du temps est 1 picoseconde (10-12s) SystemC dfinit un type numr des units de temps, sc_time_unit :
Default
B. Miramond - UCP
SC_TIME
sc_time est le type utilis pour dclarer des variables de temps Dclaration : sc_time t1(42, SC_PS);
sc_time sc_time_stamp()
retourne le temps courant de simulation double sc_simulation_time() retourne le temps courant de simulation en unit de temps par dfaut
B. Miramond - UCP
Un label, La priode de lhorloge : valeur + unit Le temps pass ltat haut La date du premier front Et un boolen indiquant si le premier front est montant ou descendant.
Services de lhorloge
En SystemC les horloges sont des canaux hirarchiques, Ils offrent les services suivants : period(); // returns sc_time duty_cycle(); // returns a double (fraction of the period) posedge(); // returns a reference to the positive clock edge; negedge(); // negative read(); // return the current value event(); // detects if there has been a change on clock posedge_event(); // returns an event notification for pos clock edge negedge_event(); // returns an event notification for neg clock edge B. Miramond - UCP
Ports ddis
Un module peut utiliser les ports ddis de lhorloge pour pouvoir tre synchrone :
sc_in_clock sc_out_clock sc_inout_clock
Ce ne sont rien de plus que des sc_in<bool> Mais ils fournissent les mthodes pos() et neg() qui font appel pos_edge_event() et neg_edge_event()
B. Miramond - UCP
2. Scheduler SystemC
B. Miramond - UCP
sc_main()
3. Simulation steps
.notify(); // immediate
sc_start();
Initialize
Evaluate
Cleanup
.notify(SC_ZERO_TIME); // delayed
B. Miramond - UCP
.notify(t); // timed
Simulation steps
Elaboration
Les modules SystemC sont construits Les SC_METHOD et SC_THREAD sont cres. Dbute aprs lappel sc_start() Les processus cres llaboration sont lancs. Tous les processus sont placs dans la file READY. Les processus sont excuts en fonction de leur sensibilit Time management Clean objects and structures
B. Miramond - UCP
Initialisation
Evaluate-Update
Advance time
Cleanup
Rappel
Ils ne sont excuts quune seule fois, mais peuvent tre interrompus.
Tous les SC_METHOD ont une liste statique et sont re-dclench chaque nouvelle notification.
B. Miramond - UCP
Files dattente duDurant son excution, un scheduler processus peut raliser des a. Delayed notification notifications qui rveillent dautres
Ready P1 P2 P3 Running P4 processus en attente (Waiting). Events Waiting P5 P6 Un par un, les processus sont pris alatoirement de la file Ready et dsigns Aprs un Delta-cycle comme Running jusqu rencontrer un wait() ou un return().
B. Miramond - UCP
sc_main()
Simulation steps
Elaboration
Les processus attendant un vnement notifi avec un dlai SC_ZERO_TIME(.notify(0)) sont replacs dans la file Ready au prochain cycle de simulation. Ce cycle est appel Delta-Cycle Delay.
sc_start();
Initialize
Evaluate
Advance Time
Cleanup
.notify(SC_ZERO_TIME); // delayed
B. Miramond - UCP
b. Timed notification
Ready P1 P2 P3 Aprs un temps t1 Running P4 Waiting P5 P6 Events E1@0 E2@t1 E3@t2 E4@()
B. Miramond - UCP
sc_main()
Simulation steps
Elaboration
Les processus attendant un vnement notifi avec un dlai non-nul sont placs dans la file Waiting et le temps est avanc jusquau temps du premier vnement de la liste. A cet instant les processus en attente sont placs en file Ready.
sc_start();
Initialize
Evaluate
Advance Time
Cleanup
.notify(t); // timed
B. Miramond - UCP
c. Immediate notification
Ready P1 P2 P3 Dans le mme cycle Running P4 Waiting P5 P6 Events E1@0 E2@t1 E3@t2 E4@()
B. Miramond - UCP
sc_main()
Simulation steps
sc_start();
Initialize
Evaluate
Cleanup
Une notification immdiate place directement les processus en attente durant le mme delta-cycle. Ceci peut se produire plusieurs fois jusqu rencontr une notification time.
B. Miramond - UCP
Initialisation Evaluation Sil y a encore des processus prt, retour en 2 Update Sil y a eu des notifications Delta-cyle, dterminer les processus READY et retour en 2. Sil ny a plus de non-Zero notifications, la simulation est termine Sinon, avancer le temps au prochain temps de notification Dterminer les processus READY, retour en 2.
B. Miramond - UCP
e. La fonction dont_initialize()
Normallement tous les processus sont excuts la premire fois durant la phase dinitialisation. SystemC permet de spcifier que certains processus ne seront pas excuts cette phase :
La fonction ncessite une liste de sensibilit statique !! Sinon, le processus ne sera pas dmarr.
B. Miramond - UCP
f. End of simulation
1.
2.
3.
sc_start(argument); // where argument precise the amount of simulation time. Only used with timed models !! sc_stop(); // inside a component. It terminates simulation when a specified functional condition is atteined. Too local ! Terminator module, which call the sc_stop() primitive only when the logical sum of products on the endproces boolean condition is true. Global untimed halt condition.
B. Miramond - UCP
Les canaux simples utilisent une procdure de mise jour particulire appele : request_update/update scheme. Ce schma permet de construire des canaux supportant des changements dtat intervenant sur des dures infinitsimales (Cycle) et donc dexprimer la concurrence son niveau le plus prcis.
B. Miramond - UCP
Exemple 1
On cherche swapper la valeur prsente dans 2 registres au moment de lhorloge. Si on modlise les registres par des variables, il est ncessaire dutiliser une 3e variable temporaire pour faire le swap. Si on utilise des signaux, 2 sont suffisants car lcriture et la lecture ne se font pas dans le mme cycle.
B. Miramond - UCP
Exemple 2
Reg1
Q1 DATA D Q D Q
Reg2
Q2
Reg3
Q3 D Q
Reg4
Q4 D Q
SYNC
Pour que la fonctionnalit soit respecte, Lordre est important Chaque registre est un processus indpendant. Or le simulateur ne prcise aucun ordre sur les processus.
B. Miramond - UCP
Lors dune criture, 3. le signal place la valeur dans New value 4. Puis le processus appelle request_update() pour que le simulateur appelle son tour la fonction update() du canal lors de la prochaine phase. 5. Lorsque la phase dvaluation est rellement termine (il ny a plus de processus en tat Ready), le simulateur appelle update() pour chaque canal ayant fait un appel request_update(). 6. Le canal recopie la nouvelle valeur et notifie un sc_event pour indiquer un changement de valeur. Donc si un process crit sur un signal et lit immdiatement, il trouvera la valeur inchang !!
B. Miramond - UCP
New/Current value
Delta-Cycle
New Value
S1 = V2
Current Value
S1= V0 S2= V1
Canaux
S2 = V3
Update()
B. Miramond - UCP
sc_main()
sc_start();
Initialize
Evaluate
Cleanup Update
B. Miramond - UCP
// Declaration Int count; sc_string message_tmp; sc_signal<int> count_sig; sc_signal<sc_string> message_sig; // Intializing during first delta cycle count_sig.write(10); message_sig.write(Hello); count = 11; message_temp = Bonjour; print_state(count, count_sig, message_temp, message_sig); wait(SC_ZERO_TIME); // 2nd delta cycle count = 20; count_sig.write(count); print_state(count, count_sig, message_temp, message_sig); wait(SC_ZERO_TIME); // 3rd delta cycle message_sig.write(message_temp = New message); print_state(count, count_sig, message_temp, message_sig);
B. Miramond - UCP
Exemple
// Konsole
// First delta cycle count is count_sig is message_temp is message_sig is // 2nd delta cycle count is count_sig is message_temp is message_sig is // 3rd delta cycle count is count_sig is message_temp is message_sig is
Guide dutilisation
2.
3. 4.
Utiliser comme convention de nommage pour les signaux avec le suffixe _sig Lire tous les ports et signaux dans une variable locale Raliser les traitements sur ces variables locales crire le rsultat sur les ports et les signaux
Ce schma correspond dire que la mise jour de ces signaux est retarde dun Delta-cycle. Ce schma ne sapplique quaux canaux primitifs, mais pas tous :
sc_signal sc_fifo mais pas sc_mutex et sc_semaphore (cf. section IV)
B. Miramond - UCP
B. Miramond - UCP
B1; B2;
B3; B4;
B5; B6;
C1; C2;
C3; C4;
C5; C6;
C
D1; D2; D3; D4;
D
t1 t2
B. Miramond - UCP
t3
C3; C4;
C5; C6;
D3; D4;
D
t1 t2
B. Miramond - UCP
t3
A
B1; B2; B3; B4;
Les oprations qui apparaissent concurrentes lutilisateur sont squences B5; B6; par le scheduler SystemC. B1; B2; Cet ordre est dterministe mais non prvisible ! C5; C6; C1; C2;
C1; C2;
C3; C4;
C
D1; D2; D4; D1; D2;
D
Rq: Extansion du temps t1 t2
B. Miramond - UCP
t3
6. Event-based simulators
VHDL, Verilog
B. Miramond - UCP
End of Green
B. Miramond - UCP