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

© evosoft GmbH ASIC verifikáció II. 2011.12.05.. © evosoft GmbH Bemutatkozás Sági Péter ASIC fejlesztő / verifikációs mérnök evosoft Hungary Kft.

Hasonló előadás


Az előadások a következő témára: "© evosoft GmbH ASIC verifikáció II. 2011.12.05.. © evosoft GmbH Bemutatkozás Sági Péter ASIC fejlesztő / verifikációs mérnök evosoft Hungary Kft."— Előadás másolata:

1 © evosoft GmbH ASIC verifikáció II

2 © evosoft GmbH Bemutatkozás Sági Péter ASIC fejlesztő / verifikációs mérnök evosoft Hungary Kft. BME-VIK Infokomm / Mikroelektronika (2008) Bemutatkozás ASIC verifikáció Sági Péter ASIC fejlesztő / verifikációs mérnök evosoft Hungary Kft. BME-VIK Infokomm / Mikroelektronika (2008)

3 © evosoft GmbH e-verifikáció Tartalom Alapfogalmak (ismétlés) A verifikációs környezet Constrained-random e-verifikáció Check, coverage, testcase e-Reusability eRM, uVM fogalma Verifikáció az eRM metodológia felhasználásával e-verifikációs komponensek (eVC) Interfész eVC Modul eVC SVE (Specman Verification Environment) eVC-k implementálása az uVM felhasználásával

4 © evosoft GmbH e-verifikáció Tartalom A Verifikációs környezet megtervezése Hova és milyen eVC-t kell elhelyezni? Mit kell check-elni? Hol használjunk coverage-t? Mikor kell extra test scenario? Az e-nyelv A nyelv jellemzői, párhuzamok más programnyelvekkel Nyelvi elemek Speciális nyelvi elemek Példák

5 © evosoft GmbH Alapfogalmak (ismétlés)

6 © evosoft GmbH Alapfogalmak (ismétlés) A verifikációs környezet DUV Verifikációs környezet Interfész komponens Referencia Modell ?=  checker coverage Tartalmazza A HDL testbench-et a DUV instance-szal A testbench passzív (clock, reset generátor lehet rajta) A verifikációs komponenseket

7 © evosoft GmbH Alapfogalmak (ismétlés) Modul szintű, constrained random, e-verifikáció A verifikációs szintek kiválasztása A továbbiakban a modul szintű verifikációt tárgyaljuk Comprehensive functional verification the complete industry cycle - szerző: Bruce Wile,John C. Goss,Wolfgang Roesner

8 © evosoft GmbH Alapfogalmak (ismétlés) Modul szintű, constrained random, e-verifikáció HDL egy állapota BUG-os állapot Nem “üzemi” állapot A teszt által bejárt állapot futás1futás2 Állapotok egy tartománya egy tesztre Egy teszt több futás alatt más utakat járhat be A verifikációs teret felosztjuk kisebb egységekre A szűkített tartományon belül egy teszt hatékonyabban működik Ki lehet zárni a nem üzemi állapotokat

9 © evosoft GmbH Alapfogalmak (ismétlés) Modul szintű, constrained random, e-verifikáció Az e-nyelvet használjuk

10 © evosoft GmbH Alapfogalmak (ismétlés) Check, coverage, test scenario Check: Funkciók ellenőrzésére alkalmas elem Coverage: A lefedettség mérésére alkalmas nyelvi eszköz Test scenario: Bizonyos verifikációs forgatókönyvet megvalósító stimulus szekvencia

11 © evosoft GmbH Alapfogalmak (ismétlés) Újrafelhasználhatóság, eRM my_asic_1 dma_env my_asic_2 A funkcionális verifikáció módszertanának egyik alapja az újrafelhasználhatóság. Lényege, hogy egy modul verifikációs környezetét minimális plusz munka befektetéssel tudjuk használni egy másik ASIC esetén is Az eRM metodológia az újrafelhasználhatóság alapkövetelményeit fogalmazza meg dma_env my_dma module my_dma module Az eRM szabályrendszere megkövetel bizonyos implementálási szabályokat Alapegysége a verifikációs komponens (VC) A verifikációs környezet felépítése a komponensek hierarchiáján és az őket összekötő kapcsolatokon alapul

12 © evosoft GmbH Verifikáció az eRM metodológia felhasználásával

13 © evosoft GmbH Verifikáció - eRM eVC Az eVC (e Verification Component) egy önálló, konfigurálható verifikációs környezet, amely általában egy interfész típus verifikálására alkalmas. Rendelkezik minden eszközzel, amellyel az DUV stimulálható, ellenőrizhető illetve a verifikáció teljessége monitorozható. Használható önállóan, vagy egy nagyobb környezet részeként. Nem egyszeri használatra implementálják. Részei titkosíthatók. Ez lehetőséget nyújt a bonyolultabb eVC-k védelmére (akár a HDL IP-k esetében). Lehet olyan eset, amikor egy eVC egy másiktól függ Pl.: a TCP/IP eVC használhatja az Ethernet eVC-t. A TCP/IP eVC-t ennek ellenére az Ethernet eVC-től függetlenül fejleszthetik. Példák Busz alapú eVC-k (PCI, AHB, OCP…) Data kommunikáció (UART, SPI, Ethernet, MAC…) Magaszintű (TCP/IP, HTTP…)

14 © evosoft GmbH Verifikáció - eRM eVC Az eVC-k használatának előnyei: A standard (eRM-ben meghatározott) konfigurációs felületnek köszönhetően könnyedén beilleszthető egy már meglévő verifikációs környezetbe (plug-and-play) Felgyorsítja a verifikációs folyamatot Az eVC-k struktúrája minden esetben egységes Hordozhatóság ez egyes fejlesztői csoportok, illetve cégek között (Nem szükséges mindenhol ugyanazon fejlesztői kompetencia kiépítése, a fejlesztők a saját problémák megoldására összpontosíthatnak) Hátrányok: Az eRM által megkövetelt eVC struktúra kialakítása sokkal több kód implementálásával jár

15 © evosoft GmbH Verifikáció - eRM eVC Az eVC-k csoportosítása: Interfész eVC – egy adott típusú interfészhez kapcsolódik, és annak meghajtását, ellenőrzését végzi. Információkat továbbíthat a verifikációs környezet magasabb szintjei felé. Modul eVC – nem rendelkezik aktív kapcsolattal a DUV interfészeihez, csupán bemenetként használhatja annak jeleit. Általában a verifikációs környezet magasabb hierarchia szintjén helyezkedik el és az egyes interfész eVC-khez kapcsolódik. DUV Interfész eVC Modul eVC

16 © evosoft GmbH Verifikáció - eRM eVC könyvtárszerkezet eVC top directory PACKAGE_README.txt e/docs/examples/misc/sve/ Readme.txt - Az eVC csomagról tartalmaz leírást (név, verzió, könyvtárak) e/ - az eVC forrásfájljait tartalmazza docs/ - az eVC dokumentációját tartalmazza examples/ - pédakódok az eVC használatához (példa konfigurációs fájl) misc/ - egyéb… sve/ - egy minta környezet forrásfájljait tartalmazza

17 © evosoft GmbH Verifikáció - eRM Az interfész eVC felépítése Environment unit - ez tartalmazza az eVC összes részegységét. Felhasználáskor ez kerül példányosításra. env_u Config Signal Map Agent Config Signal Map Sequence driver Seq DUV Config – az eVC konfigurációs interfésze. Signal Map (SMP) – portokat tartalmaz, amelyeken keresztül az eVC kapcsolódni tud a DUV-hoz. Synchronizer- portokat tartalmaz, amelyek közösek a design egészére (pl. clock, reset) Synchron izer Sequence driver- unit, amely koordinálja a user-defined teszt szekvenciákat (Seq). Agent - unit, amely egy adott interfészhez tartozó eVC részegységeket tartalmazza (pl.: UART esetében 2 agent – RX, TX)

18 © evosoft GmbH Verifikáció - eRM Az interfész eVC felépítése Monitor – unit, amely passzívan monitorozza az interfész működését. Eseményeket ill. adatokat szolgáltat a többi részegység számára. env_u Config Signal Map Agent Config Signal Map Sequence driver Mon BFM Seq DUV Synchron izer Bus Functional Model (BFM) – unit, amely kommunikál a DUV interfésszel. Collector– unit, a monitor része, low-level monitorozást végez, míg a magasabb szintű protokoll implementálása a monitorban történik. Coll

19 © evosoft GmbH Verifikáció - eRM Synchronizer A synchronizer egy unit, amely design minden komponense által használt közös jelekhez kapcsolódik. Ilyen jelek lehetnek a különböző órajelek és a reset jelek. Feladatai: Az órajelek ill. reset jelek detektálása a bemeneti portokon keresztül, majd események (event) előállítása az eVC többi egysége számára Synchronizer CLK-RST gen Port CLK/RST eVC CLK/RST events

20 © evosoft GmbH Verifikáció - eRM Sequence, item, driver Sequence item – a DUV számára bemeneti adatot vagy vezérlő információt realizáló struktúra (pl. egy adatcsomag, regiszter érték stb.) Sequence – struktúra, a sequence item-ek folyama. Általában magasabb szintű funkcionalitást is tartalmaz ezek előállítására vonatkozóan (pl.: generálási kényszereket, feltételeket stb.) Sequence driver – unit, az átvivő réteg a verifikációs környezet és a szekvenciák között Mind a sequence item-ek, mind a sequence-k fogadására képes. Ütemezi ezek végrehajtását A végrehajtás során a sequence item-ek a BFM-hez továbbítódnak

21 © evosoft GmbH Verifikáció - eRM BFM Bus Functional Model – a rá kapcsolódó DUV interfész protokollját megvalósító unit. Feladatai: Fogadja a sequence item-eket a sequence driver-től Az item-ekben definiált paramétereknek megfelelően meghajtja az interfészt Pontosan ismernie kell az interfész protokolljának paramétereit (pl.: időzítés, adatbitek száma stb.)

22 © evosoft GmbH Verifikáció - eRM Collector és Monitor Collector - a rá kapcsolódó DUV interfész protokollját monitorozó unit. Feladatai: Pontosan ismernie kell az interfész protokolljának paramétereit (pl.: időzítés, adatbitek száma stb.) Eseményeket ill. begyűjtött adatcsomagokat továbbít a monitor egységnek Alacsony szintű protokoll checker-eket tartalmazhat Monitor- collector-tól kapott adatok feldolgozását és továbbítását végző unit. Feladatai a követelményektől függenek: Magasabb szintű protokolláris adatstruktúrák felépítése Ezek ellenőrzése és továbbítása a verifikációs környezet más elemei számára

23 © evosoft GmbH Verifikáció - eRM A modul eVC felépítése env_u Config Signal Map Register Map Monitor Reference models Synchronizer Scoreboards DUV Register map – ez a struktúra tartalmazza a DUV regiszter leírását. Referencia modellek – a DUV funkcionalitását modellező struktúrák, amelyek kimenetét felhasználjuk a funkcionális check-ek implementálása során. Scoreboards – speciális monitorozó egység, általában adatok sorrendhelyes összehasonlítására használjuk őket.

24 © evosoft GmbH Verifikáció - eRM A scoreboard lehetséges kialakítása Scoreboard Monitor IF eVC 1 Monitor IF eVC 2 Check – OK? Dat Modul eVC Dat

25 © evosoft GmbH Verifikáció - eRM Kapcsolódási lehetőségek a komponensek között eVC – HDL – external portokkal ill. event portokkal eVC – eVC – ún. method portokkal ill. event portokkal Az uVM metodológia útmutatást ad univerzális verifikációs komponensek létrehozásához A különféle portok használata lehetővé teszi az eltérő verifikációs nyelveken implementált komponensek csatlakoztatását az e környezethez (SystemC modell, System Verilog VC…) If_env_u Config SMP Agent Sequence driver Sync Mon BFM mod_env_u Config SMP Register Map Monitor Reference models Sync Scoreboards DUV CLK gen Simple port Event port Method port SVE HDL TB

26 © evosoft GmbH Verifikáció - eRM SVE és virtual sequence driver Az SVE-ben (Simulation and Verification Environment) példányosítjuk és kapcsoljuk össze az egyes komponenseket. Jellemzők: Tartalmazza az egyes hierarchia szinteken elhelyezkedő eVC-k példányait Beimportálja az eVC-k konfigurációs fáljait Definiálja közöttük a működéshez szükséges összeköttetéseket (pointerek, method-, és event portok) Tartalmazza az ún. virtual seqeuence driver példányát Virtual sequence driver Speciális sequence driver. Virtuális mivel nincs dedikált sequence item-je, de sequence-i lehetnek! A tesztekben mindig a virtual MAIN sequence a szimuláció futtatását irányító fő szekvencia Mivel ez a driver végzi a szimulációban a fő vezérlő funkciót, célszerű tartalmaznia a többi eVC sequence driver-eire pointereket.

27 © evosoft GmbH A verifikációs környezet megtervezése

28 © evosoft GmbH HDL TB SVE Környezet tervezése Modul verifikációs környezet If_env_u Config SMP Agent Sequence driver Sync Mon BFM mod_env_u Config SMP Register Map Monitor Reference models Sync Scoreboards DUV If_env_u Config SMP Agent Sequence driver Sync Mon BFM If_env_u Config SMP Agent Sequence driver Sync Mon BFM Address map Pointerek a modul eVC-ből az IF eVC-kre Példányosítás az SVE-ben Az IF eVC-k kapcsolódnak a DUV interfészeihez A modul eVC-ből konfigurálódik

29 © evosoft GmbH HDL TB SVE Környezet tervezése DUV encapsulated interfészekkel If_env_u Config SMP Agent Sequence driver Sync Mon BFM mod_env_u Config SMP Register Map Monitor Reference models Sync Scoreboards If_env_u Config SMP Agent Sequence driver Sync Mon BFM If_env_u Config SMP Agent Sequence driver Sync Mon BFM Address map Példányosítás az SVE-ben Példányosítás a modul eVC-ben Példányosítás az SVE-ben DUV Ez az IF eVC a DUV belső interfészéhez kapcsolódik

30 © evosoft GmbH Környezet tervezése Checkek megtervezése Mit checkeljünk? Pl.: A be-, és kimeneti adatok konzisztenciáját Kimeneti jelek viselkedését (IRQ kimenet pulzus szélessége elegendő-e?, reset után egyik kimenet sincs X, Z állapotban) Regiszter interfész megfelelő működését Komplex, több tényezőtől függő funkcionalitást (pl. state machine) stb. Hova jönnek a checkek? Az interface eVC collectorába, monitorába A collectorban általában protokoll és signal check-ek A monitorban magasabb szintű ellenőrzés A modul eVC monitorába A referencia modell kimenetét felhasználó checkek A scoreboard checkek

31 © evosoft GmbH Környezet tervezése Coverage megtervezése Mire kell coverage-t gyűjtenünk? Pl.: Jel vektor kimeneti értékére Egy regiszter mező értékére Konfiguráció előfordulására IRQ esetén, annak bekövetkezésére ill. kiszolgálására Tranzakció paramétereire (cím, irány…) stb. A coverage értékére lehet ún. range-eket definiálni A felvehető értékkészletet tartományokra bontva figyeli Ha az összes definiált tartományban van legalább 1 találat, akkor a coverage item betöltődik Speciális coverage típus az ún. cross coverage (coverage mátrix) Több, már definiált item ÉS kapcsolata Csak akkor töltödik be, ha az összes benne található item mindegyike betöltődik Példa: Item1: „FIFO overflow IRQ” történt Item2: „FIFO írás” történt Cross item = Item1 ÉS Item2: FIFO írás történt, amikor már volt overflow IRQ

32 © evosoft GmbH Környezet tervezése Test scenario megtervezése A test case tulajdonképpen egy nagy test scenario Tervezésénél figyelembe kell vennünk a rendszer valós működését Pl.: Reset triggerelése Konfiguráció beírása a DUV regisztereibe Egyéb stimulus generálása (pl.: adatátvitel) IRQ esetén, annak kiszolgálása (pl.: status bit törlése) stb. Lehet olyan scenariót tervezni, amellyel a DUV hibakezelési képességeit szeretnénk leellenőrizni Pl.: Nem megengedett értéket írunk be egy konfigurációs regiszterbe Protokollsértés követünk el az egyik interfészen stb. Corner case scenarió esetén a ritkán előforduló események előállítása a cél Pl.: FIFO túlcsordulásakor beírunk még egy értéket Hosszú futásidővel elérjük bizonyos számlálók átfordulását

33 © evosoft GmbH Az e-nyelv

34 © evosoft GmbH e-nyelv Bevezetés Az e-nyelv egy hardver verifikációs nyelv A nyelvet egy ma már a Cadence EDA toolokat fejlesztő vállalat tulajdonában levő cég a Verisity Inc. Of Montain View, CA. feljlesztette ki Fordításához és futtatásához a Specman Elite tool szükséges Jellemzői: Objektum orientált Aspektus orientált Kényelmes használat akár a C++, akár a BASIC nyelvet ismerők számára Használata során elengedhetetlen legalább az eRM ismerete Különböző nyelvi elemekkel támogatja a funkcionális verifikáció speciális követelményeit (checkek, coverage gyűjtés, sequence, event, error reporting, stimulus constainig stb.) Elsajátításához és használatához több éves gyakorlat szükséges…

35 © evosoft GmbH e-nyelv Aspektus orientált unit env_u { -- field declaration field_1 : uint; -- empty method declaration method_init_1() is empty; -- method definition method_init_2() is { message(LOW,"Hello world! Function init 2..."); }; unit env_u { -- field declaration field_1 : uint; -- empty method declaration method_init_1() is empty; -- method definition method_init_2() is { message(LOW,"Hello world! Function init 2..."); }; extend env_u { -- field declaration field_2 : uint; -- extending method 1 method_init_1() is first { message(LOW,"Hello world! Function init 1 first..."); }; -- extending method 2 method_init_2() is only { message(LOW,"Hello world! Function init only 2..."); }; -- extending method 1 method_init_1() is also { message(LOW,"Hello world! Function init 1 also..."); }; extend env_u { -- field declaration field_2 : uint; -- extending method 1 method_init_1() is first { message(LOW,"Hello world! Function init 1 first..."); }; -- extending method 2 method_init_2() is only { message(LOW,"Hello world! Function init only 2..."); }; -- extending method 1 method_init_1() is also { message(LOW,"Hello world! Function init 1 also..."); }; Unit, struct, type, method stb. bárhol kibővíthető a későbbiekben

36 © evosoft GmbH e-nyelv Unit -- creating a unit unit env_u { }; -- creating a unit with inheritance unit env_second_u like ovm_env { }; -- Using the env_u unit extend sys { env : env_u is instance; }; -- creating a unit unit env_u { }; -- creating a unit with inheritance unit env_second_u like ovm_env { }; -- Using the env_u unit extend sys { env : env_u is instance; }; Alap strukturális blokk verifikációs modulok implementálásához Jellemzői: Tartalmazhat függvényeket Tartalmazhat változókat Használatkor példányosítani kell Általában statikus használat… Örökölhet tulajdonságokat már meglévő unitoktól

37 © evosoft GmbH e-nyelv Struct típus -- data item struct definition struct data_item_s { }; -- creating data item struct with inheritance struct data_item_second_s like any_sequence_item { }; -- using the struct extend env_u { data : data_item_s; }; -- data item struct definition struct data_item_s { }; -- creating data item struct with inheritance struct data_item_second_s like any_sequence_item { }; -- using the struct extend env_u { data : data_item_s; }; Adatblokk, általában adat egységek implementálásához Jellemzői: Tartalmazhat függvényeket Tartalmazhat változókat Használatkor nem kell példányosítani Általában dinamikus használat… Örökölhet tulajdonságokat már meglévő structoktól

38 © evosoft GmbH e-nyelv További adattípusok A nyelv támogatja a lebegőpontos ábrázolást real típus (hasonlít a double típushoz a C-ben) nem generálható !!! További típusok string, list Skalár típusok

39 © evosoft GmbH e-nyelv Saját adattípusok, típuskonverzió -- Type definition type direction_t : [ RX ]; -- Type extension extend direction_t : [ TX ]; -- Type definition - the first element value is determined type state_t : [ STATE_0 = 1, STATE_1, STATE_2 ]; -- Type definition type direction_t : [ RX ]; -- Type extension extend direction_t : [ TX ]; -- Type definition - the first element value is determined type state_t : [ STATE_0 = 1, STATE_1, STATE_2 ]; A nyelv lehetőséget nyújt saját adattípusok létrehozásához (enumerated scalar) Ezek is „extendálhatóak” a későbbiekben Típuskonverzió a „.as_a()” függvény használatával -- declarations variable_1 : uint; variable_2 : int; -- operation with type cast variable_1 = variable_2.as_a(uint); -- declarations variable_1 : uint; variable_2 : int; -- operation with type cast variable_1 = variable_2.as_a(uint);

40 © evosoft GmbH e-nyelv Változók deklarálása, értékadás unit env_u { -- declarations variable_1 : uint; variable_2 : int; -- declaration limiting the width variable_3 : uint(bits:15); -- the following action is not allowed here!!! variable_3 = 12; function_x() is { -- declaraton and initialization var variable_4 : bool = FALSE; var variable_5 : state_t = STATE_0; -- value assignment variable_1 = 15; variable_2 = -29; variable_1 = 0xEF; -- value assignment to bit range in a variable variable_3[15:8] = 0xAB; variable_3[7:0] = 0x0; }; unit env_u { -- declarations variable_1 : uint; variable_2 : int; -- declaration limiting the width variable_3 : uint(bits:15); -- the following action is not allowed here!!! variable_3 = 12; function_x() is { -- declaraton and initialization var variable_4 : bool = FALSE; var variable_5 : state_t = STATE_0; -- value assignment variable_1 = 15; variable_2 = -29; variable_1 = 0xEF; -- value assignment to bit range in a variable variable_3[15:8] = 0xAB; variable_3[7:0] = 0x0; };

41 © evosoft GmbH e-nyelv Operátorok Bitwise ~, &, |, ^, > Logikai !, not, &&, and, ||, or Aritmetikai +, -, *, /, % Összehasonlítás, >=, ==, !=, in Timing expressions String operátorok

42 © evosoft GmbH e-nyelv Listák unit env_u { -- list declaration example : list of uint(bits:32); function_x() is { -- clearing all items from the list example.clear(); -- add several items to the list example.add(15); example.add(46); example.add(2589); -- print the value of 0 indexed item in the list print example[0]; -- pop the first item from the list var list_item : uint(bits:32) = example.pop0(); -- search for an item in the list list_item = example.first(it == 46); }; unit env_u { -- list declaration example : list of uint(bits:32); function_x() is { -- clearing all items from the list example.clear(); -- add several items to the list example.add(15); example.add(46); example.add(2589); -- print the value of 0 indexed item in the list print example[0]; -- pop the first item from the list var list_item : uint(bits:32) = example.pop0(); -- search for an item in the list list_item = example.first(it == 46); }; Az array típus nem ismert helyette a list típus használható

43 © evosoft GmbH e-nyelv Listák Lista módosító pszeudó függvények add(item), add(list), add0(item) clear() delete() insert(index, item) pop(), pop0() push(), push0() További pszeudó függvények count(expr) exists(expr) first(expr) first_index(expr) has(expr) is_empty() size() top(), top0() Stb.

44 © evosoft GmbH e-nyelv Feltételek if a > b then { print a, b; } else { print b, a; }; if a == b { print a, b; } else { print b, a; }; if a in [12,13] { print a; } else if b in [13..20] { print b; }; if a > b then { print a, b; } else { print b, a; }; if a == b { print a, b; } else { print b, a; }; if a in [12,13] { print a; } else if b in [13..20] { print b; }; if - else Komplex feltételek írásakor érdemes a zárójelezést használni

45 © evosoft GmbH e-nyelv Feltételek -- type def type state_t : [ STATE_0 = 1, STATE_1, STATE_2 ]; unit bfm_u { states : state_t; function_x() is { case states { STATE_0 : { print "This is STATE_0"; }; STATE_1 : { print "This is STATE_1"; }; default : { print "Unknown state"; }; -- type def type state_t : [ STATE_0 = 1, STATE_1, STATE_2 ]; unit bfm_u { states : state_t; function_x() is { case states { STATE_0 : { print "This is STATE_0"; }; STATE_1 : { print "This is STATE_1"; }; default : { print "Unknown state"; }; Case

46 © evosoft GmbH e-nyelv Ciklusok unit env_u { function_x() is { var i : uint; -- C style for cycle for{i=0; i<10; i+=1} { print i; }; for{i=0; i<10; i+=1} do { print i; }; -- VB style for k from 0 to 9 do { print k; }; for k from 0 downto 9 do { print k; }; for k from 0 to 9 step 2 do { print k; }; unit env_u { function_x() is { var i : uint; -- C style for cycle for{i=0; i<10; i+=1} { print i; }; for{i=0; i<10; i+=1} do { print i; }; -- VB style for k from 0 to 9 do { print k; }; for k from 0 downto 9 do { print k; }; for k from 0 to 9 step 2 do { print k; }; for

47 © evosoft GmbH e-nyelv Ciklusok unit env_u { function_x() is { var numbers : list of uint = {1; 2; 3; 4}; for each (n) in numbers do { print n; }; for each in numbers do { print numbers[index]; }; unit env_u { function_x() is { var numbers : list of uint = {1; 2; 3; 4}; for each (n) in numbers do { print n; }; for each in numbers do { print numbers[index]; }; for each unit env_u { function_x() is { var exit_cond : bool = FALSE; var i : uint = 0; while(!exit_cond) { if i == 10 { exit_cond = TRUE; }; i += 1; }; unit env_u { function_x() is { var exit_cond : bool = FALSE; var i : uint = 0; while(!exit_cond) { if i == 10 { exit_cond = TRUE; }; i += 1; }; while

48 © evosoft GmbH e-nyelv Ciklusok unit env_u { function_x() is { var exit_cond : bool = FALSE; var i : uint = 0; repeat { if i == 10 { exit_cond = TRUE; }; i += 1; } until(!exit_cond); }; unit env_u { function_x() is { var exit_cond : bool = FALSE; var i : uint = 0; repeat { if i == 10 { exit_cond = TRUE; }; i += 1; } until(!exit_cond); }; repeat – until

49 © evosoft GmbH e-nyelv Method, TCM unit env_u { function_x(param_1 : bool, param_2 : uint) is { var exit_cond : bool = param_1; }; function_y() : uint is empty; function_y() : uint is also { print "hello"; result 0; }; check() is also { -- function call function_x(TRUE,25); var value : uint = function_y(); compute function_y(); }; unit env_u { function_x(param_1 : bool, param_2 : uint) is { var exit_cond : bool = param_1; }; function_y() : uint is empty; function_y() : uint is also { print "hello"; result 0; }; check() is also { -- function call function_x(TRUE,25); var value : uint = function_y(); compute function_y(); }; Method

50 © evosoft GmbH e-nyelv Method, TCM unit env_u { is { -- wait 20 clock cycles wait[20]; print "Hello"; -- wait for another event print "reset occured"; }; run() is also { start function_x(); }; unit env_u { is { -- wait 20 clock cycles wait[20]; print "Hello"; -- wait for another event print "reset occured"; }; run() is also { start function_x(); }; TCM – Time Consuming Method Mintavételezési eseménnyel (sampling event) egybeépített függvény Engedélyezett a különböző time consuming függvények használata (wait, sync) Másik TCM-ből történő hívás ugyanolyan mint a rendes függvények esetében Nem TCM-ből törénő hívás csak a „start” parancs segítségével

51 © evosoft GmbH e-nyelv Párhuzamos szálak unit env_u { is { all of { { -- wait 20 clock cycles wait[20]; print "Hello Thread 1"; }; { -- wait 20 clock cycles wait[40]; print "Hello Thread 2"; }; run() is also { start function_x(); }; unit env_u { is { all of { { -- wait 20 clock cycles wait[20]; print "Hello Thread 1"; }; { -- wait 20 clock cycles wait[40]; print "Hello Thread 2"; }; run() is also { start function_x(); }; Lehetőség van párhuzamosan futtatni kódrészleteket all of – a létrehozott szálak mindegyikének befejeződése után megy tovább first of – a leggyorsabb szál befejeződése után leállítja a többi futó szálat és továbbmegy unit env_u { is { first of { { -- wait 20 clock cycles wait[20]; print "Hello Thread 1"; }; { -- wait 20 clock cycles wait[40]; print "Hello Thread 2"; }; run() is also { start function_x(); }; unit env_u { is { first of { { -- wait 20 clock cycles wait[20]; print "Hello Thread 1"; }; { -- wait 20 clock cycles wait[40]; print "Hello Thread 2"; }; run() is also { start function_x(); };

52 © evosoft GmbH e-nyelv Portok simple_port Általában HDL jelekhez történő kapcsolódásra használjuk DE kapcsolódhatunk belső simple_port-okoz is unit signal_map_u like ovm_signal_map { sig_rx : inout simple_port of bit is instance; keep bind(sig_rx, external); keep sig_rx.hdl_path() == “~/Testbench_top/RX“; }; unit signal_map_u like ovm_signal_map { sig_rx : inout simple_port of bit is instance; keep bind(sig_rx, external); keep sig_rx.hdl_path() == “~/Testbench_top/RX“; }; method_port Port, amely method-okat továbbít Lehetővé teszi más nem e-ben íródott verifikációs komponensek kapcsolódását (uVM) event_port Port, amely event-eket továbbít Kapcsolódhatunk vele HDL jelekhez is Lehetővé teszi más nem e-ben íródott verifikációs komponensek kapcsolódását (uVM)

53 © evosoft GmbH e-nyelv event Speciális nyelvi elem, amely az időbeli működés specifikálását és ellenőrzését teszi lehetővé unit monitor_u { !smp : smp_u; -- event for the RX signal rise - clock rise event event rx_rise_e is -- defining local event based on another event event monitor_clock_e is -- defining local "empty" event event hello_e; -- defining event based on a condition and other events event rx_rise_and_tx_high_e is true(smp.sig_tx$ == 1) is { -- emitting the hello event emit hello_e; -- if the rx_rise_and_tx_high_e event occurred print out the message if { print "We can do e-verification!"; }; run() is also { start main(); }; unit monitor_u { !smp : smp_u; -- event for the RX signal rise - clock rise event event rx_rise_e is -- defining local event based on another event event monitor_clock_e is -- defining local "empty" event event hello_e; -- defining event based on a condition and other events event rx_rise_and_tx_high_e is true(smp.sig_tx$ == 1) is { -- emitting the hello event emit hello_e; -- if the rx_rise_and_tx_high_e event occurred print out the message if { print "We can do e-verification!"; }; run() is also { start main(); };

54 © evosoft GmbH e-nyelv event Az event emittálódásakor automatikusan meghívódik egy az event-hez tartozó ún. handler függvény unit monitor_u { !smp : smp_u; -- defining local event based on another event event monitor_clock_e is -- defining local "empty" event event hello_e; is { -- emitting the hello event emit hello_e; }; -- event handler on hello_e { print "hello is emitted"; }; run() is also { start main(); }; unit monitor_u { !smp : smp_u; -- defining local event based on another event event monitor_clock_e is -- defining local "empty" event event hello_e; is { -- emitting the hello event emit hello_e; }; -- event handler on hello_e { print "hello is emitted"; }; run() is also { start main(); };

55 © evosoft GmbH e-nyelv Generálás, kényszerek unit env_u { -- variable declarations variable_a : uint; variable_b : uint; variable_c : uint; !variable_d : bool; -- soft constraint keep soft variable_a > 10; keep soft variable_a in [15..20]; keep soft variable_b == 100; -- add generation weigth - use only with soft keep soft variable_c == select { 10 : 15; 90 : 115; }; -- the following line will cause a generation error keep variable_d == TRUE; }; unit env_u { -- variable declarations variable_a : uint; variable_b : uint; variable_c : uint; !variable_d : bool; -- soft constraint keep soft variable_a > 10; keep soft variable_a in [15..20]; keep soft variable_b == 100; -- add generation weigth - use only with soft keep soft variable_c == select { 10 : 15; 90 : 115; }; -- the following line will cause a generation error keep variable_d == TRUE; }; A változók értékének generálásakor megadhatunk generálási szabályokat (ún. constraint) Hard – a változó constrain-elése után nem lehet más a kiinduló szabálynak ellentmondó generálási feltétel megadni (keep) Soft – a kezdeti szabályt bármikor felülírhatja egy annak ellentmondó generálási feltétel (keep soft) Általában a változók kezdeti értékének generálásakor soft, az újbóli értékgeneráláskor hard constraineket használunk. A nem generálható változókat ! jellel kell jelölni extend env_u { -- hard constraint keep variable_a < 10; keep variable_b == variable_a; -- the following line will cause a generation "contradiction" error keep variable_a < 10; }; extend env_u { -- constraining in methods function_x() is { -- hard constraint gen variable_b keeping { it in [20..30]; }; extend env_u { -- hard constraint keep variable_a < 10; keep variable_b == variable_a; -- the following line will cause a generation "contradiction" error keep variable_a < 10; }; extend env_u { -- constraining in methods function_x() is { -- hard constraint gen variable_b keeping { it in [20..30]; };

56 © evosoft GmbH e-nyelv Squence, driver -- sequence item definition struct seq_item_s like any_sequence_item { data : uint(bits:32); }; -- Define the sequence sequence master_sequence using item = seq_item_s, created_driver = master_driver_u; -- Define a virtual sequence sequence virtual_sequence using created_driver = virtual_driver_u; -- sequence item definition struct seq_item_s like any_sequence_item { data : uint(bits:32); }; -- Define the sequence sequence master_sequence using item = seq_item_s, created_driver = master_driver_u; -- Define a virtual sequence sequence virtual_sequence using created_driver = virtual_driver_u; Az e-nyelv beépített elemekkel támogatja a sequence és sequence driver generálást A sequence a seq_item_s struktúrát használja Itt nincs dedikált sequence item tehát a sequence virtuális… A sequence makró a következő műveleteket végzi: unit előállítása Egy szekvencia előállítása, amely az adott típusú szekvencia itemeket kezeli

57 © evosoft GmbH e-nyelv Check implementálás expect – csak unitba, structba (struct member-ként) implementálható check that – csak methodban használható unit monitor_u { event ev_01_e; event ev_02_e; variable_x : uint; expect CHECK_01 => {~[0..1]; else dut_error("ERR_000_CHECK_01 \nTHE EXPECTED ev_02 was MISSING after the ev_01!"); on ev_02_e { check CHECK_02 that (variable_x == 150) else dut_error("ERR_000_CHECK_02 \nThe variable_x doesn't have the expected value which is 150!"); }; unit monitor_u { event ev_01_e; event ev_02_e; variable_x : uint; expect CHECK_01 => {~[0..1]; else dut_error("ERR_000_CHECK_01 \nTHE EXPECTED ev_02 was MISSING after the ev_01!"); on ev_02_e { check CHECK_02 that (variable_x == 150) else dut_error("ERR_000_CHECK_02 \nThe variable_x doesn't have the expected value which is 150!"); }; dut_error – előre definiált print formátum hibajelzésre, a hibák összesítésénél és ellenőrzésénél csak ezt fogadják el a Cadence tool-ok!

58 © evosoft GmbH e-nyelv Üzenetkezelés message() Log üzenetek kiírására szolgáló függvény Megadhatóak különböző verbosity szintek (NONE, LOW, MEDIUM, HIGH, FULL) A logban megjelenik a szimulációs időpont is out() Log üzenetek kiírására szolgáló függvény Nincsenek verbosity szintek Nem jelenik meg a szimulációs időpont Általában csak kiegészítő információk megjelenítésére használják print Hasonló az out()-hoz Struktúrák kiíratásához célszerű használni unit monitor_u { event ev_01_e; on ev_01_e { message(LOW, "Hello world!"); out("Hello world!"); print "Hello world!"; }; unit monitor_u { event ev_01_e; on ev_01_e { message(LOW, "Hello world!"); out("Hello world!"); print "Hello world!"; };

59 © evosoft GmbH e-nyelv Coverage cover, item és cross kulcsszavak unit monitor_u { event ev_01_e; event ev_02_e; variable_x : uint; variable_y : uint; -- coverage group definition cover ev_01_e is { item cov_var_x : uint = variable_x; }; cover ev_02_e is { -- coverage item definition using ranges item cov_var_y : uint = variable_y using ranges = { range([0..100], "var between 0 and 100"); range([ ], "var between 101 and 200"); }; item cov_var_x : uint = variable_x; -- cross coverage matrix definition cross cov_var_y, cov_var_x using name = cc__cov_var_y__cov_var_x; -- defining complex coverage item item cov_var_x_compl : uint = variable_x using when = ((variable_x in [ ]) and (variable_y % 2 == 0)), ignore = (variable_x == variable_y); }; unit monitor_u { event ev_01_e; event ev_02_e; variable_x : uint; variable_y : uint; -- coverage group definition cover ev_01_e is { item cov_var_x : uint = variable_x; }; cover ev_02_e is { -- coverage item definition using ranges item cov_var_y : uint = variable_y using ranges = { range([0..100], "var between 0 and 100"); range([ ], "var between 101 and 200"); }; item cov_var_x : uint = variable_x; -- cross coverage matrix definition cross cov_var_y, cov_var_x using name = cc__cov_var_y__cov_var_x; -- defining complex coverage item item cov_var_x_compl : uint = variable_x using when = ((variable_x in [ ]) and (variable_y % 2 == 0)), ignore = (variable_x == variable_y); };

60 © evosoft GmbH Köszönöm a figyelmet!


Letölteni ppt "© evosoft GmbH ASIC verifikáció II. 2011.12.05.. © evosoft GmbH Bemutatkozás Sági Péter ASIC fejlesztő / verifikációs mérnök evosoft Hungary Kft."

Hasonló előadás


Google Hirdetések