1 / 20

Koncepcja realizacji testów jednostkowych w języku VHDL

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

Download Presentation

Koncepcja realizacji testów jednostkowych w języku VHDL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. Testowany system Testy jednostkowe Raporty 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

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

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

  7. 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 Metody asercji biblioteki vhdlUnit • 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 assertEquals(a,b); a=b a<>b Raport

  8. 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 ... end vhdlUnit; 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

  9. TestBench + vhdlUnit 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 begin ... end process; UUT : fa port map (...); TestCaseA : process begin ... end process end architecture; mapowanie biblioteki vhdlUnit TestBench.vhdl Stymulatory Testowany komponent UUT Jednostka testowa TestCase proces testowy

  10. Struktura jednostki testowej TestBench.vhdl vhdlUnit.vhdl Jednostka testowa setUp(…) … assertTime(…) assertWait(…) assertEquals(…) assertTrue(…) assertInfo(…) fail; tearDown; 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 assertXXXtestujących stan testowanych sygnałów, oraz metody teardown zakończenia testu. 1 3 2 tearDown; assertXXX() setUp(...)

  11. TestCase - przykłady 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;   endprocess; porównanie z wektorem danych

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

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

  14. 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 Endsim ... ... ... asim FINALIZE_VHDL_UNIT run 1ns endsim 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)

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

  16. Raportowanie wyników testu Info Success Error Failure statystyka testu

  17. Moduł rozszerzający - przykład 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 assertEquals(arg1,arg2 : in std_logic); ... end vhdlUnit; 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)

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

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

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

More Related