Upload
arsenio-manning
View
65
Download
0
Embed Size (px)
DESCRIPTION
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 - PowerPoint PPT Presentation
Citation preview
POLITECHNIKA KOSZALIŃSKA
Wydział ElektronikiELEKTRONIKIWYDZIAŁ
POLITECHNIKAKOSZALIŃSKA
Przemysław Sołtane-mail: [email protected]
Koncepcja realizacji testów jednostkowych w języku VHDL
VII Krajowa Konferencja NaukowaRUC'2004
REPROGRAMOWALNE UKŁADY CYFROWE
2
WprowadzenieKoncepcja realizacji testów jednostkowychProjektowanie jednostek testowych VHDL
Osadzanie testów we własnych projektachRaportowanie wyników testu
Rozszerzenia biblioteki (np. logika nstd_logic)Rozwój biblioteki vhdlUnit
Podsumowanie
3
Koncepcja realizacji testów
ProjektVHDL
• 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
TESTOWANIE (test benches)
4
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
Testy jednostkowe
Testowanysystem
TestyjednostkoweRaporty
5
Koncepcja realizacji testów
Testowany model (VHDL)
TestBenchRaporty(HTML/XML)
TestCase
Stymulus
VhdlUnit(vhdl)
• testy jednostkowe (rozbudowanie mechanizmów asercji, raportowania i automatyzacji testów);
Asercja – wymuszenie zachowania określonego warunku podczas pracy symulowanego systemu (np. przyjmowanie przez dany sygnał określonego stanu - wartości)
6
Standardowe metody asercji
assert a = b report 'Błąd...: a jest różne od b' severity ERROR;
ograniczone sposoby raportowania błędów; działanie w zakresie pojedynczych symulacji
Asercja sprawdzająca warunek Czy a=b ?
wyświetlany komunikat przy niespełnionym warunku, a=b
komunikat błędu wyświetlany na konsoli
7
Metody asercji biblioteki vhdlUnit
assertEquals(a,b);
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
a=b a<>bRaport
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
8
Pakiety biblioteki vdhlUnitlibrary 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;
metody asercji
package vhdlUnit_cfg is constant TEST_PROJECT_NAME : String := "Nazwa testu"; constant TEST_PROJECT_HOME : String := "lokalizacja";end vhdlUnit_cfg;
vhdlUnit.vhd
vhdlUnit_cfg.vhd
plik konfiguracyjny
9
TestBench + vhdlUnitlibrary 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 isend fa_tb;
architecture TB_ARCHITECTURE of fa_tb is component fa port(...) end component;begin
STIMULUS: processbegin ...end process;
UUT : fa port map (...);
TestCaseA : processbegin ...end process
end architecture;
Stymulatory
Testowany komponent
UUT
TestBench.vhdl
Jednostka testowa
TestCase
proces testowy
mapowanie bibliotekivhdlUnit
10
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.
Struktura jednostki testowejvhdlUnit.vhdl
setUp(…)…assertTime(…)assertWait(…)assertEquals(…)assertTrue(…)assertInfo(…)fail;tearDown;
TestBench.vhdl
Jednostka testowa Stymulatory
Testowany komponent
UUT
setUp(...) assertXXX() tearDown;
vhdlUnit_cfg.vhdl
2
1
3
1
TestCase : processbegin setUp(“Test“,true); wait for assertTime(50ns); assertEquals(out1,’0’); … tearDown; waitend process;
2 3
11
TestCase - przykładyTestCase : 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;
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;
bezpośrednie porównania
porównanie z wektorem danych
12
Przykład – test pełnego sumatora FA
TestBench
Wzorzec
Raport
?
13
Osadzanie testów
Raport(Html/XML)
open new
close
update
update
update
Testowanekomponenty
vhdlUnit.do
VhdlUnit_tb(unit_finalize)
VhdlUnit_tb(unit_initialize)
test 1
test 2
test N
initialize
finalize
vhdlunit.properties – plik buforujący dane przekazywane pomiędzy kolejnymi symulacjami
14
Osadzanie testów
clearSetActiveLib -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_UNITrun 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
Testowanekomponenty
VhdlUnit_tb(unit_finalize)
VhdlUnit_tb(unit_initialize)
Przykładowe makro środowiska ActiveHDL (ALDEC)
Sekwencyjne wywołanie symulacji testowych wraz z dodatkową symulacją początkową (INITIALIZE_VHDL_UNIT) i końcową (FINALIZE_VHDL_UNIT)
15
Dwie jednostki testowe (procesy)znajdujące się w jednym wspólnym lub dwóch niezależnych testbench’achwykonywanych w niezależnych symulacjach
TestCaseB : processbegin setUp(“Test“,TestCase_2); wait for assertTime(50ns); assertEquals(out1,’0’); … tearDown; waitend process;
Konfiguracja vhdlUnitpackage 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;
TestCaseA : processbegin setUp(“Test“,TestCase_1); wait for assertTime(50ns); assertEquals(out1,’0’); … tearDown; waitend process;
Plik konfiguracyjny umożliwia selektywne włączanie określonych procesów testowych
vhdlUnit_cfg.vhd
16
Raportowanie wyników testu
InfoSuccessErrorFailure
statystykatestu
17
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;
Moduł rozszerzający - przykładlibrary 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
use work.vhdlUnit_cfg.all;
use work.vhdlUnit.all;
use work.vhdlUnit_ext_nstd_logic.all
vhdlUnit_ext_nstd_logic.vhd
vhdlUnit.vhd
TestBench (nstd_logic)
Biblioteka vhdlUnit nie wymaga modyfikacji
(przeciążanie metod asercji)
18
Rozwój biblioteki vhdlUnitDodatkowe 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