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

Rendszerszintű tervezés: System C / Catapult C

Hasonló előadás


Az előadások a következő témára: "Rendszerszintű tervezés: System C / Catapult C"— Előadás másolata:

1 Rendszerszintű tervezés: System C / Catapult C
Poppe A., Czirkos Z április 19.

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 Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

3 Miről lesz szó? CatapultC Cél: digitális rendszerek tervezése
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 Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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. Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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 Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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 Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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 Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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. Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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 Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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++) Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

11 Néhány C++ alapfogalom
C++ osztályok: adat és adatot kezelő metódusok egységbe zárva (encapsulation) 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 Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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. Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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 v Xilinx ISE WebPack 8.2i Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

14 SystemC alapú szintézis és szimuláció
Példa: SystemCrafter program és hw szintézis Xilinx FPGA-ra: Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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ó Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

16 A SystemC komponensei Modul: egy container, ami más modulokat és process-eket foglalhat magában (C++ osztály) 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 fájlok támogatása Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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. 264 ps = 213 nap.  Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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) Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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. Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

20 Hello world – a SystemC-ben is 
Komment, mint C++-ban Minden SystemC fájlban kötelező 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 Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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: Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

22 Második példa: inverter
Szimbólum, működés: //inverter.h #include "systemc.h" SC_MODULE(inverter) { //input ports sc_in<bool> be; //output ports sc_out<bool> 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; } Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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.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. //inverter.h #include "systemc.h" SC_MODULE(inverter) { sc_in<bool> be; //input ports sc_out<bool> 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 } }; Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

24 Második példa: inverter
Test bench BE = 0; sc_start(2); BE = 1; sc_start(2); sc_close_vcd_trace_file(tf); return(0); } Bemenet bizgetése, óra léptetése: //inverter_test.cpp #include "inverter.h" int sc_main(int argc, char ** argv) { sc_signal<bool> BE; sc_signal<bool> 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"); Trace file lezárása, visszatérés: 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 Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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 jelalak figyeléshez létrehozunk egy vcd_inverter.vcd nevű fájlt, 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 fájlba 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éptetjük a szimulációt 2 egységgel, stb. A végén lezárjuk a jelalakot tartalmazó fájlt. Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

26 Harmadik példa: 4 bites számláló (up)
Szinkron active high reset és active high enable jellel Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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 fájlba ”dump”-oljuk Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

28 Számláló – test bench / kód
Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

29 Számláló – test bench / kimenete
Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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 Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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: Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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: Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

33 Logikai jelek típusa, példa:
Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

34 Logikai jelek típusa, igazságtáblák
Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

35 Variábilis szélességű bit típus
sc_bit csak 1 bit széles, sc_bv<width> 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ó azaz „indexelő”, és konkatenáló operátorok Metódusok: intervallum kiválasztás, redukció Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

36 Variábilis szélességű bit típus
Metódusok: intervallum kiválasztás, redukció Ilyen sztringgel is adható érték! Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

37 Variábilis szélességű logikai típus
sc_bv<width> mintájára sc_lv <width> Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

38 64 bites egész sc_int – indexelhető, mint sc_bv, sc_lv, hasonló: sc_uint Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

39 Tetszőleges méretű egészek
sc_bigint – max. mérete MAX_NBITS ami az sc_constants.h fejléc fájlban van definiálva (pl. 512) sc_biguint – u.a., mint fent Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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 Ports sc_inout mód Szintaxis: sc_direction<type> azonosító; Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

41 Moduldefiníció Modulpéldányosítás Jelek – az I/O portok mintájára
modulon belüli jelek (vezetékek) Szintaxis: sc_signal<type> azonosító; Modulpéldányosítás Port csatlakoztatás, mint a Verilogban pozíció alapján explicit módon, nevesítve Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

42 Modulpéldányosítás Pozíció alapján: Explicit módon, nevesítve
Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

43 Belső változók Tetszőleges SystemC, C++ vagy felhasználó által definiált belső változó létrehozható Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

44 Process-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. Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

45 Process-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) Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

46 Method Rendszerszintű tervezés - SystemC / Catapult C
2010. április 28.

47 Thread Rendszerszintű tervezés - SystemC / Catapult C
2010. április 28.

48 Clocked Thread Rendszerszintű tervezés - SystemC / Catapult C
2010. április 28.

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 Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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 minősítő, az egydimenziós tömbök és az enum támogatott. Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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. Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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. Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

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! Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

54 Szintetizálhatóvá alakítás – példa
Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

55 Csatlakozó jelekhez való hozzáférés
Korábban láttuk a csatlakozó jelek (portok) típusait, definiálását 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énk á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. Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

56 Csatlakozó jelekhez való hozzáférés
Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

57 Port-ok “tömbjei” (buszok)
Nagyon hasznos lehetőség, ha több azonos portra van szükségünk: Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

58 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! Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

59 Ó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 tipikusan csak 1x definiálunk órajelet, többnyire a test bench-ben, aztán portokon keresztül adjuk tovább. Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

60 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 Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.

61 Irodalom http://www.asic-world.com/systemc/tutorial.html
IEEE Standard SystemC Language Reference Manual, SystemC User’s Guide v SystemC Language Reference Manual v2.1 SystemC to Verilog Synthesizable Subset Translator Rendszerszintű tervezés - SystemC / Catapult C 2010. április 28.


Letölteni ppt "Rendszerszintű tervezés: System C / Catapult C"

Hasonló előadás


Google Hirdetések