loader
Foto

Függvények a VHDL nyelvben

A VHDL hardverleíró nyelvben fontos szerepet kapnak az alprogramok. Ezért megismerjük most az egyik alprogramfajtának, a függvénynek az alapjait.

A VHDL hardverleíró nyelvben a különböző alprogramokat széles körben használják. Ilyen alprogram a függvény (function) és az eljárás (procedure). A függvény nem, de az eljárás lehet egyidejű vagy akár sorrendi is.

Ebben a cikkben csak a függvényeket fogjuk átnézni példák segítségével.
A függvény paraméterlistájában csak bemenetet fogad el, és csak egy értékkel tér vissza (return használata).
Függvényeket megadhatunk processben, felépítményben, illetve csomagban. Most ezeket nézzük meg 1-1 példa segítségével.

 

Függvény processben

Nézzük meg a következő példát :

process (….)

  function max (a,b: in std_logic_vector) return std_logic_vector is

  begin

     if a > b then

        return a;

     else

        return b;
     end if;

end max;

  

KI <= max(X, Y);           -- Egyidejű függvényhívás

process(X, Y)

begin

     KI  <=max(X, Y)         -- Sorrendi függvényhívás

end process;

  ...

end;    


Látjuk, hogy a függvény egy processben került megadásra.
 

 

Függvény felépítményben

Felépítményben is meg tudunk valósítani függvényt, erre mutat egy lefordítható példát a következő VHDL kód :

LIBRARY IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity tesztfgv is
    port(X, Y : in std_logic_vector(7 downto 0);
        KI : out std_logic_vector(7 downto 0));
end tesztfgv;

architecture RTL of tesztfgv is

    function max (a,b: in std_logic_vector) return std_logic_vector is
    begin
        if a > b then
            return a;
        else
            return b;
        end if;
    end max;

begin

    KI <= max(X, Y);

-- vagy :
    process(X, Y)
    begin
        KI <=max(X, Y);
    end process;
end RTL;

 

Függvény csomagban

Projekteknél célszerű ezt a megoldást választani, hiszen akkor a projekt összes file-ában meghívhatók a csomagban tárolt függvények.

A csomag általános felépítése a következő :

package csomagnév is
     típusok és altípusok
     alprogramok
     konstansok, jelek, stb.
end csomagnév;
package body csomagnév is
     konstansok
     alprogramok
end csomagnév;


Példa

package :

Library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

package fgv2 is
    function komp(A, B : std_logic_vector) return std_logic;

end;

package body fgv2 is
    function komp(A,B : std_logic_vector) return std_logic is
    begin
        if A = B then
            return '1';
        else
            return '0';
        end if;
    end;
end fgv2;


A kód, ahol felhasználtuk a package-et : 

Library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use work.fgv2.all;

entity fgvteszt is
    port(A, B : in std_logic_vector(15 downto 0);
        AeB : out std_logic);
end fgvteszt;

architecture RTL of fgvteszt is
begin

    AeB <= komp(A,B);      -- ez a függvény a csomagban van
end RTL;



Egyéb cikkek

További cikkeink ebben a témakörben

Régebbi cikkeink

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.. . . .