Fakulta informačních technologií

Podobné dokumenty
Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

9. Praktická verifikace

12. VHDL pro verifikaci - Testbench I

... sekvenční výstupy. Obr. 1: Obecné schéma stavového automatu

Vzorový příklad. Postup v prostředí ISE. Zadání: x 1 x 0 y Rovnicí y = x 1. Přiřazení signálů:

Vzorový příklad. Postup v prostředí ISE. Zadání: x 1 x 0 y. Rovnicí y = x 1. x 0. Přiřazení signálů: ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Verifikace číslicových obvodů

Projekt: Přístupový terminál

MS Word pro administrátory projektů Pokročilí

SEMESTRÁLNÍ PROJEKT Y38PRO

Verifikace číslicových obvodů

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Příprava dat v softwaru Statistica

Koncept pokročilého návrhu ve VHDL. INP - cvičení 2

Příklady popisu základních obvodů ve VHDL

5. Sekvenční logické obvody

1 Digitální zdroje. 1.1 Převod digitálních úrovní na analogový signál. Cílem cvičení je osvojení práce s digitálními zdroji signálu.

SYSTÉMY NAČIPU MI-SOC

Vysoké učení technické v Brně Fakulta informačních technologií ITP Technika personálních počítačů Služby ROM BIOS a BootROM

Cíle. Teoretický úvod. BDIO - Digitální obvody Ústav mikroelektroniky Sekvenční logika - debouncer, čítače, měření doby stisknutí tlačítka Student

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

1. Seznamte se s výukovou platformou FITkit (

VISUAL BASIC. Přehled témat

7. Pracovní postupy. Fakulta informačních technologií MI-NFA, zimní semestr 2011/2012 Jan Schmidt

1 Smíšené digitálně-analogové simulace

Word Lekce III. a IV.

EXTRAKT z technické normy ISO

Cíle. Teoretický úvod

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

3. Sekvenční logické obvody

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

DOPRAVA V POHYBU PRODUKT KERBERUS

Architektura počítačů Logické obvody

Architektura počítačů Logické obvody

Návod k obsluze výukové desky CPLD

Klopný obvod typu D, dělička dvěma, Johnsonův kruhový čítač

Testování a spolehlivost. 3. Laboratoř Program Atalanta, BIST, testování sekvenčních obvodů

Počítačové sítě Systém pro přenos souborů protokol FTP

SEKVENČNÍ LOGICKÉ OBVODY

Úvod do jazyka VHDL. Jan Kořenek Návrh číslicových systémů

Pohled do nitra mikroprocesoru Josef Horálek

Simulace číslicových obvodů: úvod Jakub Šťastný ASICentrum, s.r.o. Katedra teorie obvodů FEL ČVUT Praha

Praktické úlohy- 2.oblast zaměření

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

xrays optimalizační nástroj

Sekvenční logické obvody

5. A/Č převodník s postupnou aproximací

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

Přednáška - Čítače. 2013, kat. měření, ČVUT - FEL, Praha J. Fischer. A3B38MMP, 2013, J.Fischer, ČVUT - FEL, kat. měření 1

Práce v návrhovém prostředí Xilinx ISE WebPack 10.1 BDOM UMEL FEKT Šteffan Pavel

Práce v návrhovém prostředí Xilinx ISE WebPack 9.2i

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Canon Controller. Komunikační protokol. Řídicí jednotka k objektivům Canon EF/EF-S

Architektura informačních systémů. - dílčí architektury - strategické řízení taktické řízení. operativní řízení a provozu. Globální architektura

Algoritmizace prostorových úloh

Cíle. Teoretický úvod. BDIO - Digitální obvody Ústav mikroelektroniky Základní logická hradla, Booleova algebra, De Morganovy zákony Student

Moduly MicroUnit serie. všechny typy s výjimkou řady MU-43x, MU-44x a MU-84x

Django. Webový framework pro Python Projekt = webová stránka Aplikace = určitá funkcionalita webu

Semestrální práce z předmětu Speciální číslicové systémy X31SCS

Zadání semestrálního projektu Algoritmy II. letní semestr 2017/2018

Vstupně - výstupní moduly

PŘÍLOHA C Požadavky na Dokumentaci

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

15. Projekt Kalkulačka

KNIHOVNA MODELŮ TECHNOLOGICKÝCH PROCESŮ

NP-úplnost problému SAT

Model Checking pro Timed Automata. Jiří Vyskočil 2011

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Princip funkce počítače

Systém řízení sběrnice

2. Modelovací jazyk UML 2.1 Struktura UML Diagram tříd Asociace OCL. 3. Smalltalk 3.1 Jazyk Pojmenování

NSWI /2011 ZS. Principy cpypočítačůčů aoperačních systémů ARCHITEKTURA

Národní šetření výsledků žáků v počátečním vzdělávání

Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Jarkovský, L. Dušek, M. Cvanová. 5. Statistica

Jako pomůcka jsou v pravém dolním rohu vypsány binární kódy čísel od 0 do 15 a binární kódy příkazů, které máme dispozici (obr.21). Obr.

Modelování a simulace Lukáš Otte

Knihovna RecDBXLib ZÁZNAMY V DATABOXU TXV

Tlačítka. Konektor programování

Práce v návrhovém prostředí Xilinx ISE WebPack 12 BDOM UMEL FEKT Šteffan Pavel

3. Software Bakaláři Kompletní školení

Příloha: Dodatečné informace, včetně přesného znění žádosti dodavatele o dodatečné informace

1/1 ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA V PRAZE PROVOZNĚ EKONOMICKÁ FAKULTA PŘIJÍMACÍ ŘÍZENÍ 2017/2018

Vytvoření portálu odboru strukturálních fondů Ministerstva vnitra a zajištění jeho hostingu na serveru dodavatele

Laboratorní cvičení z předmětu Elektrická měření 2. ročník KMT

Algoritmizace prostorových úloh

Profilová část maturitní zkoušky 2014/2015

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Popis programu: Popis přípon důležitých souborů: *.qpf projektový soubor Quartusu

Úvod do MS Access. Modelování v řízení. Ing. Petr Kalčev

Novinky v Solid Edge ST7

Stanovení odolnosti datového spoje

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

LabView jako programovací jazyk II

GIS Geografické informační systémy

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

2015 GEOVAP, spol. s r. o. Všechna práva vyhrazena.

Transkript:

Vysoké učení technické v Brně Fakulta informačních technologií Pokročilé číslicové systémy Verifikace číslicových systémů cvičení 2012 Tento materiál vznikl za podpory Fondu rozvoje vysokých škol (projekt 1798/2012).

Obsah 1 Úvod 1 2 Popis verifikované jednotky ALU 2 3 Popis verifikačního prostředí ALU v OVM 4 4 Úlohy k řešení 5 5 Příloha 9 i

1 Úvod V procesu vývoje číslicových systémů je jejich (funkční) verifikace nedílnou a důležitou součástí. Jazyky pro popis číslicových systémů jako VHDL či Verilog obsahovaly (a obsahují) jednoduché konstrukce v samotné definici jazyka pro návrh testovacích obvodů či testovacích prostředí (testbench). Avšak v důsledku rostoucí složitosti vyvíjených obvodů vznikla potřeba vytvořit specializované jazyky obsahující prostředky pro návrh komplexních verifikačních prostředí (SystemVerilog, e, OpenVera). V souvislosti s tímto vývojem se rozrůstají i možnosti existujících nástrojů pro vývoj číslicových systémů a to zejména podporou těchto specializovaných jazyků a verifikačních metodik. Navíc vznikají i samostatné, specializované nástroje pro funkční a formální verifikaci číslicových obvodů. V tomto cvičení se budeme zabývat jazykem SystemVerilog a verifikační metodikou OVM (angl. Open Verification Methodology). Na příkladu verifikace aritmeticko-logické jednotky (ALU) budou demonstrovány výhody specializovaného jazyka pro verifikaci, jednotného verifikačního prostředí definovaného metodikou OVM a samotného procesu funkční verifikace pomocí simulačního nástroje ModelSim od společnosti Mentor Graphics. SystemVerilog je objektově orientovaný jazyk jenž vzniknul v roce 2005 jako rozšíření jazyka Verilog o vlastnosti orientované na verifikaci. Mezi hlavní doplněné vlastnosti patří: generování náhodných transakcí na základě omezujících podmínek (angl. constrained-random stimulus generation), podpora analýzy pokrytí funkcionality systému verifikačními běhy (angl. coverage) a také prostředky pro popis invariantů systému a kontrole jejich platnosti při verifikačních bězích (angl. assertion-based verification). Kromě původních datových typů převzatých z Verilogu byla přidána podpora dalších, určených ke zjednodušení verifikace číslicových systémů a práce s hodnotami na úrovni jednotlivých bitů či jejich skupin. Jazyk SystemVerilog se během několika let vyvinul ve standardizovaný a všeobecně akceptovaný jazyk pro účely verifikace číslicových systémů. Díky tomu, že si osvojil některé prostředky z běžných vysokoúrovňových programovacích jazyků k zajištění znovupoužitelnosti kódu, začaly vznikat na něm postavené obecné metodiky pro tvorbu verifikačních prostředí. Nejúspěšnější z nich je v současnosti otevřená a volně dostupná metodika Open Verification Methodology (OVM), která poskytuje knihovnu základních a rozšířených tříd (komponent) pro tvorbu verifikačních prostředí v rámci balíku OVM 2.1.2. Tato metodika definuje, jakým způsobem implementovat lehce rozšiřitelné a znovu použitelné verifikační prostředí. Jak uvidíme dále v cvičení, verifikační prostředí v OVM je uspořádáno hierarchicky, s nejnižší úrovní obsahující testovanou jednotku (angl. Design Under Test DUT) se kterou probíhá komunikace přímo pomocí signálů na úrovni hradel, a vyšších vrstev, na nichž probíhá komunikace pomocí vysokoúrovňových transakcí. Transakce v OVM představují základní způsob komunikace mezi jednotlivými procesy verifikačního prostředí. Tento způsob práce s jednotlivými komponentami a jejich obousměrnou komunikací se nazývá modelování na úrovni transakcí (angl. Transaction-level Modelling). Komponenty verifikačního prostředí zahrnují (Obrázek 1): nastavení vlastností a parametrů příslušného verifikačního testu (TESTCASE s parametry), řízení verifikačního běhu (SCENARIO LEVEL), vkládání automaticky generovaných vstupních transakcí (GENERATOR) na vstupní rozhraní verifikované jednotky (DRIVER), 1

Testcase Generator Scenario level Verification level Scoreboard Coverage Driver Monitor DUT Signal level Obrázek 1: Schéma generického verifikačního prostředí sběr výstupních transakcí z výstupního rozhraní verifikované jednotky (MONITOR), sběr a analýzu statistik pro automaticky nebo ručně vytvořené body pokrytí ve vytvářeném modelu (COVERAGE), koncept sebekontrolního mechanismu (SCOREBOARD), v němž jsou na základě specifikace verifikovaného systému vytvářeny očekávané výstupní transakce (angl. predicted responses). Tyto jsou následně automaticky porovnány se skutečnými výstupními transakcemi systému (angl. real responses). 2 Popis verifikované jednotky ALU Na Obrázku 2 je znázorněno rozhraní verifikované jednotky ALU. Toto rozhraní je tvořeno následujícími signály: řídicí: CLK [in]: hodinový signal; všechny vstupy a výstupy ALU jsou aktivní na náběžné hraně tohoto signálu, RST [in]: synchronní reset, ACT [in]: aktivační vstup, hodnota 1 signalizuje požadavek na výpočet, RST CLK ACT OP REG_A REG_B MOVI IMM MEM ALU EX_ALU EX_ALU_VLD Obrázek 2: Rozhraní ALU jednotky 2

datové: Tabulka 1: Význam hodnot vstupního signálu OP komponenty ALU Hodnota Význam 0x0 OUT = IN1 + IN2 0x1 OUT = IN1 - IN2 0x2 OUT = IN1 * IN2 0x3 OUT = IN2 >> 1 0x4 OUT = IN2 << 1 0x5 OUT = IN2 ROR 1 0x6 OUT = IN2 ROL 1 0x7 OUT = ~IN2 0x8 OUT = IN1 & IN2 0x9 OUT = IN1 IN2 0xA OUT = IN1 ^ IN2 0xB OUT = ~(IN1 & IN2) 0xC OUT = ~(IN1 IN2) 0xD OUT = ~(IN1 ^ IN2 0xE OUT = IN2 + 1 0xF OUT = IN2-1 OP(3:0) [in]: volba operace ALU (viz Tabulka 1), REG A(DATA WIDTH-1:0) [in]: vstup z registru jenž obsahuje první operand, MOVI(1:0) [in]: vybírá druhý operand (viz Tabulka 2), REG B(DATA WIDTH-1:0) [in]: vstup z registru jenž obsahuje druhý operand (MOVI = "00"), MEM(DATA WIDTH-1:0) [in]: vstup z paměti jenž obsahuje druhý operand (MOVI = "01"), IMM(DATA WIDTH-1:0) [in]: přímo zadaný druhý operand (MOVI = "10"), výstupy: EX ALU VLD [out]: signál značící platnost výsledku (může být již tentýž takt jako je ACT = 1 ), EX ALU(15:0) [out]: výsledek operace (hodnota je platná jen když EX ALU VLD = 1 ); pro operace mimo násobení je výsledek předán v jednom taktu, u násobení je výsledek předán ve dvou taktech (v obou je signál EX ALU VLD nastaven do 1, první je předána méně významná část výsledku). Tabulka 2: Význam hodnot vstupního signálu MOVI komponenty ALU Hodnota Význam 0x0 REG B 0x1 MEM 0x2 IMM 0x3 <RESERVED> 3

3 Popis verifikačního prostředí ALU v OVM Na Obrázku 3 je znázorněno verifikační prostředí pro ALU, které je rozděleno na tyto části: AluTop: Na nejvyšší úrovni verifikačního prostředí dochází k instancování základních komponent, především testované jednotky (DUT), rozhraní pro komunikaci s ní (ALU DUT IFC), generování hodinového a resetovacího signálu a spuštění testu dle zadaných parametrů (délka generování resetu RESET TIME, perioda hodinového signálu CLK PERIOD, počet transakcí TRANSACTION COUNT a nastavení počáteční hodnoty generátoru náhodných čísel SEED). AluTop (top_level.sv) AluTest (sv_alu_test_pkg.sv) AluEnv (sv_alu_env_pkg.sv) AluSequence (sv_alu_seq_pkg.sv) AluSequencer (alu_sequencer.sv) AluInputTransaction (alu_input_transaction.sv) AluDriver (alu_driver.sv) AluMonitor (alu_monitor.sv) AluSubscriber *coverage analysis* (alu_input_subscriber.sv) (alu_output_subscriber.sv) AluDutIfWrapper ALU_DUT_IFC (alu_dut_if_wrapper.sv) AluScoreboard (alu_scoreboard.sv) DUT (alu.vhd) Obrázek 3: Verifikační prostředí pro ALU v OVM AluTest: V této vrstvě se instancuje verifikační prostředí AluEnv a spouští se generování posloupnosti transakcí, jejichž formát je definován pomocí AluSequence. Komponenta AluDriver získává generované transakce z komponenty AluSequencer. AluSequence: V rámci generování vstupních transakcí pro ALU je nejprve objektu třídy AluSequence předán prototyp (blueprint) transakce typu AluInputTransaction. Následně probíhá vytváření transakcí tím způsobem, že je vytvořena kopie prototypu transakce, jejíž datová 4

část je na základě omezujících podmínek vyplněna náhodnými daty či konstantami. Je vytvořena celková sekvence o maximálním počtu transakcí TRANSACTION COUNT zadaném v parametrech verifikačního běhu. AluEnv: Komponenta AluDriver přijímá sekvence transakcí z AluSequencer. S testovanou jednotkou (DUT) nekomunikuje přímo, ale skrze wrapper daného vstupního rozhraní, protože transakci je nutno transformovat na podobu bitových signálů. Transakce jsou také zaslány do komponenty AluScoreboard. Úlohou komponenty AluMonitor je příjem transakcí od wrapperu výstupního rozhraní ALU a jejich zasílání pro zpracování do komponenty AluScoreboard. V komponentě AluScoreboard dochází k transformaci transakcí přijatých od komponenty AluDriver podle specifikace ALU a vytvoření očekávané výstupní transakce, jejíž formát je definován ve třídě AluOutputTransaction. Takto vytvořené transakce jsou automaticky porovnávány s reálnými transakcemi, které jsou přijaty z komponenty AluMonitor. V případě neshody je oznámena chyba, kterou je možné dále analyzovat. Hodnocení průběhu verifikace se provádí v komponentě AluSubscriber. Ta obsahuje tzv. body pokrytí, kterými verifikátor definuje, které vlastnosti, funkce či hraniční stavy systému chce v rámci verifikace ověřit. Tento proces se provádí s podporou samotného simulačního nástroje. Jednotlivé komponenty jsou uspořádány hierarchicky v adresářích (viz také Příloha): src test lib seq lib env lib 4 Úlohy k řešení Úloha 1 oprava chyby v testované komponentě. Následujícím příkazem v příkazovém řádku spustíte verifikační proces v nástroji ModelSim: # vsim -do simulation.fdo V této fázi není potřebné měnit nastavení verifikačního běhu ani další parametry. Po spuštění se zobrazí textový výpis s průběhem verifikace, který skončí chybou. Na základě vypsaných informací odhalte zdroj chyby, opravte ji v příslušném zdrojovém souboru a ověřte opravu chyby opakovaným spuštěním verifikačního procesu. Nápověda: Všimněte si vstupů a řídicích signálů ALU. Proč je očekávaný a získaný výsledek odlišný? Úloha 2 oprava chyby ve verifikačním prostředí. Po opravení chyby spusťte verifikační proces znovu příkazem v ModelSimu: VSIM(paused)> do simulation.fdo Zobrazí se chyba související s neznámým nastavením operandu. V tomto kroku bude potřeba zasáhnout do verifikačního prostředí. 5

Obrázek 4: Skupiny pokrytí Nápověda: Opět pozorně sledujte výpis z verifikace. Pozornost směřujte i na příslušný řádek v souboru alu scoreboard.sv a jeho analýzu. Proč dochází k chybě s neznámým operandem? Úloha 3 doplnění bodu pokrytí. Po nalezení zdroje chyby spusťte verifikaci jako v předchozím případě. V tomto případě už proběhne celý verifikační běh s aktuálními nastaveními v pořádku. Zobrazte si záložku Covergroups v okně Wave v prostředí ModelSimu, Obrázek 4. V zobrazeném okně je seznam bodů pokrytí definovaných v souboru alu input subscriber.sv. Rozšiřte tento seznam o další bod pokrytí, ve kterém bude sledováno pokrytí posloupnosti operandů (pouze sledování vytváření párů posloupností, tj. přechodů z jednoho operandu do druhého). Bod pokrytí nazvěte op after op a spusťte verifikaci znovu. Nápověda: Jazyk SystemVerilog umožňuje definovat skupiny bodů pokrytí s jednotlivými body pokrytí, které jsou sledovány v simulačním nástroji. Bod pokrytí umožňuje definovat hodnotu (nebo množinu hodnot), které je potřeba během verifikace sledovat. Body pokrytí se definují jako tzv. koše (angl. bins), pro které se počítá počet shod. Příklad: int i; covergroup range_cover; coverpoint i { bins zero = {0}; // počet shod s hodnotou 0 } endgroup 6

Obrázek 5: Sledování posloupnosti operací Také je možno vytvořit bod pokrytí, kterým se sledují přechody mezi hodnotami, počet přechodů není omezen. Příklad: covergroup CoverPort; coverpoint port { bins t1 = (0 => 1), (0 => 2), (0 => 3); } endgroup V předchozím příkladu se pomocí koše t1 dá sledovat počet přechodů signálu port z hodnoty 0 do hodnot 1, 2, nebo 3. Snažte se zjednodušit práci tak, aby nebylo nutné ručně definovat dvojice posloupností. Vytváříte konečnou množinu možných přechodů, použijte vhodný datový typ. Výsledný zápis je velmi jednoduchý, inspirujte se již vytvořenými body pokrytí. Úloha 4 zvýšení úrovně pokrytí. Opět si zobrazte okno bodů pokrytí a všimněte si, že do seznamu přibyl nově definovaný bod, viz Obrázek 5. Také si všimněte seznamu vytvořených dvojic posloupností. Verifikace proběhla v pořádku, ale celkové pokrytí je velmi malé. Pokuste se zvýšit pokrytí na 100 % u všech bodů. Nápověda: Zvýšení pokrytí se typicky dosahuje delším verifikačním během. Experimentálně zkuste (orientačně) najít nejmenší hodnotu počtu transakcí nutných k dosažení 100 % pokrytí změnou nastavení parametrů verifikačního testu. 7

Úloha 5 modifikace ALU a verifikačního prostředí. V posledním kroku rozšíříme možnosti jednotky ALU o další dvě operace a provedeme potřebné změny i ve verifikačním prostředí. Operace ALU je možno řídit 4-bitovým signálem, využívá se však pouze 14 z celkových 16 možných. ALU rozšíříme o operace inkrementu a dekrementu. 1. Doplňte zdrojový VHDL soubor ALU jednotky o operace inkrementu a dekrementu. 2. Protože v procesu verifikace je potřeba ve verifikačním prostředí vytvářet model verifikované jednotky, je potřeba doplnit generování nových dvou operací i do příslušného bloku verifikačního prostředí. 3. Upravte omezení (constraint) týkající se počtu generovaných operací a zvyšte tuto hodnotu o další dvě operace. Nápověda: úprava se týká souboru, ve kterém jste již opravovali chybu související s generováním neznámého operandu (úloha 2). 4. V souboru alu input subscriber.sv upravte seznam definující výčtový typ pro generované operace. Nezapomeňte upravit vytvořený bod pokrytí pro sledování posloupnosti dvojic generovaných operací. 5. Opět analyzujte dosažené pokrytí a najděte experimentálně počet transakcí potřebných k dosažení úrovně 100 % pokrytí. 8

5 Příloha Hierarchie nejdůležitějších souborů -- env_lib -- src -- alu_driver.sv -- alu -- alu_dut_if_wrapper.sv -- Modules.tcl -- alu_env.sv -- alu.vhd // zdrojový kód ALU -- alu_input.sv -- alu_input_subscriber.sv // coverage points -- mult -- alu_monitor.sv -- mult.vhd -- alu_output_subscriber.sv -- simulation.fdo -- alu_scoreboard.sv // scoreboarding -- testbench.vhd -- alu_sender.sv -- sv_alu_env_pkg.sv -- seq_lib -- test_lib -- alu_input_transaction.sv // constraints -- alu_test.sv -- alu_output_transaction.sv -- sv_alu_test_pkg.sv -- alu_sequence.sv -- alu_sequencer.sv -- haven_input_transaction.sv -- haven_output_transaction.sv. -- haven_sequence_item.sv -- simulation.fdo // spuštění simulace -- sv_alu_seq_pkg.sv -- test_parameters.sv // nastavení parametrů testu -- top_level.sv