Koncepcja realizacji testów jednostkowych w języku VHDL

Slides:



Advertisements
Podobne prezentacje
Praca dyplomowa inżynierska
Advertisements

Migrating Desktop Podsumowanie projektu
REALIZACJA REGULATORA PID W UKŁADZIE FPGA
Inżynieria Systemów Programowalnych Część I
JĘZYK VHDL Geneza: komputerowa symulacja układu cyfrowego, Departament Obrony USA opis skomplikowanego systemu w postaci schematu jest nieczytelny, szybkie.
C++ wykład 13,14,15 (16/23/ ) STL.
Programowanie wizualne PW – LAB6 Wojciech Pieprzyca.
Mechanizmy pracy równoległej
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Standardowa biblioteka języka C++
PL/SQL kompilacja warunkowa
Standard Template Library
Kamil Smitkiewicz Bezpieczeństwo w PHP.
VHDL VHDL – akronim: VHSIC (Very High Speed Integrated Circuit) Hardware Description Language Inicjatywa Departamentu Obrony z 1980 Cel: osiągnąć znaczny.
CPU.
Instrukcje strukturalne
Wydział Zastosowań Informatyki i Matematyki SGGW
Projektowanie Aplikacji Komputerowych
20/09/ Języki programowania 1 Piotr Górczyński Kreator form.
Politechnika Gdańska WYDZIAŁ ELEKTRONIKI TELEKOMUNIKACJI I INFORMATYKI
Procesy poznawcze cd Uwaga.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Szkolenie dla NaviExpert, Testowanie jednostkowe.
Organizacja Przedsięwzięć Programistycznych Testowanie
BIRT.
Maciej Gabor, SCR 2002 Testowanie eXtremalne i narzędzia xUnit M. Gabor, J. Nawrocki, B. Walter Instytut Informatyki Politechnika Poznańska.
Czyli jak testować w Eclipsie?
by Ernest Jamro Katedra Elektroniki, AGH Kraków
by Ernest Jamro Katedra Elektroniki, AGH Kraków
Najczęściej popełniane błędy w VHDL’u
Wprowadzenie do SystemC
ZSBD PL/SQL CZĘŚĆ 3 Wykład 5 Prowadzący: dr Paweł Drozda.
Pakiety i ATD 1 Definicja. Pakietem albo jednostką programową nazywamy grupę logicznie powiązanych elementów, które mogą być typami, podtypami, obiektami.
Ogólne jednostki programowe 1
SORTOWANIE (przykład zastosowania DMA)
KOMPONENTY TYPU SLAVE Orkiszewski Marcin
Wykład 2 struktura programu elementy języka typy zmienne
Projektowanie warstwy serwera DisplayTag. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu.
Semafory.
Interaktywny serwer WWW zrealizowany na platformie mikrokontrolera
Narzędzia do testowania
Programowanie w języku Fortran 95
Systemy Rozproszone TECHNOLOGIA JAVA 2 ENTERPRISE EDITION PRZEMYSŁAW SOŁTAN
Koncepcja refaktoryzacji kodu w języku VHDL
© Victo Testowanie dla menedżerów Wersja TDM Slajd 1 (27) Testowanie oprogramowania dla menedżerów Co menedżerowie i kierownicy naprawdę potrzebują
Test Doubles Adam Gabryś , v1.1,
Stanisław Jerzy Niepostyn, Ilona Bluemke Instytut Informatyki,
LabVIEW Technologie informacyjne – laboratorium Irmina Kwiatkowska
Programowanie strukturalne i obiektowe
Pliki tekstowe. Operacje na plikach. mgr inż. Agata Pacek.
Funkcje w Pascalu Przypomnienie wiadomości o procedurach Prowadzący: Anna Kaleta Piotr Chojnacki.
1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.
Programowanie obiektowe – zastosowanie języka Java SE
Rational Unified Process Implementacja Aleksandra Reiman, gr. I-52.
Programowanie w języku C++
Bazy i Systemy Bankowe Sp. z o.o. ul. Kasprzaka 3, 85 – 321 Bydgoszcz
Copyright © Jerzy R. Nawrocki Team Software Process Inżynieria oprogramowania II Wykład.
T ESTY JEDNOSTKOWE W C# Alicja Majka, A GENDA Wprowadzenie do środowiska Czym są testy jednostkowe i po co je stosować? XUnit, NUnit Pokrycie.
Testy jednostkowe. „Test jednostkowy (unit test) to fragment kodu, który sprawdza inny fragment kodu”
Uruchomienie systemu kdpw_otc - rozwiązania techniczne 20 września 2012 r.
VHDL Ernest Jamro, Paweł Russek C3 p. 504
Projektowanie systemów cyfrowych z wykorzystaniem języka VHDL Układy sekwencyjne.
Projektowanie systemów cyfrowych z wykorzystaniem języka VHDL Układy kombinacyjne.
Kompilator eBook w technologii Java Dyplomant: Maciej Bagrowski Promotor: dr inż. Walery Susłow Politechnika Koszalińska Wydział Elektroniki i Informatyki.
Projektowanie systemów cyfrowych z wykorzystaniem języka VHDL
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Programowanie obiektowe – zastosowanie języka Java SE
Windows Workflow Foundation
Zapis prezentacji:

Koncepcja realizacji testów jednostkowych w języku VHDL VII Krajowa Konferencja Naukowa RUC'2004 REPROGRAMOWALNE UKŁADY CYFROWE Koncepcja realizacji testów jednostkowych w języku VHDL Przemysław Sołtan e-mail: kerk@ie.tu.koszalin.pl

Wprowadzenie Koncepcja realizacji testów jednostkowych Projektowanie jednostek testowych VHDL Osadzanie testów we własnych projektach Raportowanie wyników testu Rozszerzenia biblioteki (np. logika nstd_logic) Rozwój biblioteki vhdlUnit Podsumowanie

Koncepcja realizacji testów Projekt VHDL TESTOWANIE (test benches) standardowe mechanizmy asercji VHDL; własne procedury testowe (niestandardowe procedury – trudności z ponownym wykorzystaniem kodu testowego); porównywanie przebiegów testowych – waveform (uzależnienie od mechanizmów dostarczonych przez środowisko projektowe); testy jednostkowe – biblioteka vhdlUnit

Testy jednostkowe Testy jednostkowe - moduły testujące (jednostki testowe), które można uruchamiać w izolacji od pozostałych Raporty – kontrola jakości wykonywanej pracy Złożoność projektów wymusza automatyzację testów i odciążenie projektanta od wykonywania powtarzalnych czynności Testowany system Testy jednostkowe Raporty

Koncepcja realizacji testów testy jednostkowe (rozbudowanie mechanizmów asercji, raportowania i automatyzacji testów); Raporty (HTML/XML) TestBench Stymulus Testowany model (VHDL) VhdlUnit (vhdl) TestCase Asercja – wymuszenie zachowania określonego warunku podczas pracy symulowanego systemu (np. przyjmowanie przez dany sygnał określonego stanu - wartości)

Standardowe metody asercji Asercja sprawdzająca warunek  Czy a=b ? assert a = b report 'Błąd...: a jest różne od b' severity ERROR; komunikat błędu wyświetlany na konsoli wyświetlany komunikat przy niespełnionym warunku, a=b ograniczone sposoby raportowania błędów; działanie w zakresie pojedynczych symulacji

Metody asercji biblioteki vhdlUnit assertEquals(a,b); a=b a<>b Raport Name Status Type Time(s) N/A Success assertEquals(0,0) 50 ns Name Status Type Time(s) N/A Error assertEquals(0,1) 50 ns rozbudowana lista metod asercji assertXXX dla różnych typów danych (możliwość rozszerzania o metody asercji dla własnych typów danych np. nstd_logic) raportowanie wyników w postaci tabel

Pakiety biblioteki vdhlUnit vhdlUnit.vhd library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_TEXTIO.all; use STD.TEXTIO.all; use work.vhdlUnit_cfg.all; package vhdlUnit is ... procedure setUp(name: in string; test:boolean); procedure tearDown;   function assertWait(t:in time)return time; function assertTime(t:in time)return time; procedure assertEquals(name: in String; arg1,arg2: in std_logic); procedure assertZero(arg: in std_logic); procedure assertTrue(arg: in std_logic); procedure assertFalse(arg: in std_logic); procedure assertSame(name: in String; arg1,arg2: in std_logic); procedure assertNotSame(name: in String; arg1,arg2: in std_logic); procedure assertInfo(message : in String); procedure fail(name: in String); end vhdlUnit; package body vhdlUnit is vhdlUnit_cfg.vhd package vhdlUnit_cfg is constant TEST_PROJECT_NAME : String := "Nazwa testu"; constant TEST_PROJECT_HOME : String := "lokalizacja"; end vhdlUnit_cfg; plik konfiguracyjny metody asercji

TestBench + vhdlUnit UUT mapowanie biblioteki vhdlUnit proces testowy library ieee; use ieee.std_logic_unsigned.all; use ieee.std_logic_1164.all; use work.vhdlUnit.all; use work.vhdlUnit_cfg.all; entity fa_tb is end fa_tb; architecture TB_ARCHITECTURE of fa_tb is component fa port(...) end component; begin STIMULUS: process ... end process; UUT : fa port map (...); TestCaseA : process end process end architecture; TestBench.vhdl Stymulatory Testowany komponent UUT Jednostka testowa TestCase proces testowy

Struktura jednostki testowej vhdlUnit.vhdl TestBench.vhdl setUp(…) … assertTime(…) assertWait(…) assertEquals(…) assertTrue(…) assertInfo(…) fail; tearDown; Jednostka testowa Stymulatory TestCase : process begin setUp(“Test“,true); wait for assertTime(50ns); assertEquals(out1,’0’); … tearDown; wait end process; 1 2 Testowany komponent 3 UUT vhdlUnit_cfg.vhdl Proces testowy jest najmniejszą jednostką testową składającą się z metody setUp inicjującej test, grupy metod asercji assertXXX testujących stan testowanych sygnałów, oraz metody teardown zakończenia testu. 1 2 3 setUp(...) assertXXX() tearDown;

TestCase - przykłady bezpośrednie porównania porównanie z TestCase : process   begin setUp("bramka_and4",true); -- inicjalizacja testu wait for assertTime(50ns); assertEquals("out_1",out_1,'0'); wait for assertTime(100ns); assertEquals("out_1",out_1,'0'); ... wait for assertTime(800ns); assertEquals("out_1",out_1,'1'); tearDown; -- koniec testu wait; end process; bezpośrednie porównania TestCase : process constant test_vector: nstd_logic_vector(1 to 16) := "0000000000000001"; constant test_time: time := 50ns;   begin setUp("bramka_and4",true); -- inicjalizacja testu for i in 1 to test_vector'LENGTH loop wait for assertTime(i*test_time); assertEquals("out_1",out_1,test_vector(i)); end loop; tearDown; -- koniec testu wait;   end process; porównanie z wektorem danych

Przykład – test pełnego sumatora FA Wzorzec TestBench ? Raport

Osadzanie testów vhdlunit.properties – plik buforujący dane przekazywane pomiędzy kolejnymi symulacjami vhdlUnit.do open new VhdlUnit_tb (unit_initialize) initialize update test 1 Raport (Html/XML) update test 2 Testowane komponenty update test N close VhdlUnit_tb (unit_finalize) finalize

Osadzanie testów Przykładowe makro środowiska ActiveHDL (ALDEC) clear SetActiveLib -work set PROJECT_HOME "$DSN\src\vhdlunit\examples" comp -include "$PROJECT_HOME\vhdlunit\vhdlUnit_cfg.vhd" comp -include "$DSN\src\vhdlUnit\vhdlUnit.vhd"   asim INITIALIZE_VHDL_UNIT run 1ns Endsim comp -include "$PROJECT_HOME\fa.vhd" comp -include "$PROJECT_HOME\testbench\fa_TB.vhd" asim TESTBENCH_FOR_fa run 400 ns ... asim FINALIZE_VHDL_UNIT endsim Przykładowe makro środowiska ActiveHDL (ALDEC) VhdlUnit_tb (unit_initialize) Testowane komponenty VhdlUnit_tb (unit_finalize) Sekwencyjne wywołanie symulacji testowych wraz z dodatkową symulacją początkową (INITIALIZE_VHDL_UNIT) i końcową (FINALIZE_VHDL_UNIT)

Konfiguracja vhdlUnit vhdlUnit_cfg.vhd package vhdlUnit_cfg is constant TEST_PROJECT_NAME : String := "Nazwa testu"; constant TEST_PROJECT_HOME : String := "lokalizacja"; constant TestCase_1 : boolena := true; constant TestCase_2 : boolena := false; end vhdlUnit_cfg; Plik konfiguracyjny umożliwia selektywne włączanie określonych procesów testowych TestCaseB : process begin setUp(“Test“,TestCase_2); wait for assertTime(50ns); assertEquals(out1,’0’); … tearDown; wait end process; TestCaseA : process begin setUp(“Test“,TestCase_1); wait for assertTime(50ns); assertEquals(out1,’0’); … tearDown; wait end process; Dwie jednostki testowe (procesy) znajdujące się w jednym wspólnym lub dwóch niezależnych testbench’ach wykonywanych w niezależnych symulacjach

Raportowanie wyników testu Info Success Error Failure statystyka testu

Moduł rozszerzający - przykład library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_TEXTIO.all; use STD.TEXTIO.all; use work.vhdlUnit_cfg.all; package vhdlUnit is ... procedure assertEquals(arg1,arg2 : in std_logic); end vhdlUnit; vhdlUnit.vhd vhdlUnit_ext_nstd_logic.vhd library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_TEXTIO.all; use STD.TEXTIO.all; library nstd_logic_2000; use nstd_logic_2000.nstd_logic_2000.all; use work.vhdlUnit.all;   package vhdlUnit_ext_nstd_logic is ... procedure assertEquals(arg1,arg2 : in nstd_logic); function nstd2std(arg : in nstd_logic) return std_logic; function std2nstd(arg : in std_logic) return nstd_logic; end vhdlUnit; package body vhdlUnit is procedure assertEquals(arg1,arg2 : in nstd_logic) is begin assertEquals("N/A", nstd2std(arg1),nstd2std(arg2)); end; end vhdlUnit_ext_nstd_logic; TestBench (nstd_logic) use work.vhdlUnit_cfg.all; use work.vhdlUnit.all; use work.vhdlUnit_ext_nstd_logic.all vhdlUnit_ext_nstd_logic.vhd vhdlUnit.vhd Biblioteka vhdlUnit nie wymaga modyfikacji (przeciążanie metod asercji)

Rozwój biblioteki vhdlUnit Dodatkowe moduły raportujące (np. XML, SVG) Implementacja metod asercji pobierających wzorcowe dane z zewnętrznych plików assert(FILE), assert(LIST), assert(WAVE) Porównywanie przeprowadzonych testów z ich wcześniejszymi wersjami (rejestrowanie postępu prac projektowych – liczby poprawnie działających testów, ...) Rozbudowa mechanizmów przekazywania danych pomiędzy dwoma symulacjami (vhdlUnit.properties)

vhdlUnit  Open Source Project http://kik.ie.tu.koszalin.pl/vhdlunit

Podsumowanie Niezależność od środowiska projektowego (całość kodu opracowana w języku VHDL) Możliwość rozszerzania o własne moduły (vhdlUnit_ext_nstd_logic.vhd) „Zgodność nazewnicza” z innymi bibliotekami testów jednostkowych (JUnit) Możliwość wspólnego raportowania wyników testu dla wielu niezależnych symulacji