Nézzük meg az eljárások (procedure) készítésének menetét. Hasonlóan a függvényekhez, megadhatunk eljárásokat felépítményben, processben és csomagban. Az utóbbira láthatunk példát a következő VHDL kódban, amely mind a két alprogram típus (function, procedure) készítésére mutat példát.
A csomag (pelda2.vhd) tartalma :
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
package pelda2 is
procedure increment (signal A: in std_logic_vector(7 downto 0);
signal B: out std_logic_vector(7 downto 0));
procedure decrement (signal A: in std_logic_vector(7 downto 0);
signal B: out std_logic_vector(7 downto 0));
procedure MUX2 (A, B, SEL : in std_logic; signal Y : out std_logic);
function hatvany2(A : in integer) return integer;
function paros(A : in std_logic_vector) return std_logic;
end pelda2;
package body pelda2 is
procedure increment (signal A: in std_logic_vector(7 downto 0);
signal B: out std_logic_vector(7 downto 0)) is
begin
B <= std_logic_vector(unsigned(A) + 1);
end;
procedure decrement (signal A: in std_logic_vector(7 downto 0);
signal B: out std_logic_vector(7 downto 0)) is
begin
B <= std_logic_vector(unsigned(A) - 1);
end;
procedure MUX2 (A, B, SEL : in std_logic; signal Y : out std_logic) is
begin
Y <= (A and not(SEL)) or (B and SEL);
end;
function hatvany2(A : in integer) return integer is
begin
return A * A;
end;
function paros(A : in std_logic_vector) return std_logic is
begin
if A(0) = '1' then
return '1';
else
return '0';
end if;
end;
end pelda2;
A csomag nem csak ejárásokat, hanem függvényeket is tartalmaz, viszont a tesztelésnél ezeket most nem fogjuk felhasználni.
Készítsünk most egy VHDL file-t (teszt1.vhd), amelynek segítségével tesztelhetjük a csomagban található eljárásokat). Legyen ennek a file-nak a neve : teszt1.vhd.
Az eljárásokat tartalmazó VHDL file (teszt1.vhd) :
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.pelda2.all;
entity teszt1 is
port(Y : out std_logic);
end teszt1;
architecture BEH of teszt1 is
signal jelA : std_logic_vector(7 downto 0) := X"12";
signal jelB : std_logic_vector(7 downto 0) := X"24";
begin
MUX2('1','0','0',Y);
process
begin
for i in 0 to 10 loop
increment(jelA, jelA);
decrement(jelB, jelB);
wait for 10 ns;
end loop;
end process;
end BEH;
Látható, hogy a "teszt1.vhd" file-ban egy process található, ugyanis ez felel a tesztvektorok előállításáért.
Készítsünk most egy projektet a VHDL Simili segítségével. Vegyük fel ezt a két file-t (pelda2, teszt1) és fordítsuk le ezeket.
Ezután szimuláljuk le a teszt1.vhd file-t. A szimulációs eredmény az első ábrán látható.
1. ábra Az eljárások működésének szimulációs eredménye
Elkészítünk most VHDL nyelven egy PWM modult. Természetesen digitális úton állítunk elő PWM jelet.. . . .
Készítünk VHDL nyelven most egy programozható szélességű multiplexert, amelyet azután elhelyezünk egy Spartan 6-os FPGA-ban. A bemenet (és a kiválasztó jel) szélessége paraméteresen állítható be a fordítás előtt.. . . .
Készítünk VHDL nyelven most egy programozható szélességű multiplexert, amelyet azután elhelyezünk egy Spartan 6-os FPGA-ban. A bemenet (és a kiválasztó jel) szélessége paraméteresen állítható be a fordítás előtt.. . . .