Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Budapest Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke eet.bme.hu Rendszerszintű tervezés: System C / Catapult C Poppe András2010.

Hasonló előadás


Az előadások a következő témára: "Budapest Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke eet.bme.hu Rendszerszintű tervezés: System C / Catapult C Poppe András2010."— Előadás másolata:

1 Budapest Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke eet.bme.hu Rendszerszintű tervezés: System C / Catapult C Poppe András2010. április 28. www.eet.bme.hu/~poppe/sysdes/MSC-sys-des1.ppt

2 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 2 Miről lesz szó? ►Magas szintű tervezés programozási nyelvek segítségével  HDL leírás (Verilog / VHDL) is emlékeztet egy programra  Ne kelljen kézzel előállítani HDL kódot, legyen elég egy ismert programozási nyelven elkészíteni a rendszer leírását ►Miért programozási nyelv segítségével?  Nem kell még eldönteni, mi lesz hardverben, mi lesz szoftverben  Együtt tervezhető a hardver és a szoftver Hardver-szoftver együttes tervezés –Mi a hardvertervezés részre koncentrálunk ►SystemC  C++ osztályok gyűjteménye, amelyekkel lehetőségünk van C++ fejlesztői környezetben a hardvert is reprezentálni  Ún. compiled code szimuláció is és hardverszintézis is lehetséges  Nyílt megoldás

3 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 3 ►CatapultC  ANSI C++ adott részhalmazán írt kódból hardvert szintetizál (Verilog RTL) Meg kell adni a szintézishez bizonyos peremfeltételeket, pl. belső mikroarchitektúrát  Sebességre optimalizált eszköz  A terméke, nálunk hozzáférhető ►Cél: digitális rendszerek tervezése  Alapvető hardver architektúrák (függetlenül a megvalósítás – ASIC, FPGA – módjától)  Tervezési mintapéldák ►TLM – transaction level modeling: a koncepció lényege ►Virtual Platforms Miről lesz szó?

4 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 4 Hardver-szoftver együttes tervezés ►ESL: Electronic System Level design  HSCD  Az a lényege, hogy ilyenkor elsődleges szempontnak tekintjük, hogy az adott rendszert minél magasabb absztrakciós szinten írjuk le.  Az ESL szemlélet a rendszer szintű terveknél egyre elterjedtebb, és a világ vezető system-on-a-chip (SoC) tervező cégei irányelvüknek tekintik. Ilyen cégek például a Mentor Graphics, Cadence Design Systems, Synopsys ►A hardver-szoftver együttes tervezés legfontosabb célja, hogy  magas absztrakciós szintű leírással könnyebben átlátható legyen a terv,  hibákat gyorsabban meg lehessen találni,  optimalizálni lehessen a hardver/szoftver particionálást,  csökkenjen a piacra kerülés átfutási ideje, és hogy  csökkenjenek a fejlesztési költségek.

5 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 5 Hardver-szoftver együttes tervezés ►Ennek egyre terjedő eszköze a SystemC ►Egy másik variáció: ANSI C++ használata, pl. Mentor Graphics CatapultC ®  Ne kelljen egy újabb "nyelvet" megtanulni  Az ANSI C++ egy adott részhalmaza legyen elég  Hasonló szabályok a szintetizálhatóságra, mint a SystemC esetében

6 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 6 Hardver-szoftver együttes tervezés ►SystemC – a HSCD (hardware-software co-design) jellegzetes eszköze ►2005-től IEEE szabvány: IEEE std-1666-2005 ►Cél: HW-SW együttes  tervezése  szimulációja  verifikációja ►Nem kell várni a beágyazott szoftver tervezésével addig, amíg elkészül a hardver  time-to-market csökkenthető ►A tervezés magas absztrakciós szinten történhet ►Magas absztrakciós szintű tervezés még:  Matlab model,  UML, stb. de ezekkel nem lesz hardver-szoftver együttes tervezés

7 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 7 A SystemC ►A SystemC nyelv egy C++ könyvtár és metódus gyűjtemény, ami igen hatékonyan használható  szoftveres algoritmusok készítésére,  hardver architektúrák modellezésére, valamint  SoC és rendszer szintű modellek interfészének megvalósítására. ►A SystemC és a hagyományos C++ fejlesztői környezet használatával rendszer szintű modellek írhatók le, ezek azután gyorsan szimulálhatók és optimalizálhatók. ►A rendszert leíró modell egy C++ program, ami futtatva ugyanazt a viselkedést produkálja, amit maga a rendszer

8 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 8 A szükséges háttér: C, C++ ►Emlékeztető  C++ was developed by Bjarne Stroustrup of AT&T Bell Laboratories in the early 1980's, and is based on the C language. The name is a pun - "++" is a syntactic construct used in C (to increment a variable), and C++ is intended as an incremental improvement of C. Most of C is a subset of C++, so that most C programs can be compiled (i.e. converted into a series of low-level instructions that the computer can execute directly) using a C++ compiler.  C is in many ways hard to categorise. Compared to assembly language it is high-level, but it nevertheless includes many low-level facilities to directly manipulate the computer's memory. It is therefore an excellent language for writing efficient "systems" programs. But for other types of programs, C code can be hard to understand, and C programs can therefore be particularly prone to certain types of error. The extra object-oriented facilities in C++ are partly included to overcome these shortcomings.

9 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 9 A szükséges háttér: C, C++ ►Emlékeztető  ANSI C++: The American National Standards Institution (ANSI) provides "official" and generally accepted standard definitions of many programming languages, including C and C++. Such standards are important. A program written only in ANSI C++ is guaranteed to run on any computer whose supporting software conforms to the ANSI standard. In other words, the standard guarantees that ANSI C++ programs are portable. In practice most versions of C++ include ANSI C++ as a core language, but also include extra machine-dependent features to allow smooth interaction with different computers' operating systems. These machine dependent features should be used sparingly. Moreover, when parts of a C++ program use non-ANSI components of the language, these should be clearly marked, and as far a possible separated from the rest of the program, so as to make modification of the program for different machines and operating systems as easy as possible. ►Programozás alapjai 1, 2 / Szoftver labor 1, 2

10 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 10 Néhány C/C++ alapfogalom ►Adattípusok:  Alaptípusok: (bool), char, int, float, double – signed/unsigned, short/long  Származtatott típusok: mutató, tömb, függvény?  Összetett adattípusok: tömb, struct ►Operátorok  operandusok száma, típusa, kiértékelésük sorrendje; végeredmény típusa, mellékhatások ►Vezérlési szerkezetek  if, if-else, switch, while, for, do-while (goto-k változatai: goto, continue, break) ►Függvények  visszatérési érték típusa, paraméterek száma és típusa, paraméterátadás mechanizmusa: érték, referencia (csak C++) ►C++ osztályok: adat és adatot kezelő metódusok egységbe zárva (encapsulation)

11 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 11 Néhány C++ alapfogalom ►C++ osztályok (class)  konstruktorok  destruktorok  egyéb tagfüggvények  mezőhozzáférés (lásd: encapsulation)  a hagyományos C struct szintén class ►Polimorfizmus  paraméterszignatúra, overloading  operator overloading ►Öröklődés  alap osztály  származtatott osztály

12 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 12 A SystemC ►A C++ nyelv objektum-orientált tulajdonsága megadja a lehetőséget a nyelv kibővítésére osztályokon (class) keresztül anélkül, hogy új szintaktikai elemeket vinnénk be abba. ►A SystemC tartalmazza ezeket a szükséges osztályokat, így a megszokott nyelv és feljesztő eszközök használatával képesek leszünk hardver leírására ►A SystemC olyan hardverhez közeli modellezési lehetőségeket biztosít, mint a  párhuzamosság,  időzítések, késleltetések,  hardverközeli kommunikációs csatornák (pl. portok),  hardver-megvalósításokban használt adattípusok, melyek a C++-ban nincsenek meg, hiszen az egy szekvenciális programozási nyelv, melyet szoftver- fejlesztéshez fejlesztettek ki.

13 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 13 A SystemC célja ►Rendszerszintű modellek fejlesztése  magas absztrakciós szint  a működés vizsgálata szimulációval ►Magasszintű hardverleírásból szintézis  szintetizálható kódot kell írni bizonyos nyelvi elemeket – pl. pointerek használatát – kerülni kell  kimenet: Verilog vagy VHDL leírás,  ami egy target technológiára valóban szintetizálható ►Szimulációhoz: SystemC library és egy C++ fordító kell ►Szintézis: szabad hozzáférésű programokkal megoldható ►Példa:  systemc-2.1.v1 könyvtár  Microsoft Visual C++ 6.0  CvSDL Waveform Viewer 0.3.1  SystemCrafter SC v2.0.0.3  Xilinx ISE WebPack 8.2i

14 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 14 SystemC alapú szintézis és szimuláció Példa: SystemCrafter program és hw szintézis Xilinx FPGA-ra:

15 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 15 SystemC alapú szintézis és szimuláció Konkrétan pl. egy egyszerű számláló esetére Csak szimuláció (C++ fordító) Szintézis és szimuláció

16 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 16 A SystemC komponensei ►Modul: egy container, ami más modulokat és process-eket foglalhat magában ►Process: folyamat – egy adott funkcionalitás leírására szolgál ►Signal: jel – támogatott a 2 (0,1) és 4 (0,1,X,Z) értékű logika is ►Port: jelek csatlakozó pontja ►Adattípusok – sokféle típus, különféle szempontok szerint használhatók. Vigyázat – szintetizálhatóság!! ►Órajel: az idő modellezésére szolgáló spec. jel ►Szimulációs kernel – lehetővé teszi a gyors (compiled kódú) szimulációt ►Jelalak-figyelés:  VCD (Value Change Dump),  WIF (Waveform Intermediate Format) és  ISDB (Integrated Signal Data Base) formátumú jelalak-file-ok támogatása

17 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 17 Az idő modellezése ►A SystemC könyvtár egyik legfontosabb komponense a már elített időmodellezés. ►Ezt a nyelv 64-bites előjel nélküli egész számokkal írja le. ►Ez a programozó számára az sc_time nevű adattípus mögé van bújtatva. ►Ilyen módon történő implementálása miatt az idő nem írható le folytonos, analóg módon, csak diszkrét értékekkel. ►Ennek következtében van egy legkisebb ábrázolható időkvantum, amit időfelbontásnak nevezünk. ►Ez a nyelv használója által beállítható. Default egység: ps

18 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 18 Modulok, modulok hierarchiája ►A modulok egy SystemC terv alapvető építőkövei, hasonlóan a Verilog modulokhoz vagy a C++ osztályokhoz ►Egy modul egy másik modulban példányosítható ►Minden alacsonyabb szintű modul példányosítható magasabb szintű modulokban (mint a Verilogban vagy a C++-ban) Metódusok és szálak (methods, threads) ►Az SC_METHOD és az SC_THREADS osztályok jelentik a modellezés alapját a SystemC-ben  SC_METHODS – mint a függvények Verilog-ban (nem kerül időbe a végrehajtásuk)  SC_THREADS – egy adott ideig “futnak”, pl. egy eseményre várnak (pl. pozitív élre)

19 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 19 Hardver adattípusok ►A hardver modellezés céljára a SystemC-ben hasonló adattípusok léteznek, mint a Verilog-ban, pl. sc_logic, sc_lv. ►Pl. DSP jellegű hardverekhez, számítási algoritmusok implementálására szolgáló típusok a sc_fixed és az sc_int ►Később még további típusokról is lesz szó… ►Mivel a SystemC a C++-on alapul, értelemszerűen minden C++ adattípus használható, ha nem szükséges valamit SystemC típussal reprezentálni. ►Fontos szempontok az adattípusokkal kapcsolatban:  Bizonyos adattípusok használata nem teszi lehetővé a hardverszintézist. Minden olyan modulban, amit esetleg hardverként szeretnénk megvalósítani, az ilyen típusokat kerülni kell.  A SystemC adattípusok sok memóriát igényelnek, ezért jelentősen lassíthatják a szimulációt.

20 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 20 Hello world – a SystemC-ben is Minden SystemC file-ban kötelező Komment, mint C++-ban Module template-ből hello_world modul létrehozása Ezt az egyetlen tagfüggvényt definiáljuk benne. A belseje tiszta C++ A SystemC kód eleje mindig az sc_main Konstruktor-szerű, lásd a C++ new-t http://www.asic-world.com/code/systemc/hello.cpp

21 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 21 Hello world – a SystemC-ben is ►Pl. Linux-ban fordítás GNU fordítóval: >g++ -I. -I$SYSTEMC_HOME/include -L. - L$SYSTEMC_HOME/lib-linux -o sim hello.cpp - lsystemc -lm >./sim ►Itt $SYSTEMC_HOME a SystemC installációs könyvtára ►A hello.cpp SystemC program kimenete:

22 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 22 Második példa: inverter ►Szimbólum, működés: //inverter.h #include "systemc.h" SC_MODULE(inverter) { //input ports sc_in be; //output ports sc_out ki; bool be1; void inverterproc(); SC_CTOR(inverter) { SC_METHOD(inverterproc) sensitive << be; } }; //inverter.cpp #include "inverter.h" void inverter::inverterproc() { be1 = be; ki = !be1; }

23 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 23 Második példa: inverter Az inverter nevű modulnak egy-egy 1 bites bemene és kimenete van. A belső változó bool típusú, a működést leíró függvény pedig a bement jelszintjének bármely irányú változására lefut. //inverter.h #include "systemc.h" SC_MODULE(inverter) { sc_in be; //input ports sc_out ki; //output ports bool be1; void inverterproc(); // inv. funkció megvalósítása SC_CTOR(inverter) // konstruktor { SC_METHOD(inverterproc) // ezzel a process-szel sensitive << be; // szintre érzékeny a bemenet } }; //inverter.cpp #include "inverter.h" void inverter::inverterproc() { be1 = be; ki = !be1; } A működés igen egyszerű: a belső változó átveszi a bement értékét, majd ezt az értéket negálva kapja meg a kimenet.

24 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 24 Második példa: inverter ►Test bench //inverter_test.cpp #include "inverter.h" int sc_main(int argc, char ** argv) { sc_signal BE; sc_signal KI; inverter i1("kimenet"); i1.be(BE); i1.ki(KI); sc_start(1); //tracing sc_trace_file *tf = sc_create_vcd_trace_file("vcd_inverter"); sc_trace(tf, BE, "be"); sc_trace(tf, KI, "ki"); Példányosítás test bench-ben Input, output “bekötése” Szimuációs óra lép egyet Trace file megnyitása, figyelendő jelek regisztrálása BE = 0; sc_start(2); BE = 1; sc_start(2); BE = 0; sc_start(2); BE = 1; sc_start(2); BE = 0; sc_start(2); sc_close_vcd_trace_file(tf); return(0); } Bemenet bizgetése, óra léptetése: Trace file lezárása, vissztérés:

25 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 25 Inverter – a test bench működése ►Az inverter i1("kimenet"); sorban történik a példányosítás, ►az i1.be(BE); pedig azt jelenti, hogy az i1 néven példányosított inverter be nevű portjához kötjük a fent deklarált BE jelet. ►Az sc_start(1) lépteti egy ciklussal a szimulációs kernelt (szimulációs órát) ►A jelalakfigyeléshez létrehozunk egy vcd_inverter.vcd nevű file-t, amelyre a kód további részében tf néven fogunk hivatkozni. ►Az ezt követő két sor mondja meg, hogy mely file-ba melyik jel változásait jegyezze fel a SystemC, és milyen néven jelenítse meg azt. ►Amint az látható, az inverter bemeneti portjához kötött jelnek értéket adunk, majd léptjük a szimulációt 2 egységgel, stb. ►A végén lezárjuk a jelalakot tartalmazó file-t.

26 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 26 Harmadik példa: 4 bites számláló (up) Szinkron active high reset és active high enable jellel http://www.asic-world.com/code/systemc/first_counter.cpp

27 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 27 Számláló – test bench ►Még a legegyszerűbb blokkot is szimulálni kell... ►A kész blokkot körül kell venni egy olyan környezettel, ami megmozgatja a blokk bemenő jeleit  Clock Gen – órajelet produkál a Counter blokk számára  Reset Logic – előállítja a reset jelet a Counter blokk számára  Reset Enable – előállítja az enable jelet a Counter blokk számára ►A Counter blokk kimenetét egy adott hullámforma file-ba ”dump”-oljuk

28 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 28 Számláló – test bench / kód http://www.asic-world.com/code/systemc/first_counter_tb.cpp

29 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 29 Számláló – test bench / kimenete

30 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 30 Számábrázolás, típusok ►A SystemC-ben sok, a hardvermodellezést lehetővé tevő típust támogat.  Törtek ábrázolása: fix pontos formátumban  A C++ minden típusa hozzáférhető ►Típusok használatánál szempontok:  szintetizálhatóság  absztrakciós szint  szimulációs sebesség ►C++ Data Types ►Bit Type ►Logic Type ►Arbitrary Width Bit Type ►Arbitrary Width Logic Type ►Signed Integer Type ►Unsigned Integer Type ►Arbitrary Precision Signed Integer Type ►Arbitrary Precision Unsigned Integer Type ►Resolved Types ►User-defined Data Types

31 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 31 Bit típus ►sc_bit a bit típus, két értéket vehet fel '0'-át and '1'-et. ►1 == true és 0 == false. ►Ezt a típust akkor célszerű használni, amikor sem Z nagy impedanciás állapot, sem X ismeretlen állapot modellezésére nincs szükség. ►Bitenkénti műveletek:

32 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 32 Logikai jelek típusa ►sc_bit csak két értéket tud ábrázolni (0,1), ezért valódi hardver modellezésére nem igazán jó. ►Tényleges hardverben előforduló jel állapotok (értékek): In '0', '1', 'X' és 'Z'.  '0': false  '1': true  'X' or 'x': unknown (ismeretlen) vagy közbenső érték  'Z' or 'z': nagy impedanciás (high-Z) vagy lebegő csomópont értéke ►Ezek ábrázolására szolgál az sc_logic típus, amivel mind a 4 érték ábrázolható ►Bitenkénti műveletek:

33 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 33 Logikai jelek típusa, példa:

34 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 34 Logikai jelek típusa, iagazságtáblák

35 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 35 Variábilis szélességű bit típus ►sc_bit csak 1 bit széles, ►sc_bv típus: Bit Vector, width – szélesség, egész ►Legjobboldalibb bit – LSB ►Kisebb bitszélességű értéket adva: üres bitek 0-k ►Bitkiválasztó ('indexelő'), konkatenáló operátorok ►Metódusok: intervallum kiválasztás, redukció

36 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 36 Variábilis szélességű bit típus ►Metódusok: intervallum kiválasztás, redukció Iyen sztringgel is érték adható!

37 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 37 Variábilis szélességű logikai típus ►sc_bv mintájára sc_lv

38 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 38 64 bites egész ►sc_int – indexelhető, mint sc_bv, sc_lv, hasonló: sc_uint

39 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 39 Tetszőleges méretű egészek ►sc_bigint – max. mérete MAX_NBITS ami az sc_constants.h fejlécfile-ban van definiálva (pl. 512) ►sc_biguint – u.a., mint fent

40 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 40 Moduldefiníció ►SC_MODULE – egy makró ►El is hagyható a makró használata. Ekkor (tiszta C++ szintaxissal): Példa – hello world: ►Portok: a modulok ki- és bemenetei. Típusai – SystemC típusok, irányai:  in : Input Ports sc_in mód  out : Output Ports sc_out mód  inout : Bi-direction Portssc_inout mód Szintaxis: sc_direction azonosító;

41 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 41 Moduldefiníció ►Jelek – az I/O portok mintájára  modulon belüli jelek (vezetékek) ►Szintaxis: sc_signal azonosító; Modulpéldányosítás ►Port csatlakoztatás, mint a Verilogban  pozíció alapján  explicit módon, nevesítve

42 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 42 Modulpéldányosítás ►Pozíció alapján: ► Explicit módon, nevesítve

43 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 43 Belső változók ►Tetszőleges SystemC, C++ vagy felhasználó által definiált belső változó létrehozható

44 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 44 Proecess-ek ►Process-nek hívjuk azt a kódot (C++ / SystemC függvényt), amely egy modul tényleges viselkedését, működését leírja. ►Ugyanolyan, mint a Verilog-ban egy always blokk ►Egy process lehet szintre érzékeny (kombinációs logika), vagy élre érzékeny (szekvenciális hálózatok) Ez itt a modul konstruktora. Ebben mondjuk meg, hogy milyen esemény hatására kell melyik process-t futtatni.

45 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 45 Proecess-ek ►A SystemC-ben 3-féle process van:  metódusok (methods) Triggerelő eseményre indulnak. Az eseményeket az ún. érzékenységi listán adjuk meg (sensitive, sensitive_pos) Visszatérés a hívó mechanizmushoz  szálak (threads) indítás után futnak, pl. amíg egy esemény be nem következik felfüggeszthetők és újraindíthatóak (az utolsó felfüggesztés helyétől)  órajelre indított szálak (clocked threads) egy ilyen process számára az indító órajelet is definiálni kell (csak 1 bites trigger portja lehet egy ilyen process-nek)

46 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 46 Method

47 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 47 Thread

48 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 48 Clocked Thread

49 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 49 További elemek process kezeléshez ►dont_initialize() A metódusok és a szálak a konstruktorban mindig lefutnak egyszer. Ezzel elkerülhető ezek futtatása ►wait_until() – SC_CTHREAD process-ben vár egy esemény bekövetkezésére

50 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 50 Szintetizálhatóság ►A kezdeti, szimulálható SystemC leírásokat finomítanunk kell ahhoz, hogy szintetizálni lehessen őket. Olyan leírást kell kell készítenünk, amelynek elemeit a szintézis szoftver (pl. a SystemCrafter) támogatja. ►Pl. a SystemCrafer által támogatott adattípusok a következők:  sc_int, sc_uint,  int, unsigned int,  bool,  sc_bit, sc_logic,  sc_bv, sc_lv,  sc_bigint, sc_biguint,  short, long, unsigned long, char, unsigned char,  továbbá a const típus, az egydimenziós tömbök és az enum támogatott.

51 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 51 Szintetizálhatóság ►A kezdeti, szimulálható SystemC leírásokat finomítanunk kell ahhoz, hogy szintetizálni lehessen őket. Olyan leírást kell kell készítenünk, amelynek elemeit a szintézis szoftver (pl. a SystemCrafter) támogatja. ►Pl. a SystemCrafer által támogatott adattípusok a következők:  sc_int, sc_uint,  int, unsigned int,  bool,  sc_bit, sc_logic,  sc_bv, sc_lv,  sc_bigint, sc_biguint,  short, long, unsigned long, char, unsigned char,  továbbá a const típus, az egydimenziós tömbök és az enum támogatott.

52 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 52 Szintetizálhatóság ►A SystemCrafter által nem támogatott adattípusok (melyek használatától tartózkodnunk kell, ha ezt a szoftvert kívánjuk használni a szintézishez) a következők:  felhasználó által definiált osztályok,  többdimenziós tömbök,  pointerek,  lebegőpontos számok,  valamint a typedef. ►A SystemCrafter által támogatott operátorok:  1 operandusú: +, -, !, ~,  2 operandusú: *, /, %, +, -, >,, =, &, ^, |, &&, ||, ==, !=,  értékadó operátorok: =, *=, /=, %=, +=, -=, >=, &=, ^=, |=,  3 operandusú: ? : (értékkel bíró elágazás)  postincrement, postdecrement, preincrement, predecrement, .or_reduce(),.xor_reduce(),.and_reduce(),.range(x,1), (x,y),  egydimenziós tömb eleméhez hozzáférés: array[x],  bitkiválasztás: bus[x],  illetve port olvasás, port írás: x.read(), x.write(), ahol x egy port.

53 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 53 Szintetizálhatóság ►A SystemCrafter a következő vezérlési szerkezeteket támogatja:  case, default,  feltételes elágazások: if, if else, switch,  ciklusok: while, do/while, for, de egy ciklusban az utolsó utasítás wait() kell legyen,  ugrás jellegű: break (switch esetén), return ►Egyéb betartandó szabályok:  Az osztályoknak és struct-oknak egy sc_module alosztályainak kell lenniük. Példányosíthatók és összekapcsolhatók, de nem használhatók adattípusként.  Csak az sc_in és sc_out port valamint az sc_signal jel támogatott, viszont nem támogatott az sc_inout, továbbá a portoknak public- nak kell lenniük.  A processek közül egyedül az SC_THREAD támogatott, az SC_METHOD és az SC_CTHREAD nem. ►Minden eszköznél ki kell deríteni a szintetizálhatóság feltételeit!

54 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 54 Szintetizálhatóvá alakítás – példa

55 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 55 Irodalom ►http://www.asic-world.com/systemc/tutorial.html ►1666-2005 IEEE Standard SystemC Language Reference Manual, http://shop.ieee.org/ieeestore/Product.aspx?product_no=SS95505 ►SystemC User’s Guide v2.0.1 https://www.systemc.org/projects/sitedocs/document/v201_Users_guid e/en/1 ►SystemC Language Reference Manual v2.1 https://www.systemc.org/download/5/3/60/104/ ►SystemC to Verilog Synthesizable Subset Translator http://www.opencores.org/projects.cgi/web/sc2v/overview Folyt. köv.

56 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 56 Csatlakozó jelekhez való hozzáférés ►Korábban láttuk a csatlakozó jelek (portok) típusait, definiálását ►Értékadással nem célszerű állítani rajtuk a jelszintet ►Az alábbi metódusokkal írhatók, olvashatók:  port_name.write('value') : adott jelszint beállítása  port_name.read() : jelszint lekérdezése ► port_name annak a port példánynak az azonosítója, amelyiknek a jelszintjét szeretnén állítani / lekérdezni ►A write() és read() metódusok más adattípusokról automatikus konverziót hajtanak végre, ezért javasolt ezek használata az értékadás helyett ►Hasonlóképpen kezelhetők a jelek is.

57 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 57 Csatlakozó jelekhez való hozzáférés

58 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 58 Irodalom ►http://www.asic-world.com/systemc/tutorial.html ►1666-2005 IEEE Standard SystemC Language Reference Manual, http://shop.ieee.org/ieeestore/Product.aspx?product_no=SS95505 ►SystemC User’s Guide v2.0.1 https://www.systemc.org/projects/sitedocs/document/v201_Users_guid e/en/1 ►SystemC Language Reference Manual v2.1 https://www.systemc.org/download/5/3/60/104/ ►SystemC to Verilog Synthesizable Subset Translator http://www.opencores.org/projects.cgi/web/sc2v/overview Folyt. köv.

59 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 59 Porto-ok “tömbjei” (buszok) ►Nagyon hasznos lehetőség, ha több azonos portra van szükségünk:

60 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 60 Jelek definiálása tri-state buszokhoz ►Resolved Logic Vectors: _rv végződés ►Konfliktus helyzetek feloldása – erősebb győz Nem csak portokra, hanem jelekre (signal) is! http://www.asic-world.com/code/systemc/resolve_full.cpp

61 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 61 Órajelek ►Az órajelek speciális objektumok a SystemC-ben. ►Egy órajel objektumnak számos adatmezője van, amelyek az órajel paramétereit tárolják. ►Az alábbi módon definiálható egy órajel (példa): sc_clock clock("my_clock", 10, 0.5, 1, false); ►Jelentése:  Azonosítója: clock  Periódus ideje: 10 időegység  Kitöltési tényezője: 50%  1 időegységnél indul,  false (alacsony) szintről ►Egy tervben típikusan csak 1x definiálunk clock-ot, többnyire a test bench-ben, aztán portokon keresztül adjuk tovább.

62 eet.bme.hu © BME Elektronikus Eszközök Tanszéke, 2010. 2010. április 28. Rendszerszintű tervezés - SystemC / Catapult C 62 Csatornák ►Modulok közötti kommunikációt szolgálják  Primitív  Hierarchikus ►sc_prim_channel primitív csatornák alaposztálya ►Ebből származtatott, szokásos kommunikációt megvalósító mechanizmusok:  sc_mutex – kölcsönösen kizáró zárat alkalmazó kommunikáció  sc_fifo – fio buffer  sc_semaphore – megosztott erőforráshoz való hozzáférést szabályozza


Letölteni ppt "Budapest Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke eet.bme.hu Rendszerszintű tervezés: System C / Catapult C Poppe András2010."

Hasonló előadás


Google Hirdetések