HM-ES-th1 Les 12 Hardware/Software Codesign with SystemC.

Slides:



Advertisements
Verwante presentaties

Advertisements



HM-ES-th2 Les 9 en 10 Electronic System Level Design and Verification.

Embedded systemen Embedded software.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Een programma opbouwen.
Componenten van een algoritme Variabelen en hun Inhoud Instructies Sekwenties (van instructies) Selecties (tussen instructies) Herhalingen (van instructies)
HM-ES-th1 Les 9 Hardware/Software Codesign with SystemC.
HM-ES-th1 Les 4 Hardware/Software Codesign with SystemC.
ETHOS PROJECT: PROGRESS Follow-up & feedback end of year 1.
Gestructureerd programmeren in C
1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware.
Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.
Van domeinklasse tot implementatie
GESPRG Les 14 Gestructureerd programmeren in C. 174 Details! The devil is in the details.
Het ontwerpen van een klasse
Priva creating a climate for growth. Priva creëert duurzame oplossingen voor de groeiende vraag naar schaarse hulpbronnen als energie en water door met.
PROS2 Les 14 Programmeren en Software Engineering 2.
HM-ES-th1 Les 1 Hardware/Software Codesign with SystemC.
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Hoofdstuk 6: Controle structuren
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 10: Omgaan met problemen.
Systeemsoftware Hfdst 2
Numerieke Natuurkunde
Informatica in de Tweede fase Havo en VWO. De uitgangspunten Informatica is een vak in de vrije ruimte voor de havo 240 slu (voor het vwo 280 slu) het.
Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 6.
Algoritmen en Datastructuren (ALDAT) EVMINX4 Dagdeel 2.
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
Real-Time Systems (RTSYST) Week 2. Process/Thread states Scheduler = deel van OS dat de toestanden van processen/threads bepaald. OS gebruikt timerinterrupt.

HM-ES-th1 Les 3 Hardware/Software Codesign with SystemC.
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
3D scannen de markt en de praktijk 3D scanservice & advies Uw toepassing Ons advies.
Wiskunde D op de UvT Herbert Hamers. Aktiviteiten 1.Ontwikkeling onderwijsmateriaal keuzeonderwerpen Keuzeonderwerp 1: Speltheorie (UvT) Keuzeonderwerp.
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
JAVA1 H 22. COLLECTIONS FRAMEWORK. 1. INLEIDING. Collections framework Is een verzameling van data structuren, interfaces en algoritmen Meest voorkomende.
6.1 Inleiding HOOFDSTUK 6 METHODEN
P. 1 Vakgroep Informatietechnologie Scanf voorbeeld #include int main(void) { int i=-1,j=-1,k=-1,l=-1; int b; b=scanf("%d %d %d %d",&i,&j,&k,&l); printf("res=%d.
Het gaspak en de communicatiemiddelen
1/1/ / faculty of Computer Science eindhoven university of technology 5B040:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 9(1): Virtual.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 7 onze.
C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1.
Tircms02-p les 7 systemcalls linux vervolg. Inleiding Onder /usr/include/linux staan bestanden die de linuxkernel o.a. gebruikt om drivers aan te spreken.
Tircms03-p les 6 Templates. Functietemplates void verwissel(int &x, int &y); { int w=x;x=y;y=w;} Dezelfde functie voor meerdere types heet een functietemplate.
Zwaartekracht: Practicum Op punten! (afgeven op het einde van de les)
Datacommunicatie en netwerken
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  programma draaien vanuit ROM.
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Babbage DRO Welkom!.
JAVA: een platformonafhankelijke taal
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag User-defined characters op de.
Programma zonder window commandline interface. Commandline programma public static void main (String [ ] params) { System. out. println (“Hoi allemaal!”);
Woensdag 23 maart 2011 Door: J. Tieman. Vorige les Wat hebben we gedaan?
Java & het Web Programma: Contexts Listeners Scope/Attributes Thread safety.
Embedded systemen Programmeren op de Arduino Les 5 analoge input en motoren.
Embedded systemen Programmeren op de Arduino Les 7 kleuren festijn.
Voorraadwaardering (FIFO)
ICT bij NLT Overpeinzingen en ervaringen. NLT NLT met T van Technology in de naam Keuzevak (in ontwikkeling) Aanbieder is LCP (LOP) met vaksteunpunten.
Nu even niet misschien later wel.
CiviCRM vrijdag 29 mei 2009 Bram Wiercx. Page  2 civiCRM  CiviCRM is –een web-based relationship management systeem –open-source, geen licentiekosten.
Tinpro015b-les6 Templates.
Tinpro015b-les4 Klassen.
geluidsdemping Aan het einde van de les moet je in staat zijn om:
Economische kringloop
Hét e-learning platform voor de techniek
Competentiegericht onderwijs in het Leerwerktraject
– Software development fundamentals
Transcript van de presentatie:

HM-ES-th1 Les 12 Hardware/Software Codesign with SystemC

sc_fifo Een sc_fifo kan gebruikt worden om modules met elkaar te laten communiceren (en synchroniseren). Dit kan dan later als een hardware fifo of als een software fifo worden geïmplementeerd. 71 producerconsumersc_fifo sc_fifo_out sc_fifo_in

Untimed voorbeeld sc_fifo (1 van 4) 72 SC_MODULE(Top) { SC_CTOR(Top): consumer("consumer"), producer("producer"), fifo("fifo", 4) { producer.out(fifo); consumer.in(fifo); } private: sc_fifo fifo; Producer producer; Consumer consumer; };

Untimed voorbeeld sc_fifo (2 van 4) 73 SC_MODULE(Producer) { sc_fifo_out out; SC_CTOR(Producer) { SC_THREAD(main); } private: void main() { for (char c = 'A'; c <= 'Z'; ++c) { out.write(c); } };

Untimed voorbeeld sc_fifo (3 van 4) 74 SC_MODULE(Consumer) { sc_fifo_in in; SC_CTOR(Consumer) { SC_THREAD(main); } private: void main() { char c; do { c = in.read(); cout << "Read: " << c << " number of characters in buffer: " << in.num_available() << endl; } while (c != 'Z'); } };

Untimed voorbeeld sc_fifo (4 van 4) 75

Timed voorbeeld sc_fifo (1 van 4) 76 SC_MODULE(Top) { SC_CTOR(Top): consumer("consumer"), producer("producer"), fifo("fifo", 4) { producer.out(fifo); consumer.in(fifo); } private: sc_fifo fifo; Producer producer; Consumer consumer; };

Timed voorbeeld sc_fifo (2 van 4) 77 SC_MODULE(Producer) { sc_fifo_out out; SC_CTOR(Producer) { SC_THREAD(main); } private: void main() { for (char c = 'A'; c <= 'Z'; ++c) { wait(5, SC_NS); out.write(c); } };

Timed voorbeeld sc_fifo (3 van 4) 78 SC_MODULE(Consumer) { sc_fifo_in in; SC_CTOR(Consumer) { SC_THREAD(main); } private: void main() { char c; do { wait(6, SC_NS); // the consumer is a bit slower than the producer c = in.read(); cout << "Read: " << c << " number of characters in buffer: " << in.num_available() << endl; } while (c != 'Z'); } };

Timed voorbeeld sc_fifo (4 van 4) 79

sc_fifo Een sc_fifo kan ook gebruikt worden om SC_THREADS binnen een module met elkaar te laten communiceren (en synchroniseren). Dit kan dan later als een software fifo worden geïmplementeerd. Bijvoorbeeld als een POSIX message queue. 80

Timed voorbeeld sc_fifo (1 van 2) 81 SC_MODULE(Top) { SC_CTOR(Top): fifo("fifo", 4) { SC_THREAD(producer); SC_THREAD(consumer); } private: void producer() { for (char c = 'A'; c <= 'Z'; ++c) { wait(5, SC_NS); fifo.write(c); } void consumer() { char c; do { wait(6, SC_NS); c = fifo.read(); cout << "Read: " << c << " number of characters in buffer: " << fifo.num_available() << endl; } while (c != 'Z'); } sc_fifo fifo; };

Timed voorbeeld sc_fifo (2 van 2) 82

Channel zelf definiëren Huiswerk: Definieer zelf een channel genaamd pq die zich net zo gedraagt als een sc_fifo maar waarbij bij een read het grootste element (dat zich in de queue bevindt) wordt teruggegeven. Voorbeeld: Definieer zelf een channel genaamd fifo die zich net zo gedraagt als een sc_fifo. 83

FIFO zelf definiëren Wat moeten we doen om zelf een FIFO channel te definiëren (zie SystemC standaard): We moeten een read en een write interface definiëren. Deze interfaces moeten virtual overerven van sc_interface. We moeten een module afleiden van sc_channel. Deze module moet de interfaces implementeren. Waar bewaren we de data? Wat te doen als de fifo vol is? Wat te doen als de fifo leeg is? 84

Voorbeeld fifo (1 van 7) 85 template class fifo_write_if : virtual public sc_interface { public: virtual void write(const element&) = 0; }; template class fifo_read_if : virtual public sc_interface { public: virtual element read() = 0; virtual int num_available() const = 0; };

Voorbeeld fifo (2 van 7) 86 template class fifo: public sc_channel, public fifo_write_if, public fifo_read_if { private: list data; const int max_elements; sc_event write_event, read_event; bool empty() const { return data.size() == 0; } bool full() const { return data.size() == max_elements; } public: fifo(sc_module_name name, int n): sc_channel(name), max_elements(n) { } virtual ~fifo() { }

Voorbeeld fifo (3 van 7) 87 virtual void write(const element& c) override { if (full()) { wait(read_event); } data.push_back(c); write_event.notify(); } virtual element read() override { if (empty()) { wait(write_event); } element c = data.front(); data.pop_front(); read_event.notify(); return c; } virtual int num_available() const override { return data.size(); } };

Voorbeeld fifo (4 van 7) 88 SC_MODULE(Top) { SC_CTOR(Top): consumer("consumer"), producer("producer"), fifo("fifo", 4) { producer.out(fifo); consumer.in(fifo); } private: fifo fifo; Producer producer; Consumer consumer; };

Voorbeeld fifo (5 van 7) 89 SC_MODULE(Producer) { sc_port > out; SC_CTOR(Producer) { SC_THREAD(main); } private: void main() { for (char c = 'A'; c <= 'Z'; ++c) { wait(5, SC_NS); out->write(c); } };

Voorbeeld fifo (6 van 7) 90 SC_MODULE(Consumer) { sc_port > in; SC_CTOR(Consumer) { SC_THREAD(main); } private: void main() { char c; do { wait(6, SC_NS); c = in->read(); cout << "Read: " << c << " number of characters in buffer: " num_available() << endl; } while (c != 'Z'); } };

Voorbeeld fifo (7 van 7) 91

Huiswerk pq (1 van 7) 92 template class pq_write_if : virtual public sc_interface { public: virtual void write(const element&) = 0; }; template class pq_read_if : virtual public sc_interface { public: virtual element read() = 0; virtual int num_available() const = 0; };

Huiswerk pq (2 van 7) 93 template class pq: public sc_channel, public pq_write_if, public pq_read_if { private: priority_queue data; const int max_elements; sc_event write_event, read_event; bool empty() const { return data.size() == 0; } bool full() const { return data.size() == max_elements; } public: pq(sc_module_name name, int n): sc_channel(name), max_elements(n) { } virtual ~pq() { }

Huiswerk pq (3 van 7) 94 virtual void write(const element& c) override { if (full()) { wait(read_event); } data.push(c); write_event.notify(); } virtual element read() override { if (empty()) { wait(write_event); } element c = data.top(); data.pop(); read_event.notify(); return c; } virtual int num_available() const override { return data.size(); } };

Huiswerk pq (4 van 7) 95 SC_MODULE(Top) { SC_CTOR(Top): consumer("consumer"), producer("producer"), pq("pq", 4) { producer.out(pq); consumer.in(pq); } private: pq pq; Producer producer; Consumer consumer; };

Huiswerk pq (5 van 7) 96 SC_MODULE(Producer) { sc_port > out; SC_CTOR(Producer) { SC_THREAD(main); } private: void main() { for (char c = 'A'; c <= 'Z'; ++c) { wait(5, SC_NS); out->write(c); } };

Huiswerk pq (6 van 7) 97 SC_MODULE(Consumer) { sc_port > in; SC_CTOR(Consumer) { SC_THREAD(main); } private: void main() { char c; for (int i = 0; i < 26; ++i) { wait(6, SC_NS); c = in->read(); cout << "Read: " << c << " number of characters in buffer: " num_available() << endl; } };

Huiswerk pq (7 van 7) 98