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

ASIC verifikáció II. 2011.12.05..

Hasonló előadás


Az előadások a következő témára: "ASIC verifikáció II. 2011.12.05.."— Előadás másolata:

1 ASIC verifikáció II

2

3 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 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 Alapfogalmak (ismétlés)

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

7 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 Alapfogalmak (ismétlés)
Modul szintű, constrained random, e-verifikáció 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 futás2 futás1 HDL egy állapota BUG-os állapot Nem “üzemi” állapot A teszt által bejárt állapot Állapotok egy tartománya egy tesztre

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

10 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 Alapfogalmak (ismétlés)
Újrafelhasználhatóság, eRM 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 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 my_asic_1 my_asic_2 dma_env dma_env my_dma module my_dma module

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

13 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 Verifikáció - eRM eVC Az eVC-k használatának előnyei: Hátrányok:
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 Verifikáció - eRM eVC Az eVC-k csoportosítása: DUV
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. Modul eVC Interfész eVC Interfész eVC DUV

16 Verifikáció - eRM eVC könyvtárszerkezet e/ docs/ examples/ misc/ sve/
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 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 Agent Config – az eVC konfigurációs interfésze. Signal Map Signal Map (SMP) – portokat tartalmaz, amelyeken keresztül az eVC kapcsolódni tud a DUV-hoz. Config Signal Map Synchronizer Synchronizer- portokat tartalmaz, amelyek közösek a design egészére (pl. clock, reset) Sequence driver Seq Seq Agent - unit, amely egy adott interfészhez tartozó eVC részegységeket tartalmazza (pl.: UART esetében 2 agent – RX, TX) Sequence driver- unit, amely koordinálja a user-defined teszt szekvenciákat (Seq). DUV

18 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 Agent Signal Map Agent Bus Functional Model (BFM) – unit, amely kommunikál a DUV interfésszel. Config Synchronizer 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. Signal Map Sequence driver Seq Seq Mon BFM Coll DUV

19 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 eVC Synchronizer CLK/RST events CLK/RST Port CLK-RST gen

20 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 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 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 Verifikáció - eRM A modul eVC felépítése
Register map – ez a struktúra tartalmazza a DUV regiszter leírását. env_u Config 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. Signal Map Synchronizer Register Map Scoreboards – speciális monitorozó egység, általában adatok sorrendhelyes összehasonlítására használjuk őket. Reference models Scoreboards Monitor DUV

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

25 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…) Simple port SVE Event port mod_env_u Config SMP Register Map Monitor Reference models Sync Scoreboards Method port If_env_u Config SMP Agent Sequence driver Sync Mon BFM DUV CLK gen HDL TB

26 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 A verifikációs környezet megtervezése

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

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

30 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 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 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 Nem megengedett értéket írunk be egy konfigurációs regiszterbe Protokollsértés követünk el az egyik interfészen Corner case scenarió esetén a ritkán előforduló események előállítása a cél 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 Az e-nyelv

34 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 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, struct, type, method stb. bárhol kibővíthető a későbbiekben 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..."); method_init_1() is also { message(LOW,"Hello world! Function init 1 also...");

36 e-nyelv Unit 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 -- 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;

37 e-nyelv Struct típus 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 -- 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;

38 e-nyelv További adattípusok Skalár tí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

39 e-nyelv Saját adattípusok, típuskonverzió
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 -- 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 ]; 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);

40 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; };

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

42 e-nyelv Listák Az array típus nem ismert helyette a list típus használható 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); };

43 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 e-nyelv Feltételek if - else
Komplex feltételek írásakor érdemes a zárójelezést használni if a > b then { print a, b; } else { print b, a; }; if a == b { if a in [12,13] { print a; } else if b in [13..20] { print b;

45 e-nyelv Feltételek Case -- 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";

46 e-nyelv Ciklusok for 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 { -- VB style for k from 0 to 9 do { print k; for k from 0 downto 9 do { for k from 0 to 9 step 2 do {

47 e-nyelv Ciklusok for each while 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]; while 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;

48 e-nyelv Ciklusok repeat – until 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);

49 e-nyelv Method, TCM Method 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();

50 e-nyelv Method, TCM 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 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();

51 e-nyelv Párhuzamos szálak
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 { all of { { -- wait 20 clock cycles wait[20]; print "Hello Thread 1"; }; 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[40]; print "Hello Thread 2"; run() is also { start function_x();

52 e-nyelv Portok simple_port method_port event_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“; }; 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 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();

54 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();

55 e-nyelv Generálás, kényszerek
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 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; extend env_u { -- hard constraint keep variable_a < 10; keep variable_b == variable_a; -- the following line will cause a generation "contradiction" error }; -- constraining in methods function_x() is { gen variable_b keeping { it in [20..30];

56 e-nyelv Squence, driver
Az e-nyelv beépített elemekkel támogatja a sequence és sequence driver generálást -- 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; 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: <drivernév> unit előállítása Egy <seqnév> szekvencia előállítása, amely az adott típusú szekvencia itemeket kezeli

57 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!"); }; 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 e-nyelv Üzenetkezelés message() out() print
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() 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!"; };

59 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"); -- 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 Köszönöm a figyelmet!


Letölteni ppt "ASIC verifikáció II. 2011.12.05.."

Hasonló előadás


Google Hirdetések