Popis simulačního souboru v jazyce VHDL - VHDL Test Bench
VHDL TEST BENCH vytvoříme tak že : klikneme na jeden z dvou suborů v okně v levé části obrazovky a potom pravým a vybereme New source. Potom vybereme VHDL TEST BENCH a nazveme podle názvu našeho projektu např: ledtb ptom dáme next následuje shrnutí klikneme na next a finish po chvíli se vygenruje kód akorát se musíme přepnout do simulace kliknutí na simulation v přepínači v levo. Následně poklepeme na náš vytvořený simulační soubor a jsme tam.
V tomto příspěvku popíšu soubor,který slouží k simulaci návrhu a nazývá se VHDL TEST BENCH
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--USE ieee.numeric_std.ALL;
ENTITY multiplexerdifftb IS
END multiplexerdifftb;
ARCHITECTURE behavior OF multiplexerdifftb IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT Multiplexerdiff
PORT(
K : IN std_logic;
E : IN std_logic;
choice : IN std_logic;
andgate : OUT std_logic;
switch : IN std_logic;
led : OUT std_logic
);
END COMPONENT;
--Inputs
signal K : std_logic := '0';
signal E : std_logic := '0';
signal choice : std_logic := '0';
signal switch : std_logic := '0';
--Outputs
signal andgate : std_logic;
signal led : std_logic;
-- No clocks detected in port list. Replace <clock> below with
-- appropriate port name
constant <clock>_period : time := 10 ns;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: Multiplexerdiff PORT MAP (
K => K,
E => E,
choice => choice,
andgate => andgate,
switch => switch,
led => led
);
-- Clock process definitions
<clock>_process :process
begin
<clock> <= '0';
wait for <clock>_period/2;
<clock> <= '1';
wait for <clock>_period/2;
end process;
-- Stimulus process
stim_proc: process
begin
-- hold reset state for 100 ns.
wait for 100 ns;
wait for <clock>_period*10;
-- insert stimulus here
wait;
end process;
END;
Nyní slíbený popis elementů
Na první pohled to vypadá podobně,jako u VHDL Modulu s tím rozdílem,že jsou zde definovány signály a komponenty. Je zde knihvna ieee; která slouží k propojení,aby vše fungovalo tak jak má.
USE ieee.std_logic_1164.ALL;
Dále je zde element use ieee který říká použíj propojovací knihovnu ieee a taky STD_LOGIC_1164.ALL; která říká že má samostatný bit,který má v sobě šedesátičtyřbitový modul a tento celý element má použít všechny bity. To právě definuje slovíčko ALL;
-USE ieee.numeric_std.ALL;
K tomu abychom mohli počítát s běžnými desítkovími čísly nám poslouží právě tento element -USE ieee.numeric_std.ALL;
Je zde opět propojovací knihovna. Zde nepotřebuji definovat samostatný bit ,ale právě to,že budu pracovat s ruznými matematickými operacemi a ktoumu právě poslouží element numeric a jak jsem již říkal nepotřebuji definovat bity proto je zde napsané jenom numeric_std.ALL; Aall opět vyjadřuje využití všecho co v sobě tato metoda má.
ENTITY multiplexerdifftb IS
Enttity je rozhraní projektu i v tomto souboru,je to podobné,jao u VHDL Modulu. Odvíjí se to od toho,jak jsem pojemenoval VHDL Modul při zákládání projektu, Poku jste vytvořili třeba projekt s názvém např. led budete tam mít napsané led.
END multiplexerdifftb;
samozřejmě ENTITY musí také někde končit a je právě zakončeno elementem END multiplexerdifftb;
ARCHITECTURE behavior OF multiplexerdifftb IS
Na další řádku je definovaná architektura chování našeho projektu ale jsou v ní komponenty.
COMPONENT Multiplexerdiff
PORT(
v komponentách projektu musí ale samozřejmě také porty a do této komponenty se definují porty z našeho projektu,které jsme definovali na začátku. Je zde také opět název našho projektu.
END COMPONENT;
Architektura komponent musí také samozřejmě někde mít konec a proto k zakončení použijeme : END COMPONENT;
Pod zakončením komponent jsou vypsany nače porty pomocí signálů. Pomocí komentářů --Inputs - vstupy poznáme že se jedná o signál se vstupním portem.
Potom jsou zde vyspany výstupy pomocí komentáře --Outputs tak poznáme,že se jedná o výstupní signály
constant <clock>_period : time := 10 ns;
constant :Konstanta je něěco za co když Dosadíme číslo tak potom už musíme dávat do této konstaty pořád stejné číslo,protže v konstantě se čísla neměmní. Museli bychom těch konstat vytvořit kolik chceme a pak tam dám nějaké jiné číslo,ale po každé bychom museli vytvořit novou konstantu. Nyní to,ale nebudeme potřebovat mužeme tu konstantu celou smazat
Dále je zde definován port hodin pomocí elemetnu clock - hodiny a ten je,jak si můžeme všimnout v ostrých závorkách. tyto závorky značí pouze formální parametr to znamená můžeme je umazat.
Dále je zde definovaná perioda perioda znamená že se stále něco opakuje a je v ní definován čas pomocí elementu time,který se rovná 10 nanosekundám.
BEGIN
Začátek. Ten můžeme také smazat.
-- Instantiate the Unit Under Test (UUT)
uut: Multiplexerdiff PORT MAP (
K => K,
E => E,
choice => choice,
andgate => andgate,
switch => switch,
led => led
);
Nadalším řádku je definováno mapování portu to znamená kám na která tlačítka neboli tak zvané piny se mají porty umístit.
-- Clock process definitions
<clock>_process :process
begin
<clock> <= '0';
wait for <clock>_period/2;
<clock> <= '1';
wait for <clock>_period/2;
end process;
Na další řádku jsou definovány hodiny a jejich procesy také spomalovací procesy pomocí elemtnu Wait a také zakončení procesu pomocí elementu end process;. Opět to můžeme celé smazat nebudeme to potřebovat.
Element Bgin můžeme také smazat.
Je zde také definován stimulační proces pomoc stim_proc.process tak éž můžeme smazat.
wait for 100 ns; - Jedná se o zpomalovací proces pod který budeme přiřazovat naše porty pomocí operátora přiřazení <= to znamená pokud tam máme v mém případě porty K E choice budeme s těmito porty pracovat. Např. K <= '0' tto číslo které chceme přiřadit musí být v apostrofech jinak by to nefungovalo a potom zakončíme opět středníkem. Píšeme to po element wait for 100 ns; to číslo u těch nanosekund mužeme klidně změnit namísto 100 tam dáme třeba 15.
Důležité před začátem programování souboru VHDL TEST bench je důležité,aby ve Ikoně isim simulator,kterou rozbalíme malým + svítily 2 položky Behaveoural check syntax a Simulate behaveoural model. Po dokončení programování v souboru VHDL TEST BENCH klikneme na disketku pro uložení
a potom poklepem na Behaveoural check syntak a pokud se rosvítí zelená fajfka potom můžeme přejít k dalšímu krkou poklepeme na Simulate behaveoural model. Po chíli by se nám mělo otevřít okno se schématem našich portů a také ny zde mělo být znázorněno,kterému portu jsme co přiřadili. To je k simulaci návrhu prozatím vše.
Poznámka : pokud se nezobrazují 2 zmiňované položky po rozbalení I sim simulátoru Behaveoural check syntax a Simulate Behaveoural Model pomůže zavření a opětovné otevření Xilinx design suite a po otevření se přepneme na položku View a poklepeme na náš vhdl modul. Potom se přepneme na tom samém přepinači klikneme na Simulation a poklepeme na náš soubor který se jmenuje jako náš projekt který by jsme měli pojemenovat jako náš projekt s tím rozdlíem že na konec napíšeme tb např. Multiplexertb. Nyní znovu rozbalíme I sim simulator a měly by tam být zmiňované 2 položky Behaveoural check syntax a Simulate Behaveoural Model. Ještě před zavřením vývojového prostředí je potřeba malým tlačítekm mínus sbalíme nabídku I sim simulátoru a potom po otevření prostředí a přepnutí do simulace a otevření simulačního souboru znovu rozbalit nabídku Isim simulator a nyní už by tam měly být ty 2 položky Behaveoural check syntax a Simulate Behaveoural Model.
Poznámka : Musíme ty elementy mazat a pak to celé ukládat dokud to nenajde žádní eror a pokud se to konečně rozsvítí rozsítí zeleně tak můžeme začít programovat.