Title: Koncepcja realizacji test
1VII Krajowa Konferencja Naukowa
RUC'2004REPROGRAMOWALNE UKLADY CYFROWE
- Koncepcja realizacji testów jednostkowych w
jezyku VHDL
Przemyslaw Soltan e-mail kerk_at_ie.tu.koszalin.pl
2Wprowadzenie
- Koncepcja realizacji testów jednostkowych
- Projektowanie jednostek testowych VHDL
- Osadzanie testów we wlasnych projektach
- Raportowanie wyników testu
- Rozszerzenia biblioteki (np. logika nstd_logic)
- Rozwój biblioteki vhdlUnit
- Podsumowanie
3Koncepcja realizacji testów
Projekt VHDL
TESTOWANIE (test benches)
- standardowe mechanizmy asercji VHDL
- wlasne procedury testowe (niestandardowe
procedury trudnosci z ponownym wykorzystaniem
kodu testowego) - porównywanie przebiegów testowych waveform
(uzaleznienie od mechanizmów dostarczonych przez
srodowisko projektowe) - testy jednostkowe biblioteka vhdlUnit
4Testy jednostkowe
- Testy jednostkowe - moduly testujace (jednostki
testowe), które mozna uruchamiac w izolacji od
pozostalych - Raporty kontrola jakosci wykonywanej pracy
- Zlozonosc projektów wymusza automatyzacje testów
i odciazenie projektanta od wykonywania
powtarzalnych czynnosci
5Koncepcja realizacji testów
- testy jednostkowe (rozbudowanie mechanizmów
asercji, raportowania i automatyzacji testów)
TestBench
Raporty (HTML/XML)
Stymulus
Testowany model (VHDL)
VhdlUnit (vhdl)
TestCase
Asercja wymuszenie zachowania okreslonego
warunku podczas pracy symulowanego systemu (np.
przyjmowanie przez dany sygnal okreslonego stanu
- wartosci)
6Standardowe metody asercji
Asercja sprawdzajaca warunek ? Czy ab ?
assert a b report 'Blad... a jest rózne od b'
severity ERROR
wyswietlany komunikat przy niespelnionym warunku,
ab
komunikat bledu wyswietlany na konsoli
- ograniczone sposoby raportowania bledów
- dzialanie w zakresie pojedynczych symulacji
7Metody asercji biblioteki vhdlUnit
assertEquals(a,b)
ab
altgtb
Raport
- rozbudowana lista metod asercji assertXXX dla
róznych typów danych (mozliwosc rozszerzania o
metody asercji dla wlasnych typów danych np.
nstd_logic) - raportowanie wyników w postaci tabel
8Pakiety biblioteki vdhlUnit
vhdlUnit.vhd
library IEEE use IEEE.STD_LOGIC_1164.all use
IEEE.STD_LOGIC_TEXTIO.all use STD.TEXTIO.all us
e work.vhdlUnit_cfg.all package vhdlUnit is
... procedure setUp(name in string
testboolean) procedure tearDown  function
assertWait(tin time)return time function
assertTime(tin 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
9TestBench 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
10Struktura jednostki testowej
TestBench.vhdl
vhdlUnit.vhdl
Jednostka testowa
setUp() assertTime() assertWait() assertEqual
s() 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 najmniejsza jednostka testowa
skladajaca sie z metody setUp inicjujacej test,
grupy metod asercji assertXXX testujacych stan
testowanych sygnalów, oraz metody teardown
zakonczenia testu.
1
2
3
tearDown
assertXXX()
setUp(...)
11TestCase - przyklady
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
bezposrednie 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(itest_time)
assertEquals("out_1",out_1,test_vector(i))
end loop tearDown -- koniec testu
wait  end process
porównanie z wektorem danych
12Przyklad test pelnego sumatora FA
Wzorzec
TestBench
?
Raport
13Osadzanie testów
vhdlunit.properties plik buforujacy dane
przekazywane pomiedzy kolejnymi symulacjami
vhdlUnit.do
VhdlUnit_tb (unit_initialize)
open new
initialize
update
test 1
Raport (Html/XML)
update
test 2
Testowane komponenty
update
test N
close
VhdlUnit_tb (unit_finalize)
finalize
14Osadzanie testów
Przykladowe makro srodowiska 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.vh
d" Â 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 wywolanie symulacji testowych wraz z
dodatkowa symulacja poczatkowa (INITIALIZE_VHDL_UN
IT) i koncowa (FINALIZE_VHDL_UNIT)
15Konfiguracja 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 umozliwia selektywne
wlaczanie okreslonych 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) znajdujace sie w
jednym wspólnym lub dwóch niezaleznych
testbenchach wykonywanych w niezaleznych
symulacjach
16Raportowanie wyników testu
Info Success Error Failure
statystyka testu
17Modul rozszerzajacy - przyklad
vhdlUnit.vhd
library IEEE use IEEE.STD_LOGIC_1164.all use
IEEE.STD_LOGIC_TEXTIO.all use STD.TEXTIO.all us
e 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 li
brary nstd_logic_2000 use nstd_logic_2000.nstd_lo
gic_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_logi
c.all
vhdlUnit_ext_nstd_logic.vhd
vhdlUnit.vhd
Biblioteka vhdlUnit nie wymaga
modyfikacji (przeciazanie metod asercji)
18Rozwój biblioteki vhdlUnit
- Dodatkowe moduly raportujace (np. XML, SVG)
- Implementacja metod asercji pobierajacych
wzorcowe dane z zewnetrznych plików
assert(FILE), assert(LIST), assert(WAVE) - Porównywanie przeprowadzonych testów z ich
wczesniejszymi wersjami (rejestrowanie postepu
prac projektowych liczby poprawnie dzialajacych
testów, ...) - Rozbudowa mechanizmów przekazywania danych
pomiedzy dwoma symulacjami (vhdlUnit.properties)
19vhdlUnit ? Open Source Project
http//kik.ie.tu.koszalin.pl/vhdlunit
20Podsumowanie
- Niezaleznosc od srodowiska projektowego (calosc
kodu opracowana w jezyku VHDL) - Mozliwosc rozszerzania o wlasne moduly
(vhdlUnit_ext_nstd_logic.vhd) - Zgodnosc nazewnicza z innymi bibliotekami
testów jednostkowych (JUnit) - Mozliwosc wspólnego raportowania wyników testu
dla wielu niezaleznych symulacji