20
POLITECHNIKA KOSZALIŃSKA Wydział Elektroniki ELEKTRONIKI WYDZIAŁ POLITECHNIKA KOSZALIŃSKA Przemysław Sołtan e-mail: [email protected] 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

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

Page 1: Koncepcja realizacji testów jednostkowych w języku VHDL

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

Page 2: Koncepcja realizacji testów jednostkowych w języku VHDL

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

Page 3: Koncepcja realizacji testów jednostkowych w języku VHDL

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)

Page 4: Koncepcja realizacji testów jednostkowych w języku VHDL

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

Page 5: Koncepcja realizacji testów jednostkowych w języku VHDL

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)

Page 6: Koncepcja realizacji testów jednostkowych w języku VHDL

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

Page 7: Koncepcja realizacji testów jednostkowych w języku VHDL

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

Page 8: Koncepcja realizacji testów jednostkowych w języku VHDL

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

Page 9: Koncepcja realizacji testów jednostkowych w języku VHDL

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

Page 10: Koncepcja realizacji testów jednostkowych w języku VHDL

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

Page 11: Koncepcja realizacji testów jednostkowych w języku VHDL

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

Page 12: Koncepcja realizacji testów jednostkowych w języku VHDL

12

Przykład – test pełnego sumatora FA

TestBench

Wzorzec

Raport

?

Page 13: Koncepcja realizacji testów jednostkowych w języku VHDL

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

Page 14: Koncepcja realizacji testów jednostkowych w języku VHDL

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)

Page 15: Koncepcja realizacji testów jednostkowych w języku VHDL

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

Page 16: Koncepcja realizacji testów jednostkowych w języku VHDL

16

Raportowanie wyników testu

InfoSuccessErrorFailure

statystykatestu

Page 17: Koncepcja realizacji testów jednostkowych w języku VHDL

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)

Page 18: Koncepcja realizacji testów jednostkowych w języku VHDL

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)

Page 19: Koncepcja realizacji testów jednostkowych w języku VHDL

19

vhdlUnit Open Source Project

http://kik.ie.tu.koszalin.pl/vhdlunit

Page 20: Koncepcja realizacji testów jednostkowych w języku VHDL

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