<?php echo _title;?> www.prochazka.zde.cz
www.ccsinfo.com/CEH
Server si právě čte 419 lidí, dnes je úterý, 26. Listopad 2024   
Kategorie: Knihovnička, Xilinx, VHDL

Popis jazyka VHDL čast 3

Další díl popisu jazyka VHDL. Tentokrát je velice podrobně komentován konkrétní kód který je s úpravou použit ve vývojové desce PIC a XILINX...

si můžete stáhnou celý projekt, který v druhé a třetí části popisuji, včetně schematu zapojení vlastní součástky. Projekt se jmenuje vývojová deska a pro nedostatek času je nedokončený mám v planu ho někdy dokončit...

Popis klávesnice v multiplexním provozu

Na obrázku máte blokové schéma klávesnice.
Fialové vodiče jsou vyvedeny na vývody pouzdra hradlového pole. Jedná se o vstupy či výstupy.
Směr šipky na libovolném spoji ukazuje tok dat.

multi_kl

Náhled zapojení samotné klávesnice.
Zvětšené zapojení klavesnice. multi_kl1

VHDL code
--
-- by HaCeSOFT
--
-- Datum : 9.7.2001
--
--
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

Deklarace entity klávesnice.
Signál RADKY se propojí se vstupy klávesnice V0, V1 a V2.
Totéž se provede se signálem SLOUPCE. Ty se připojí na výstup klávesnice S0, S1, S2 a S3.
Vstupní signály RESET a CLK nepotřebují komentář.
Klávesnice obsahuje 12 tlačítek. Stejné množství výstupu (12) obsahuje výstupní signál VYSTUP_LED1.

VHDL code
entity klavesnice is
 Port (sloupce : in std_logic_vector(3 downto 0);
       radky : out std_logic_vector(2 downto 0);
       vystup_LED1 : buffer std_logic_vector(11 downto 0);
       reset : in std_logic;
       clk : in std_logic);
end klavesnice;

Signál AKUMULATOR je výstup z obvodu, který je na blokovém schématu označen jako MUX.

VHDL code
architecture kl1 of klavesnice is
 signal radky1 : std_logic_vector(1 downto 0);
 signal sloupce1 : std_logic_vector(1 downto 0);
 signal akumulator : std_logic;
 signal buf : std_logic_vector (3 downto 0);
begin
 
 process (clk, reset) begin

Vynuluje všechny sčítače a výstupní buffer.

VHDL code
  if reset = '0' then
   sloupce1 <= "00";
   radky1 <= "00";
   vystup_LED1 <= "000000000000";
 
  elsif clk = '1' and clk'event then
 
   Sčítač sloupců.
 
   sloupce1 <= sloupce1 +1;

Obvod MUX.

VHDL code

   case sloupce1 is
    when "00" => akumulator <= sloupce (0);
    when "01" => akumulator <= sloupce (1);
    when "10" => akumulator <= sloupce (2);
    when "11" => akumulator <= sloupce (3);
    when others => NULL;
   end case;

Abychom mohli adresovat dekodér 1 z 12 pomocí dvou různých sčítačů musíme výstupy sčítačů spojit do jednoho signálu. Kterým je tady signál BUF.

VHDL code

   buf (3 downto 2) <= radky1;
   buf (1 downto 0) <= sloupce1;

Dekodér 1 z 12.
Až při realizaci tohoto obvodu zjistíme že při stisku tlačítka A se na výstupu VYSTUP_LED1 neobjeví log. 1 na bitu 0 ale na bitu 8! To jsme si vysvětlili už při realizaci LED display v multiplexním provozu.
Nápravu opět nechám na vás.

VHDL code
   case buf is
    when "0000" => vystup_LED1 (0) <= not akumulator;
    when "0001" => vystup_LED1 (1) <= not akumulator;
    when "0010" => vystup_LED1 (2) <= not akumulator;
    when "0011" => vystup_LED1 (3) <= not akumulator;
    when "0100" => vystup_LED1 (4) <= not akumulator;
    when "0101" => vystup_LED1 (5) <= not akumulator;
    when "0110" => vystup_LED1 (6) <= not akumulator;
    when "0111" => vystup_LED1 (7) <= not akumulator;
    when "1000" => vystup_LED1 (8) <= not akumulator;
    when "1001" => vystup_LED1 (9) <= not akumulator;
    when "1010" => vystup_LED1 (10) <= not akumulator;
    when "1011" => vystup_LED1 (11) <= not akumulator;
    when others => NULL;
   end case;
 
   Podmínka SLOUPCE.
 
   if sloupce1 = "11" then
 
   Sčítač RADKY.
 
    radky1 <= radky1 + 1;
 
   Vynulovat sčítač RADKY, když dosáhne stavu "10".
 
    if  radky1 = "10" then radky1 <= "00"; end if;
 
   Dekodér 1 ze 3.
 
    case radky1 is
     when "00" => radky <= "110";
     when "01" => radky <= "101";
     when "10" => radky <= "011";
     when others => NULL;
    end case;
   end if;
  end if;
 end process;
end kl1;

print Formát pro tisk

Komentáře rss

Přidat komentář >

Nebyly přidány žádné komentáře.

Všechny informace jsou zahrnuty pod GPL licenci, pokud není explicitně uveden jiný typ licence.
Používání těchto stránek ke komerčním účelům lze jen se souhlasem autora.
Všechna práva vyhrazena (c) 1997 - 2024 hacesoft.
Jste návštevník číslo: 445625
Celkem zobrazeno stránek: 17755142
Přihlásit do administrace