ASIC - Mikrochipek, amik a PLC-ket mozgatják

Az evosoft ASIC ágazatánál olyan integrált áramkörök fejlesztésével foglalkozunk, amik a Siemens ipari automatizálási rendszereiben kerülnek felhasználásra. A Simatic S7 PLC-k világszerte piacvezetők ezen a területen, és nem csak a különféle ipari gyártósorok vezérlésénél használják ezeket, hanem akár egy sífelvonóban, vagy éppen egy hullámvasútnál is. A PLC modulok lelkét az alkalmazás-specifikus IC-k (=ASIC) jelentik, ami lényegében egy komplex digitális áramkör egy chip-be integrálva.

A digitális áramköröket VHDL nyelven írjuk le. Ez egy speciális hardver leíró „programnyelv”, amivel egy viszonylag magas absztrakciós szinten tudjuk megfogalmazni a feladatot. Így nem kell feltétlen D flip-flop-ok, illetve logikai kapuk szintjén kezelnünk az implementációt. Ezt megteszi helyettünk az úgynevezett szintézis tool, ami a VHDL leírást kapu áramkörökre fordítja: ez lesz a „netlist”. A netlist már a fizikailag legyártható áramkörhöz sokkal közelebbi reprezentáció. A technológiai library-k segítségével ez lényegében egy az egyben tranzisztorokból felépített kapcsolássá alakítható. A layout során ez alapján készítik el a gyártáshoz szükséges optikai maszkokat. Ezeket a maszkokat használják arra, hogy a szilícium lapon fotolitografikus úton megvalósítsák az egyes tranzisztorokat, illetve az összeköttetéseket biztosító fémrétegeket.

Az IC gyártásához szükséges maszkok előállítása rendkívül költséges, dollár milliókban mérhető. A gyártási technológiából adódóan ezek az áramkörök később nem módosíthatóak, vagyis „hard-coded” módon kerülnek megvalósításra a szilícium lapon. Tehát ha gyártás után derül fény valamilyen tervezési hibára, akkor azt már legtöbbször nem lehet javítani. Ilyenkor meg kell találni a hibát a kódban, ki kell javítani, és újra kell gyártani az IC-t. Ez a „redesign” újabb dollár milliókat jelenthet. Ezért rendkívül fontos a verifikáció.

A funkcionális verifikáció során (gyakorlatilag még a tervezési időben) leellenőrizzük, hogy a specifikált funkciók helyesen lettek-e implementálva VHDL-ben. Az a célunk, hogy lehetőleg ne maradjon bug a design-ban, így a 4-szem-elv alapján más végzi az implementációt, és más a verifikációt. Azért, hogy minél több tesztesetet kipróbáljunk még szimulátorban, úgynevezett random verifikációt használunk. Ez azt jelenti, hogy egy regressziós futás során többször lefuttatjuk az egyes teszteket, amelyek minden alkalommal más bemeneti tesztvektorokat generálnak. Így tudjuk azt elérni, hogy ne csak olyan inputkombinációkkal teszteljük a rendszert, amire épp a tesztelő gondolt, hanem véletlenszerűen generálódjanak különböző bemenetek, és így rejtett hibákra is fény derüljön. Fontos kérdés, hogy meddig kell ezeket a teszteket futtatni, mikor mondhatjuk, hogy készen vagyunk. Erre a célra használjuk a „coverage” mérőszámot, ami azt mutatja meg, hogy a letesztelni kívánt funkciók hány százalékát sikerült már letesztelnünk. Még a fejlesztés elején, a specifikáció megszületése után kitűzzük a verifikációs célokat, hogy tudjuk, hová szeretnénk eljutni. Ha a verifikáció végén sikerül elérnünk a mágikus 100%-ot (ami sokszor egyáltalán nem könnyű feladat), akkor azt mondhatjuk, hogy készen vagyunk. Ez természetesen nem jelenti azt, hogy minden bug-ot megtaláltunk, de azt igen, hogy a specifikált funkciókat a várható felhasználási környezetben teszteltük, és nem találtunk hibát.

A verifikáció rendkívül időigényes folyamat: az implementáció és a verifikáció általában 30-70% arányban viszonyulnak egymáshoz mind költségben, mind időben. A Siemens-szel már másfél éve dolgozunk együtt ezen a területen újabb és újabb projektekbe vonnak be minket, és időközben csapatunk is folyamatosan bővül, immár 9 fővel dolgozunk ezen területen.
(Szerző: Csuzi András)