Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaHanna Szilágyiné Megváltozta több, mint 9 éve
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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.