Jazyk VHDL je úplně jiný než kterýkoli jiný jazyk používaný v mikrokontrolérech. Každý příkaz se provádí paralelně. Tutoriálů je docela dost, takže si myslím, že základy můžete čerpat kdekoli z internetu.
Například zde: http://www.prochazka.profitux.cz/index.php?p=vhdl
nebo si můžete koupit knihu: Číslicové systémy a jazyk VHDL, od autorů: Jiří Pinker a Martin Poupa z roku 2006, nakladatelství BEN.
Jako vývojové prostředí budeme používat ModelSim od Altery.
Nejprve si založíme projekt:
Poté zadáme název nového projektu.
Po odkliknutí budeme dotázáni, zda má vytvořit nový soubor nebo přidat existující.
Při odkliknutí „Create New File“ se objeví okno pro zadání názvu souboru.
Založíme si rovnou 2 soubory a to „and.vhdl“ a „tb_and.vhd“. TB – test Bench, soubor, testující chování námi navrženého obvodu. Jak můžete vidět, v kolonce „Status“ jsou otazníky, to znamená soubory ještě nebyli zkompilovány.
Soubor and.vhd
library ieee; –knihovna ieee
use ieee.std_logic_1164.all; –pouziti castu knihovny ieee
entity gate_and is –zacatek entity
port
(
vstup_a : in std_logic; –deklarace „vstup_a“ jako vstup
vstup_b : in std_logic;
vystup_c : out std_logic –deklarace „vystup_b“ jako vystup
);
end; –konec entity, take mozno zapsat jako „end entity“ nebo „end entity gate_and“
architecture sim of gate_and is –zacatek architektury „sim“ z „gate_and“
begin
vystup_c <= vstup_a and vstup_b; –do „vystup_c“ prirad vysledek z „vstup_a and vstup_b“
end; –konec architektury
Soubor tb_and.vhd
library ieee; –knihovna ieee
use ieee.std_logic_1164.all; –pouziti castu knihovny ieee
entity tb is –entita „tb“
end; –konec entity
architecture sim of tb is –zacatek architektury „sim“ z „tb“
component gate_and is –vytvoreni componenty
port(
vstup_a : in std_logic; –deklarace „vstup_a“ jako vstup
vstup_b : in std_logic;
vystup_c : out std_logic –deklarace „vystup_c“ jako vystup
);
end component; –konec komponenty
signal a : std_logic; –deklarace pomocneho signalu jako std_logic, vyvod muze nabyvat 9 hodnot
signal b : std_logic;
signal c : std_logic;
begin
dut : gate_and port map –namapovani portu
(
vstup_a => a, –prirazeni „vstup_a“ do „a“
vstup_b => b,
vystup_c => c –nepise se „,“
); –zde musi byt „;“
process
begin
wait for 100 ns; –cekej 100ns
a <= ‚0‘; –do „a“ prirad ‚0‘, pro pouziti stringu je zapis „0000“
wait for 50 ns;
b <= ‚1‘;
wait for 50 ns;
a <= ‚1‘;
wait for 50 ns;
b <= ‚0‘;
wait for 100 ns;
wait; –uspani procesu, nutne!
end process; –konec procesu
end; –konec architektury
Kompilaci souborů provedete tlačítkem Compile All.
Pokud kompilace proběhne v pořádku, objeví se ve kolonce „Status“ fajfka.
Spuštění simulace provedeme v záložce „Simulate“ -> „Start Simulation“.
Objeví se okno, kde vybereme název našeho projektu a označíme složku „tb“ a odklikneme OK.
Objeví se nové okno, kde vidíte (vpravo) všechny signály.
Označíme všechny simulace, klikneme pravým tlačítkem myši a dáme „Add Wave“ nebo „Ctrl + W“
Otevře se nové okno se simulací, kde pro spuštění simulace klikneme na tlačítka „Run -All“ a poté odzoomujeme tlačítkem „Zoom Full“
Na následujícím obrázku vidíte spuštěnou simulaci. Kliknutím myši na ono simulace se objeví kurzor, který vlevo (/tb/a např) ukazuje ukazuje aktuální hodnotu signálů.