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.

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék 5.5. Model Based Architecture módszerek BelAmI_H Spring.
C++ programozási nyelv Gyakorlat hét
Az integrált áramkörök (IC-k) tervezése
A Microsoft rendszermenedzsment víziója A Dynamic Systems Initiative A System Definition Model Az üzemeltetésre tervezett szoftverek A SDM jelentősége.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Objective- C Bereczki Gréta Tamara
Objective-C Készítette: Zsivics Sanel NL5LWN. Tartalom bevezető történeti háttér rangsor elterjedtsége / népszerűsége alapok felépítése (.h,.m, xcode,
Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke A programozás alapjai 1. (VIEEA100) 9. előadás.
Adatbányászati technikák (VISZM185)
JavaScript.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Programozás alapjai.
Bevezetés a Java programozásba
10. előadás (2004. április 20.) A C előfordító (folytatás) Néhány hasznos compiler opció Egy tanulságos könyvtári függvény Változó hosszúságú argumentum.
11. előadás (2005. május 10.) A make segédprogram Alacsony szintű műveletek és bitmezők Fájl, katalógus rendszer hívások 1.
Virtuális méréstechnika
Kincses Zoltán, Mingesz Róbert, Vadai Gergely
Mérés és adatgyűjtés laboratóriumi gyakorlat Makan Gergely, Mingesz Róbert, Nagy Tamás 2. óra szeptember 9., 10. v
Ez a dokumentum az Európai Unió pénzügyi támogatásával valósult meg. A dokumentum tartalmáért teljes mértékben Szegedi Tudományegyetem vállalja a felelősséget,
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Fejlett Programozási Technológiák II. Világos Zsolt 12. gyakorlat.
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
Szintézis Keresztes Péter, 2005 A GAJSKI-KUHN DIAGRAM Alapelv: Rendezzük a digitális- rendszerek leírásait célok és szintek szerint.
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 2. rész – Vezérlő szerkezetek
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
WSDL alapismeretek A WSDL (Web Services Description Language – Web szolgáltatások leíró nyelv) egy XML-alapú nyelv a Web szolgáltatások leírására és azok.
C# tagfüggvények.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Vizuális és web programozás II.
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
ISZAM III.évf. részére Bunkóczi László
Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék
Bevezetés a C++ programozási nyelvbe
ESzabványok Workshop 1. előadás: Bevezető, eAdatmodell október 13.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
C nyelv utasításai.
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
FPGA & Verilog ismertető
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Rendszerszintű tervezés: System C / Catapult C
MIKROELEKTRONIKA, VIEEA306
Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke 2. zárthelyi megoldásai december 2.
Készítette: Csíki Gyula
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
A D programozási nyelv Angeli Dávid. Nagy vonalakban  C++  
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Web Architecture. Development of Computing Architectures Monolithic mainframe programming Client Server Real Client Server Web Programming.
Komoróczy Tamás 1 Java programozási nyelv A nyelv alapjai.
Egyenesvonalú (lineáris) adatszerkezetek
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
Objektum orientált programozás
Objektumvezérelt rendszerek tervezése
Webprogramozó tanfolyam
A Visual Basic nyelvi elemei
Mobil alkalmazások fejlesztése Vonalkód leolvasó Symbian alapú mobiltelefonra Készítette: Tóth Balázs Viktor.
Gyurkó György. Az OO programozás és tervezés története 1960-as évek: SIMULA (véletlen folyamatokat szimuláló programok írása) az OO nyelvek őse 1970-es.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 3. gyakorlat.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Függvénysablonok használata
Előadás másolata:

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.

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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ó?

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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.

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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 ►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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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.

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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)

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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.

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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  CvSDL Waveform Viewer  SystemCrafter SC v  Xilinx ISE WebPack 8.2i

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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:

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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ó

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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)

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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.

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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:

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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; }

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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.

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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:

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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.

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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

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

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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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:

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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:

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

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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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ó

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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ó!

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

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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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ó;

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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

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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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ó

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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.

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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)

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

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

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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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.

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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.

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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.

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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!

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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, április 28. Rendszerszintű tervezés - SystemC / Catapult C 55 Irodalom ► ► IEEE Standard SystemC Language Reference Manual, ►SystemC User’s Guide v e/en/1 ►SystemC Language Reference Manual v2.1 ►SystemC to Verilog Synthesizable Subset Translator Folyt. köv.

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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.

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

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, április 28. Rendszerszintű tervezés - SystemC / Catapult C 58 Irodalom ► ► IEEE Standard SystemC Language Reference Manual, ►SystemC User’s Guide v e/en/1 ►SystemC Language Reference Manual v2.1 ►SystemC to Verilog Synthesizable Subset Translator Folyt. köv.

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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:

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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!

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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.

eet.bme.hu © BME Elektronikus Eszközök Tanszéke, á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