Systemy wbudowane. Wykład 6: Modelowanie systemów wbudowanych w SystemC, cz.i struktura specyfikacji. Standard IEEE Open source

Podobne dokumenty
Systemy wbudowane. Architektura środowiska SystemC. Wykład 8: SystemC zasady modelowania systemów wbudowanych

Systemy wbudowane. Poziomy abstrakcji projektowania systemów HW/SW. Wykład 9: SystemC modelowanie na różnych poziomach abstrakcji

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Projektowanie klas c.d. Projektowanie klas przykład

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

I - Microsoft Visual Studio C++

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Część 4 życie programu

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Wstęp do Programowania 2

Szablony funkcji i szablony klas

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Programowanie komputerowe. Zajęcia 4

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

2 Przygotował: mgr inż. Maciej Lasota

Zofia Kruczkiewicz, ETE8305_2 1

ROZDZIAŁ 2. Operatory

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Język C++ Różnice między C a C++

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie 2. Język C++. Wykład 3.

1 Wstęp. 2 Proste przykłady. 3 Podstawowe elementy leksykalne i typy danych. 6 Opis strukturalny. 7 Moduł testowy (testbench)

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Programowanie Obiektowew języku C++ Zadania L4

Podstawy programowania skrót z wykładów:

PARADYGMATY PROGRAMOWANIA Wykład 3

Wykład :37 PP2_W9

Programowanie Obiektowew języku C++ Zadania L4

Programowanie obiektowe

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

PARADYGMATY PROGRAMOWANIA Wykład 2

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Szablony klas, zastosowanie szablonów w programach

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Języki i paradygmaty programowania

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Programowanie komputerowe. Zajęcia 5

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Język C zajęcia nr 11. Funkcje

Programowanie w języku C++

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

JAVA W SUPER EXPRESOWEJ PIGUŁCE

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Język C++ wykład VIII

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Wprowadzenie do języka Java

Programowanie obiektowe

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Programowanie w języku C++

Wprowadzenie do szablonów klas

external Data Representation

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Platformy Programistyczne Podstawy języka Java

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Wykład 3 Składnia języka C# (cz. 2)

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Przeciążenie operatorów

Obsługa wyjątków. Język C++ WW12

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

ALGORYTMY I STRUKTURY DANYCH

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Laboratorium 10 Temat: Zaawansowane jednostki testowe. Operacje na plikach. Funkcje.

Aby w pełni przetestować układ o trzech wejściach IN_0, IN_1 i IN_2 chcemy wygenerować wszystkie możliwe kombinacje sygnałów wejściowych.

Programowanie obiektowe

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Programowanie Procedurale

Operacje wejścia/wyjścia odsłona pierwsza

Programowanie w językach

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Pytania sprawdzające wiedzę z programowania C++

Wstęp do programowania

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Signals + Threads: Qt vs. Boost

Logika Temporalna i Automaty Czasowe

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

Programowanie - wykład 4

Transkrypt:

Systemy wbudowane Wykład 6: Modelowanie systemów wbudowanych w SystemC, cz.i struktura specyfikacji. SystemC Standard IEEE 1666-2005 Open source www.systemc.org nakładka na C++ biblioteka dla standardowego środowiska C++ Sprawdzona dla Visual C++ 6.0/7.1, GNU C++ 2.95.3 11/7/2011 S.Deniziak:Systemy wbudowane 2 1

Przykład specyfikacji 1. Plik nagłówkowy, np. euclid.h #include "systemc.h" SC_MODULE(euclid_gcd) { sc_in_clk CLOCK; sc_in<bool> RESET; sc_in<unsigned> A, B; sc_out<unsigned> C; sc_out<bool> READY; void compute(); SC_CTOR(euclid_gcd){ SC_CTHREAD(compute,CLOCK.pos()); reset_signal_is(reset,true); ; 11/7/2011 S.Deniziak:Systemy wbudowane 3 2. Plik z imlementacją, np. euclid.cpp, euclid.sc #include "euclid.h" void euclid_gcd::compute(){ unsigned tmp_a = 0, tmp_b; if(reset){ tmp_a=0; READY.write(false); while (true) { wait(); C.write(tmp_a); READY.write(true); wait(); tmp_a = A.read(); tmp_b = B.read(); READY.write(false); wait(); while (tmp_b!= 0) { unsigned r = tmp_a; tmp_a = tmp_b; while (r >= tmp_b) r = r - tmp_b; tmp_b = r; 11/7/2011 S.Deniziak:Systemy wbudowane 4 2

Struktura deklaracji modułu deklaracje portów: sc_in, sc_out, sc_inout, sc_clock deklaracje zmiennych i sygnałów lokalnych: sc_buffer - zdarzenia są związane z przypisaniem wartości sc_signal - zdarzenia są związane ze zmianą wartości deklaracje metod konstruktor: definicje procesów, definicje zdarzeń aktywujących procesy: sensitive definiowanie zerowania procesów: reset_signal_is() inicjalizacja modułu 11/7/2011 S.Deniziak:Systemy wbudowane 5 Typy danych typy języka C++, sc_bit bool sc_logic - 0 =0=false, 1 =1=true, X, Z sc_bv<n> - tablica bitów bool lub sc_logic ( 0 i 1 ) sc_lv<n> - tablica bitów sc_logic sc_int<n> - liczby int ze znakiem do 64 bitów sc_uint<n> - liczby int bez znaku do 64 bitów sc_bigint<n> - liczby int ze znakiem o dowolnej długości sc_biguint<n> - liczby int bez znaku o dowolnej długości 11/7/2011 S.Deniziak:Systemy wbudowane 6 3

Typy danych sc_fixed<wl,iwl,q_mode,o_mode,n_bits>, sc_fix(wl,iwl,q_mode,o_mode,n_bits) sc_ufixed<wl,iwl,q_mode,o_mode,n_bits>, sc_ufix(wl,iwl,q_mode,o_mode,n_bits) wl: liczba bitów (wl>0) iwl: liczba bitów części całkowitej (również iwl>wl lub iwl<0) q_mode: tryb zaokrąglania (SC_RND, SC_RND_ZERO, SC_RND_MIN_INF, SC_RND_INF, SC_RND_CONV, SC_TRN, SC_TRN_ZERO) o_mode: tryb nadmiaru (SC_SAT, SC_SAT_ZERO, SC_SAT_SYM, SC_WRAP, SC_WRAP_SM), n_bits: parametr dla trybu SC_WRAP (domyślne 0) sc_fixed_fast<wl,iwl,q_mode,o_mode,n_bits>, sc_fix_fast(wl,iwl,q_mode,o_mode,n_bits) sc_ufixed_fast<wl,iwl,q_mode,o_mode,n_bits>, sc_ufix_fast(wl,iwl,q_mode,o_mode,n_bits) typy o ograniczonej precyzji (max 53 bity mantysy) sc_fxval, sc_fxval_fast - liczby o nieustalonej precyzji. 11/7/2011 S.Deniziak:Systemy wbudowane 7 Zmienne wielobitowe sc_int<8> a,b; sc_int<16> c; a, a[0], a.range(7,4) c=(a,b); 11/7/2011 S.Deniziak:Systemy wbudowane 8 4

Procesy SC_METHOD(m1); Wykonywany zawsze do końca SC_THREAD(m2); Może być zawieszany instrukcją wait() SC_CTHREAD(m3,clk.pos()) Zawieszany instrukcją wait() oczekującą na sygnał zegarowy start koniec start clk wait clk wait clk koniec start wait wait koniec 11/7/2011 S.Deniziak:Systemy wbudowane 9 Tworzenie procesów Statyczne: W konstruktorze funkcją SC_HAS_PROCESS Dynamiczne: Funkcja sc_spawn(&m) tylko procesy SC_METHOD i SC_THREAD 11/7/2011 S.Deniziak:Systemy wbudowane 10 5

Aktywacja procesów SC_CTHREAD: tylko clk SC_METHOD, SC_THREAD: sensitive << sygnał << sygnał ; next_trigger(parametry jak w wait) czas kolejnej aktywacji aktualnego procesu Tylko dla SC_METHOD 11/7/2011 S.Deniziak:Systemy wbudowane 11 Zawieszanie procesów SC_METHOD: zawsze wykonuje się do końca, SC_CTHREAD: wait(n) oczekiwanie n cykli zegara (domyślnie n=1), SC_THREAD: wait() wait(n) - wait() n razy wait(event) wait(event1 event2 eventn) wait(event1 & event2 & & eventn) wait(time) wait(time, event) wait(time, event1 event2 eventn) wait(time, event1 & event2 & & eventn) 11/7/2011 S.Deniziak:Systemy wbudowane 12 6

Opis hierarchiczny sample din dout coeff out s c a b mult q q #include "systemc.h" #include "mult.h" #include "coeff.h" #include "sample.h" SC_MODULE(filter) { sample *s1; coeff *c1; mult *m1; sc_signal<sc_uint<32> > q,s,c; SC_CTOR(filter) { s1 = new sample ("s1"); (*s1)(q,s); c1 = new coeff ("c1"); c1->out(c); m1 = new mult ("m1"); (*m1)(s,c,q); 11/7/2011 S.Deniziak:Systemy wbudowane 13 Testowanie modelu Testowanie adaptacyjne Stan modelu Generator pobudzeń Testy Testowany model Spodziewane odpowiedzi Odpowiedź Komparator 11/7/2011 S.Deniziak:Systemy wbudowane 14 7

Specyfikacja zadania testowego int sc_main(argc,argv){ - utworzenie instancji modułów - utworzenie sygnałów zegarowych: sc_clock ck(nazwa,okres,wypełnienie,przesunięcie,wart_początkowa) - zdefiniowanie śledzonych sygnałów: sc_trace_file *plik=sc_create_vcd_file(nazwa) sc_trace(plik, sygnał, nazwa) - start symulacji: sc_start() lub sc_start(czas) - sterowanie symulacja: sc_stop(), sc_write_comment(), report(), stop_after(), set_actions(), sc_time_stamp(), - zakończenie symulacji: sc_close_vcd_trace_file(plik) 11/7/2011 S.Deniziak:Systemy wbudowane 15 Specyfikacja czasu Zmienne czasowe: sc_time t(wartość, jednostka); Jednostki czasu: SC_FS, SC_PS, SC_NS, SC_US, SC_MS, SC_SEC Rozdzielczość czasu: sc_set_time_resolution(wartość, jednostka) sc_time sc_get_time_resolution() 11/7/2011 S.Deniziak:Systemy wbudowane 16 8

Przykład 1: testowanie modułu euclid #include "systemc.h" #include "euclid.h" class top : public sc_module { public: SC_HAS_PROCESS(top); top(sc_module_name name) : div("d1"), clk("c1", 1, SC_NS) { SC_THREAD(t1); SC_THREAD(t2); SC_METHOD(t3); sensitive << c; div.a(a); div.b(b); div.c(c); div.clock(clk); div.reset(reset); div.ready(ready); void t1() { reset.write(false); wait(10, SC_NS); a = 40; wait(10, SC_NS); a = 64; void t2() { wait(10, SC_NS); b = 10; wait(10, SC_NS); b = 8; void t3() { cout << "at time: " << sc_time_stamp() << " output: " << c.read() << endl; euclid_gcd div; sc_signal<unsigned> a, b, c; sc_signal<bool> reset, ready; sc_clock clk; ; int sc_main (int argc, char *argv[]) { top top1("top1"); sc_start(100, SC_NS); cout << endl << endl; return 0; 11/7/2011 S.Deniziak:Systemy wbudowane 17 Przykład 2: śledzenie sygnałów i zmiennych #include "systemc.h" systemc.h" SC_MODULE(some_module) ) { sc_signal<int int> sig; int var; SC_CTOR(some_module) ) { sig = var = 0; SC_METHOD(proc); void proc() { sig = - ++var var; next_trigger(sc_time(10, SC_NS)); ; int sc_main(int argc, char** argv){ sc_trace_file* trace_file = sc_create_vcd_trace_file("trace"); some_module XYZ("XYZ"); sc_trace(trace_file, XYZ.sig, "XYZ.sig"); sc_trace(trace_file, XYZ.var, "XYZ.var"); sc_start(sc_time(500, SC_NS)); sc_close_vcd_trace_file(trace_file); return 0; 11/7/2011 S.Deniziak:Systemy wbudowane 18 9

Koniec 11/7/2011 S.Deniziak:Systemy wbudowane 19 10