• Nem Talált Eredményt

Tervek teszteléséhez tesztpad (test-bench) összeállítása

2. Programozható logikai kapuáramkörök,

2.4. Xilinx ISE környezet és az ISim szimulátor használata

2.4.4. Tervek teszteléséhez tesztpad (test-bench) összeállítása

Manapság sok nagynevű gyártó kínál szimulátor programokat az elektronikus tervek automa-tizált ellenőrzésének biztosításához, de számos ingyenes szoftver is elérhető ezen az alkalma-zási területen. A jegyzet készítése során a Xilinx beépített ISim szimulátorát használjuk, amely az ISE telepítésével válik elérhetővé. Esetünkben inkább a gyors kezelhetőségen, és egyszerűségen, mintsem a professzionális felhasználáson és teljeskörű paraméterezhetőségen volt a hangsúly. Az utóbbiakra számos szimulátor programot találhatunk: az egyik legna-gyobb név a Mentor Graphics – ModelSim szimulátora, amelyet professzionális ipari környe-zetekben használnak (ennek létezik többféle ingyenes oktatói-tanulói változata is – régebbi ISE verziókhoz ModelSim XE-III Starter néven [XILINX], amely a Xilinx ISE 12.3-as válto-zatáig együttműködve regisztráció után ingyenesen licenszelhető. Az új ModelSim Student PE változat már a ModelSim oldaláról érhető csak el [MODELSIM]).

a_in(3 : 0) 2.10. ábra: a 4-bites egyenlőség összehasonlító áramkör testpadjának felépítése:

stimulus, legfelsőbb szintű terv és a jelalak monitorozó összekapcsolása

A HDL leírásokból összeállított tervek megfelelő működését – akár a tervezés minden egyes hierarchia szintjén – szükséges ellenőrizni, és szimulálni. Vizsgálatok kimutatták, hogy a legtöbb tervezési feladatban – komplexitástól függően – nem az egyes entitások HDL leírá-sa (20-30%), hanem sokkal inkább azok megfelelő tesztelése, egy jó tesztpad/tesztágy össze-állítása (~70-80%) jelenti a legnehezebb és egyben legidőigényesebb feladatot, amely a kívánt

kimenet szempontjából egyátalán nem tekinthető közömbösnek. A módszer során a vizsgá-landó entitást, vagy a top-modul szintjéig példányosított entitások csoportját egy ún. tesztágy-ba (testbench) helyezzük el, amelyhez tesztvektorokat, mint gerjesztéseket (stimulus) adha-tunk, hogy szimuláljuk a működését. A szimuláció során a kimeneti jeleket monitorozzuk, amelyben grafikusan (általában hullámforma alapján) vagy akár szövegesen (lista) ábrázolva vizsgálhatjuk meg az entitások viselkedését az egyes jeleik változását, illetve beállítását az esetleges hibák felderítése végett. A korábbi példánknál – 4-bites egyenlőség komparátor – maradva mutatjuk be egy tesztpad összeállítását, és működését, valamint a Xilinx ISim szimu-látor program használatának bevezetését.

A 2.10. ábra szerinti tesztpad (test-bench) VHDL leírása a következő kódrészlet sze-rint adott:

-- Feladat 02 - testbench library ieee;

use ieee.std_logic_1164.all;

entity egyenloseg_4_bit_top_tb is end egyenloseg_4_bit_top_tb;

architecture tb_arch of egyenloseg_4_bit_top_tb is

signal test_in0, test_in1: std_logic_vector(3 downto 0);

signal test_out: std_logic;

begin

-- a top-level entitás példányosítása uut néven uut: entity work.egyenloseg_4_bit_top(arch)

port map(a_in=>test_in0, b_in=>test_in1, eq_out =>test_out);

-- testvektorok generálása -- Stimulus process

stim_proc : process begin

-- test vektor 1 test_in0 <= "0000";

test_in1 <= "0000";

wait for 100 ns;

-- test vektor 2 test_in0 <= "0000";

test_in1 <= "0001";

wait for 100 ns;

-- test vector 3 test_in0 <= "0000";

test_in1 <= "0010";

wait for 100 ns;

-- test vector 4 test_in0 <= "0000";

test_in1 <= "0011";

wait for 100 ns;

--…

-- test vector 254 test_in0 <= "1100";

test_in1 <= "1111";

wait for 100 ns;

-- test vector 255 test_in0 <= "1110";

test_in1 <= "1111";

wait for 100 ns;

-- test vector 256 test_in0 <= "1111";

test_in1 <= "1111";

wait for 100 ns;

-- tesztvektor generálás vége

assert false

report "Szimulacio befejezodott"

severity failure;

end process;

end tb_arch;

A fenti VHDL kódban a legfelsőbb hierarchia szinten lévő 4-bites összehasonlító áramkör van példányosítva ’uut’ (unit under test) néven. A leírás tartalmaz egy process()-t, vagy más néven folyamatot is, amelyben szereplő utasítások a hagyományos magas-szintű nyel-vekhez hasonlóan egymás után, azaz szekvenciálisan hajtódnak végre (lásd későbbi fejezet).

Minden tesztesethez egyedi tesztvektorokat kell definiálni, amelyekhez egy-egy 100 ns-os szimulációs késleltetés tartozik (wait for 100 ns hozzárendelés). Ez az utasítás azt adja meg, hogy az előtte lévő hozzárendelések szerint mennyi ideig kell a tesztvektorok aktuális értékit tartani, miután új értéket kaphatnak.

Megjegyzés: Ha a fenti HDL leírásban a 4-bites egyenlőség összehasonlító áramkör helyes működésének vizsgálatához az össze lehetséges tesztvektor variációt meg kívánjuk adni, akkor a lehetséges 256 tesztesetet fel kellene sorolni, amely nagyban megnöveli a tesztpad

forráskódjának méretét, kezelhetőségét és értelmezését. A későbbiek során az ilyen tesztese-tekre egy jobb megoldást biztosít, ha n-bites számlálókat (counter) használunk a tesztvektorok generálásához (pl. 1 db 4-bites felfelé számlálót test_in0-ra, illetve 1 db 4-bites lefelé számlálót test_in1-re), azért, hogy az összes lehetséges tesztvektort előállítsuk.

Az ISE implementációs és mod ellező feladat további lépései (folytatás)

7. Ezután az 5. lépéshez hasonló módon szerkesszük meg, vagy adjunk hozzá a projekt-hez egy új VHDL forrást („egyenloseg_4_bit_top” leírását) amit a 2.4.2.-ben ismertettünk (a 2.10. ábrán látható). Ebben az esetben az ISE forrás ablaka a követke-ző hierarchia szinteket fogja ábrázolni:

Így. az egyenloseg_4_bit_top.vhd került a legmagasabb hierarchiaszintre (top modul ), amelyben az egyenloseg_1_bit.vhd van példányosítva két architektúra leírással: kapu_szintu, illetve kapu_xnor. Ezután ismételjük meg a 6. lépésben ismertetett szintaxis ellenőrzést a top modulra.

Tesztpad (test-bench) létrehozása:

8. A következő lépésben hozzuk létre a tesztpadot (test bench), amelynek HDL leírását a 2.5.4. során ismertettük. Project → New Source, vagy baloldali eszköztáron New Source ikon segítségével adjunk hozzá a projekthez egy új „VHDL Test-Bench”-et, melynek neve legyen: „egyenloseg_4_bit_top_tb”. A következő ablak rákérdez ar-ra, hogy melyik entitáshoz kívánjuk rendelni a tesztpadot: itt válasszuk ki a legfelsőbb hierarchia szinten lévő „egyenloseg_4_bit_top” entitást, hiszen ennek a tesztjét sze-retnénk elvégezni. Majd a megjelenő tervösszesítő ablakon nyomjunk „Finish” gom-bot. Ekkor az Xilinx ISE a top-entitás alapján legenerál egy tesztpad-ot, amelyben a következő VHDL kódrészletnek megfelelően:

-- No clocks detected in port list. Replace <clock> below with -- appropriate port name

constant <clock>_period : time := 10 ns;

. . .

-- Clock process definitions <clock>_process :process begin

<clock> <= '0';

wait for <clock>_period/2;

<clock> <= '1';

wait for <clock>_period/2;

end process;

. . .

wait for <clock>_period*10;

9. Mivel órajel periódust, mint egy fizikai típussal deklarált mennyiséget egyelőre nem kívánunk használni, és a tesztpad generálásakor az ISE a top-entitásban sem talált óra-jelet, ezért ezeket a <clock>_period tartalmazó sorokat nyugodtan kommentezzük ki, pontosabban a generált tesztpad forráskódját cseréljük ki a Feladat 1 (2.4.3. fejezet) szerint megadott HDL leírással (egyenloseg_4_bit_top_tb). Ezután mentsük el a tesztpad állományt (File → Save) és ellenőrizzük a nyelvi szintaxisát (Process ablak

→ [+] Synthesize XST → Check Synthax)