WebElektronika

Buffer készítése VHDL nyelven

person access_time 2015.05.04.
Megvalósítunk most egy nagyon egyszerű buffert VHDL nyelven, amelyhez elkészítünk egy szimulációs környezetet is.


Készítünk most egy buffert VHDL nyelven. Ha az engedélyező jel (EN) logikai nullában van, akkor a kimenet nagyimpedanciás állapotban legyen, egyébként a kimeneten a bemenet jelenjen meg.

A megoldás paraméteresen került megvalósításra, az az, a buffer szélessége változtatható a fordítás előtt.

library IEEE;
use ieee.std_logic_1164.all;

entity buffer1 is
    generic(m : integer := 8);
    port(BE : in std_logic_vector(m-1 downto 0);
        EN : in std_logic;
        KI : out std_logic_vector(m-1 downto 0));
end buffer1;

architecture BEH of buffer1 is
begin
    process(BE, EN)
    begin
        if EN = '0' then
            for i in 0 to m-1 loop
                KI(i) <= 'Z';
            end loop;
        else
            KI <= BE;
        end if;
    end process;
end BEH;

 

A for ciklus segítségével tudjuk a kimenetet nagyimpedanciás állapotba vezérelni. A ciklusra azért van szükségünk, hogy a bemenet/kimenet felbontását csak a generic-ben változtathassuk meg. Ezt a ciklust egyébként kiválthatjuk egy others-sel.

process(BE, EN)
    begin
        if EN = '0' then
            KI <= (others=>'Z');
        else
            KI <= BE;
        end if;
    end process;

 

Helyezzük bele a megoldásunkat a következő szimulációs tesztkörnyezetbe, ahol a process-ben a szimulációs vektor található. A projekt (work space) neve a "gyak2" volt.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity buffer1sim is
    generic(m : integer := 8);
    port(KI : out std_logic_vector(m-1 downto 0));
end buffer1sim;

architecture sim of buffer1sim is
signal    SENG : std_logic;
signal    SBE : std_logic_vector(m-1 downto 0);
begin

    nev : entity gyak2.buffer1 port map(SBE, SENG, KI);
    
    process
    begin
        SBE <= "01010101";
        SENG <= '0';
        wait for 10 ns;
        SENG <= '1';
        wait for 10 ns;
        SENG <= '0';
        wait for 10 ns;
        SBE <= "10101010";
        SENG <= '1';
        wait for 30 ns;
    end process;

end sim;

 

Végül szimuláljuk le az áramkörünk működését (1. ábra).

kep
1. ábra   A VHDL szimuláció eredménye