Transcript
Page 1: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

ASIC verifikáció II.2011.12.05.

Page 2: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

Bemutatkozás

Sági PéterASIC fejlesztő / verifikációs mérnök

evosoft Hungary [email protected]

BME-VIK Infokomm / Mikroelektronika (2008)

Bemutatkozás

ASIC verifikáció

Sági PéterASIC fejlesztő / verifikációs mérnök

evosoft Hungary [email protected]

BME-VIK Infokomm / Mikroelektronika (2008)

Page 3: ASIC verifikáció II. 2011.12.05

© 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

Page 4: ASIC verifikáció II. 2011.12.05

© 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

Page 5: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

• Alapfogalmak (ismétlés)

Page 6: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

Alapfogalmak (ismétlés)

A verifikációs környezet

DUV

Verifikációs környezet

Interfész komponens

Referencia Modell

1011001010

?=

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

Page 7: ASIC verifikáció II. 2011.12.05

© 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

Page 8: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

Alapfogalmak (ismétlés)

Modul szintű, constrained random, e-verifikáció

HDL egy állapota

BUG-os állapotNem “üzemi” állapot

A teszt által bejárt állapot

futás1futás2

Állapotok egy tartományaegy 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

Page 9: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

Alapfogalmak (ismétlés)

Modul szintű, constrained random, e-verifikáció

• Az e-nyelvet használjuk

Page 10: ASIC verifikáció II. 2011.12.05

© 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

Page 11: ASIC verifikáció II. 2011.12.05

© 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_dmamodule

my_dmamodule

• 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

Page 12: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

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

Page 13: ASIC verifikáció II. 2011.12.05

© 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…)

Page 14: ASIC verifikáció II. 2011.12.05

© 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

Page 15: ASIC verifikáció II. 2011.12.05

© 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

Interfész eVC

Modul eVC

Page 16: ASIC verifikáció II. 2011.12.05

© 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

Page 17: ASIC verifikáció II. 2011.12.05

© 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

AgentAgent

Config

Signal Map

Sequence driver

SeqSeq

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)

Synchronizer

• 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)

Page 18: ASIC verifikáció II. 2011.12.05

© 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

AgentAgent

Config

Signal Map

Sequence driver

MonBFM

SeqSeq

DUV

Synchronizer

• 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

Page 19: ASIC verifikáció II. 2011.12.05

© 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

eVCCLK/RST events

Page 20: ASIC verifikáció II. 2011.12.05

© 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

Page 21: ASIC verifikáció II. 2011.12.05

© 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.)

Page 22: ASIC verifikáció II. 2011.12.05

© 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

Page 23: ASIC verifikáció II. 2011.12.05

© 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.

Page 24: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

Verifikáció - eRM

A scoreboard lehetséges kialakítása

Scoreboard

Monitor

MonitorIF eVC 1

MonitorIF eVC 2

Check – OK?

Dat Dat

Modul eVC

Dat

Page 25: ASIC verifikáció II. 2011.12.05

© 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_uConfig

SMP

AgentAgent

Sequence driver

Sync

Mon

BFM

mod_env_uConfig

SMP

Register Map

Monitor

Reference models

Sync

ScoreboardsDUV

CLK gen

Simple port

Event port

Method port

SVE

HDL TB

Page 26: ASIC verifikáció II. 2011.12.05

© 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.

Page 27: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

• A verifikációs környezet megtervezése

Page 28: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

HDL TB

SVE

Környezet tervezése

Modul verifikációs környezet

If_env_uConfig

SMP

AgentAgent

Sequence driver

Sync

Mon

BFM

mod_env_uConfig

SMP

Register Map

Monitor

Reference models

Sync

Scoreboards

DUV

If_env_uConfig

SMP

AgentAgent

Sequence driver

Sync

Mon

BFM

If_env_uConfig

SMP

AgentAgent

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

Példányosítás az SVE-ben

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

Page 29: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

HDL TB

SVE

Környezet tervezése

DUV encapsulated interfészekkel

If_env_uConfig

SMP

AgentAgent

Sequence driver

Sync

Mon

BFM

mod_env_uConfig

SMP

Register Map

Monitor

Reference models

Sync

Scoreboards

If_env_uConfig

SMP

AgentAgent

Sequence driver

Sync

Mon

BFM

If_env_uConfig

SMP

AgentAgent

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

Page 30: ASIC verifikáció II. 2011.12.05

© 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

Page 31: ASIC verifikáció II. 2011.12.05

© 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

Page 32: ASIC verifikáció II. 2011.12.05

© 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

Page 33: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

• Az e-nyelv

Page 34: ASIC verifikáció II. 2011.12.05

© 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…

Page 35: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

e-nyelv

Aspektus orientáltunit 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..."); };};

• Unit, struct, type, method stb. bárhol kibővíthető a későbbiekben

Page 36: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

e-nyelv

Unit

-- creating a unitunit env_u {};

-- creating a unit with inheritanceunit env_second_u like ovm_env {};

-- Using the env_u unitextend 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

Page 37: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

e-nyelv

Struct típus

-- data item struct definitionstruct data_item_s {};

-- creating data item struct with inheritancestruct data_item_second_s like any_sequence_item {};

-- using the structextend 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

Page 38: ASIC verifikáció II. 2011.12.05

© 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

Page 39: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

e-nyelv

Saját adattípusok, típuskonverzió

-- Type definitiontype direction_t : [ RX ];

-- Type extensionextend direction_t : [ TX ];

-- Type definition - the first element value is determinedtype 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

-- declarationsvariable_1 : uint;variable_2 : int;

-- operation with type castvariable_1 = variable_2.as_a(uint);

Page 40: ASIC verifikáció II. 2011.12.05

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

Page 41: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

e-nyelv

Operátorok

• Bitwise• ~, &, |, ^, <<, >>

• Logikai• !, not, &&, and, ||, or

• Aritmetikai• +, -, *, /, %

• Összehasonlítás• <, <=, >, >=, ==, !=, in

• Timing expressions

• String operátorok

Page 42: ASIC verifikáció II. 2011.12.05

© 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); };};

• Az array típus nem ismert helyette a list típus használható

Page 43: ASIC verifikáció II. 2011.12.05

© 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.

Page 44: ASIC verifikáció II. 2011.12.05

© 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 - else• Komplex feltételek írásakor érdemes a zárójelezést használni

Page 45: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

e-nyelv

Feltételek

-- type deftype 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

Page 46: ASIC verifikáció II. 2011.12.05

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

• for

Page 47: ASIC verifikáció II. 2011.12.05

© 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]; }; };};

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

• while

Page 48: ASIC verifikáció II. 2011.12.05

© 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); };};

• repeat – until

Page 49: ASIC verifikáció II. 2011.12.05

© 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(); };};

• Method

Page 50: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

e-nyelv

Method, TCM

unit env_u {

function_x() @clock is { -- wait 20 clock cycles wait[20]; print "Hello"; -- wait for another event wait @reset_e; 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

Page 51: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

e-nyelv

Párhuzamos szálak

unit env_u {

function_x() @clock 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 {

function_x() @clock 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(); };};

Page 52: ASIC verifikáció II. 2011.12.05

© 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“;};

• 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)

Page 53: ASIC verifikáció II. 2011.12.05

© 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 - checked @every clock rise event event rx_rise_e is rise(smp.sig_rx$)@smp.clock_rise_e; -- defining local event based on another event event monitor_clock_e is cycle @smp.clock_rise_e; -- 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) and @hello; main() @monitor_clock_e is { wait @rx_rise_e; -- emitting the hello event emit hello_e; -- if the rx_rise_and_tx_high_e event occurred print out the message if now @rx_rise_and_tx_high_e { print "We can do e-verification!"; }; }; run() is also { start main(); };};

Page 54: ASIC verifikáció II. 2011.12.05

© 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 cycle @smp.clock_rise_e; -- defining local "empty" event event hello_e;

main() @monitor_clock_e is { -- emitting the hello event emit hello_e; }; -- event handler on hello_e { print "hello is emitted"; }; run() is also { start main(); };};

Page 55: ASIC verifikáció II. 2011.12.05

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

• 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]; }; };};

Page 56: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

e-nyelv

Squence, driver

-- sequence item definitionstruct seq_item_s like any_sequence_item { data : uint(bits:32);};

-- Define the sequencesequence master_sequence using item = seq_item_s, created_driver = master_driver_u; -- Define a virtual sequencesequence 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:• <drivernév> unit előállítása• Egy <seqnév> szekvencia előállítása, amely az adott típusú szekvencia

itemeket kezeli

Page 57: ASIC verifikáció II. 2011.12.05

© 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 is @ev_01_e => {~[0..1]; @ev_02_e}@synch.clock_rise 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!

Page 58: ASIC verifikáció II. 2011.12.05

© 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!"; };};

Page 59: ASIC verifikáció II. 2011.12.05

© 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([101..200], "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 [400..500]) and (variable_y % 2 == 0)), ignore = (variable_x == variable_y); };};

Page 60: ASIC verifikáció II. 2011.12.05

© evosoft GmbH

• Köszönöm a figyelmet!