III. Alapfogalmak és tervezési módszertan SystemC-ben A SystemC egy lehetséges válasz és egyben egyfajta tökéletesített, tovább fejlesztett tervezési módszertan az elektronikai tervezés területén felmerülő tervezési és fejlesztési problematikák összességének megoldására. 1
III.1. SystemC rövid összefoglaló bemutatása A SystemC a C++ programozási nyelven alapul, és annak egyfajta kiterjesztése digitális elektronikai hardware berendezések modellezésére. Fontos megjegyezni, hogy a SystemC nem a C++ nyelv egy újabb fajta nyelvjárása, mint például a C#. A SystemC alapvetően megőrizte a C+ + nyelv objektum orientált tervezési és szoftverfejlesztési módszertanát. 2
Számos fontos jellemvonással bővíti a C++ hagyományos objektum orientált fejlesztői eszköztárát, mint például több folyamat párhuzamos végrehajtása, esemény vezérelt folyamatvezérlés, időzített eseménykezelés, speciális a logikai áramkörök tervezéséhez és modellezéséhez jól illeszkedő adattípusok biztosítása. A SystemC tulajdonképpen egy osztálykönyvtárral egészíti ki a C++ nyelvi lehetőségeit, ahol a hozzá adott osztályok nem a C++ nyelvet módosítják, hanem a C++ nyelv fent említett kiterjesztését valósítják meg. 3
III.2. SystemC és a hagyományos tervezési módszertan 4
Az elektronikai eszközök hagyományos tervezési módszertanában a rendszertervező mérnökök az általuk választott szoftverfejlesztő rendszerben (általában C, vagy C++) dolgozzák ki azokat a modelleket, amelyek segítségével a megtervezendő elektronikai rendszer funkcionalitása vizsgálható, tesztelhető. 5
Amikor a rendszer tervezői a fejlesztés ezen szakaszával elkészültek, akkor a kidolgozott modelleket, futtatható kódokat átadják az RTL szintet kidolgozó tervezői csoportnak, akik aztán ennek alapján újra írják azt a maguk választotta fejlesztői környezetben (VHDL, Verilog), hogy az elkészített rendszerterveket regiszter szintű tervekké, a kapuáramkörök részletességének szintjére kidolgozzák. Ennek a tervezési módszertannak van egy alapvető hibája, mégpedig az, hogy a rendszertervező által kidolgozott modellek által nyújtott funkcionális képességek eltérhetnek az RTL szintű tervek funkcionalitási jellemzőitől. 6
Ezzel szemben a SystemC által biztosított módszertanban a tervező mérnökök, mind rendszer szinten, mind hardware közeli szinten csak a SystemC környezetet használják a tervek egyre nagyobb részletességű kidolgozásához. A tervezők iteratív módon finomíthatják a terveiket a rendszerszintű tervezési előírásokból kiindulva le egészen a regiszterszintű tervekig, amelyek továbbra is a SystemC környezetben jelennek meg. 7
III.3. SystemC által a tervező számára nyújtott lehetőségek Modulok: Egy modult az úgynevezett modul osztály SC_MODULE segítségével tudunk definiálni. A modulok hierarchikus felépítésűek abból a szempontból, hogy folyamatokat tartalmazhatnak és más modulok példányai is részét képezhetik. Folyamatok: A folyamat célja, hogy az adott rendszer funkcionalitását leírja. A folyamatok egy-egy modulban jelennek meg. Két alapvetően különböző folyamat típus létezik a SystemC rendszerben ez a SC_METHOD és az SC_THREAD. 8
Portok: Egy modulnak valamilyen formában kapcsolódnia kell a külvilághoz, ezt a csatoló felületi szerepet tölti be a port, amit magyarul kapunak is nevezhetünk. A modulok a portokon keresztül tudnak egymással kommunikálni, azokon keresztül továbbítva a jeleket. Háromféle port típust különböztetünk meg, ezek az Input, Output és az InOut portok, attól függően, hogy az információ egy adott porton keresztül modulba befelé, kifelé vagy mind két irányban áramolhat. 9
Jelek: SystemC-ben a jelek testesítik meg azokat az értékeket, amelyek segítségével a rendszer egyes részei egymással kommunikálnak. Két alapvetően eltérő típusú jel csoport létezik. Ezek a resolved és az unresolved jelek. Adattípusok: Különböző absztrakciós szinteket és tervezési résztartományok létrehozását támogatja. Például biztosítja a kettő és négyértékű logikai szerkezetek használatát egyedi változó és indexelt változók (vektorok, tömbök) szintjén is. 10
Órajel generátorok: A SystemC számos lehetőséget kínál a különféle időzítési problémák, időütemezési feladatok minél rugalmasabb kezelésére, az egyszerű órajel generátorok periodikus négyszögjel alakjaitól az összetett komplex jelalakok generálásáig. A SystemC lehetőséget kínál arra is, hogy az egyes jeleket egymáshoz szinkronizáljuk. Eseményvezérelt alapú szimuláció: A digitális logikai áramkörök alapvetően párhuzamosan, illetve konkurensen működő rendszerek, amelyeknek modellezéséhez elengedhetetlenül szükséges a párhuzamos feladat végrehajtás megoldása. 11
Ezt a lehetőséget biztosítja a SystemC a modulokon keresztül deklarált, majd aztán definiált folyamatok esemény alapú vezérlésével (végrehajtásával). A SystemC-ben kidolgozott modellek tesztelése során az áramköri modell vagy rendszer szimulációja nem a hagyományosan megszokott szekvenciális utasítás végrehajtás logikai alapelvei szerint hajtódik végre, ami a bevezető programozási kurzusokon ismertetésre kerül. A szekvenciális utasítás végrehajtást váltja fel az eseményvezérelt alapú feladat végrehajtás, ami biztosítja a modell párhuzamos egymással akár konkurens végrehajtását is. 12