Klíčové slovo: ABS
Klíčové slovo abs je absolutní hodnota, která se aplikuje na nějaký numerický výraz.
Příklad:
LRM: 7.2.
Viz také:
Klíčové slovo: ACCESS
Klíčové slovo access deklaruje objekt ke kterému se přiřazují různé další objekty, skupiny hodnot nebo jednoduché proměnné.
Deklarace zahrnuje vyhrazené slovo access, následován zástupným typem.
Příklad:
type Adresa is access RAM;
type Data is access RAM;
type zapis is access RAM;
type cteni is access RAM; |
Vysvětlení:
Do objektu RAM patři sběrnice: Adresa, Data, jednoduché signály zápis a čteni.
LRM: 3.3.
Viz také:
Klíčové slovo: AFTER
Klíčové slovo after se používá pro přesně definované zpoždění v přiřazovacích výrazech.
Přiřazovací výraz obsahující klíčové slovo after, je standartní, jen je na konci doplněn o nepovinné klíčové slovo transport, inertial nebo reject a příkaz after se specifikaci zpoždění a jednotkou času.
Výraz muže obsahovat ještě nepovinná klíčová slova:
- transport: signál A_IN se přenese na A_OUT se zpožděným 1ns.
- inertial: signál B_IN se přenese na A_OUT se zpožděním 1ns, a impulsy menší než 1ns se nepřenesou.
- reject: signál B_IN se přenese na A_OUT se zpožděním 1ns, ale délku impulsu, který nebude přenesen se specifikuje nepovinným klíčovým slovem reject. V tomto případe se nepřenesou signály které jsou kratší než 500ps (0.5ns).
Příklady:
Clk <= not Clk after 50 ns;
A_OUT <= transport A_IN after 1 ns;
B_OUT <= inertial B_IN after 1 ns;
C_OUT <= reject 500 ps inertial C_IN after 1 ns;
D_OUT <= transport '1' after 1 ns; |
LRM: 8.4.
Viz také:
Klíčové slovo: ALIAS
Klíčové slovo alias deklaruje alternativní jméno pro nějaký existující objekt: signál, proměnná, konstanta nebo soubor. Může také být použité pro "ne objekty" prakticky pro všechno, co bylo předtím deklarováno. Příkaz alias nedefinuje nový objekt. Je jen specifické jméno přiřazené k nějakému existujícímu objektu.
Poznámka: Klíčové slovo alias nemůže být použito pro vícerozměrná pole.
příklady:
signal stavovy_registr : Bit_Vector(7 downto 0);
alias Carry : std_logic is stavovy_registr(0 downto 0);
alias Digit_Carry : std_logic is stavovy_registr(1 downto 1);
alias Zero : std_logic is stavovy_registr(2 downto 2);
alias Power_down : std_logic is stavovy_registr(3 downto 3);
alias Time_out : std_logic is stavovy_registr(4 downto 4);
alias PA : Bit_Vector(2 downto 0) is stavovy_registr(7 downto 5); |
Toto je příklad definovaní aliasu stavového registru (SWR) mikrořadiče PIC16C5X.
LRM: 4.3.
Viz také:
Klíčové slovo: AND
Klíčové slovo AND je operací logického součinu, který může být použitý ve výrazu. Výsledek logického součinu je 1 v případě, že je 1 v obou odpovídajících bitech. V ostatnívh případech je výsledek 0.
Přiklad:
-- V proměnné A je desítková hodnota 15. Ve dvojkové soustavě je to: 00001111
-- V proměnné B je desítková hodnota 170. Ve dvojkové soustavě je to: 10101010
-- Vysledek v A_OUT je potom v desítkové soustavě 10. A ve dvojkové soustavě je to: 00001010
A_OUT <= A and B; |
LRM: 7.2.
Viz také:
Klíčové slovo: ARCHITECTURE
Klíčové slovo ARCHITECTURE definuje detaily příkazu ENTITY.
Tělo příkazu ARCHITECTURE definuje vztahy mezi vstupními a výstupními prvky příkazu ENTITY. Tělo ARCHITECTURE je sestaveno z
jednoduchých operací. Jako: inicializace proměnných, přesouvání hodnot, podmínky, cykli a další...
Příkaz ARCHITECTURE lze použít pro vytvoření procesu, funkce a procedury. Může být spojena jen s jednou definicí příkazu ENTITY.
Nicméně příkaz ENTITY může mít víc než jedno tělo ARCHITECTURE.
Příkaz ARCHITECTURE se zapisuje v tomto pořadí:
1. vyhrazené slovo “ARCHITECTURE”, následováno
a - jménem architektury,
b - vyhrazené slovo OF,
c - jméno entity a
d - vyhrazené slovo IS,
2. část deklarací vnitřních prvků,
3. vyhrazené slovo BEGIN,
4. samotný kód programu,
5. vyhrazené slovo END, následován volitelně jménem architektury (bod 1a).
Příklad:
architecture Název_architektury of Jméno_entity_ke_které_patří is
begin
--- Kód programu
end Název_architektury;
|
Příklad 1:
entity dekoder_1_11 is
port (puls : in std_logic;
q_out : out std_logic_vector(10 downto 0));
end dekoder_1_11;
architecture dekoder_BCD of dekoder_1_11 is
signal scitac : std_logic_vector(3 downto 0);
begin
process (puls)
--variable scitac : std_logic_vector(3 downto 0);
begin
if puls = '1' and puls'event then
scitac <= scitac + 1;
if (scitac = 12) then
scitac <= "0000";
end if;
case scitac is -- dekodér BCD kódu na 1 z 11.
when "0000" => q_out <= "10000000000"; --0
when "0001" => q_out <= "01000000000"; --1
when "0010" => q_out <= "00100000000"; --2
when "0011" => q_out <= "00010000000"; --3
when "0100" => q_out <= "00001000000"; --4
when "0101" => q_out <= "00000100000"; --5
when "0110" => q_out <= "00000010000"; --6
when "0111" => q_out <= "00000001000"; --7
when "1000" => q_out <= "00000000100"; --8
when "1001" => q_out <= "00000000010"; --9
when "1010" => q_out <= "00000000001"; --10
when others => NULL;
end case;
end if;
end process;
end dekoder_BCD;
|
Program ve VHDL z pohledu IO (integrovaného obvodu).
Struktura programu ve VHDL. Zde je vidět jak je možné jednotlivé části (ENTITY) spojovat. Ulpně nejvyšší entita zapouzdřuje celý program do IO (viz obrázek nahoře).
- Historie:
- Modrá okénka jsou příkazy VHDL.
- Žlutá okénka jsou další možné rozšíření.
- Zelené šipky jsou nepovinné neboli volitelné rozšíření programu.
- Červené šipky jsou povinné příkazy vyplývající z hierarchie programu.
- Šipky ukazuji možný tok dat.
LRM 1.2.
Viz také:
Klíčové slovo: DOWNTO
Klíčové slovo downto je sestupná deklarace rozsahu. Nejprve se definuje horní mez, nesledován příkazem downto a nakonec se definuje dolní mez. U klíčového slova to je tomu přesně naopak!
Příklad:
signal A0,A1: std_logic_vector(15 downto 0); |
LRM 6.5.
Viz také:
Klíčové slovo: ELSE
Klíčové slovo else je nepovinný parametr příkazu if. Dá se přeložit jako slovo „jinak“. To znamená, že pokud nebude splněna podmínka v příkazu if, tak se provede to co je za příkazem else.
Příklad:
IF (výraz) THEN příkaz_1; -- středník je nutný
ELSE příkaz_2; -- středník je nutný
END IF; -- středník je nutný
-- Příklad jde krasně přepsat i do srozumitelné šestiny:
-- Když platí (výraz) tak udělej příkaz_1;
-- Jinak proveď příkaz_2;
-- Konec podmínky; |
Viz také:
Klíčové slovo: ELSIF
Klíčové slovo elsif je nepovinný parametr příkazu if. Je to složenina příkazu else a if. Dá se přeložit jako slovo „jinak, když platí“.
Příklad:
IF (výraz) THEN příkaz_1; -- středník je nutný
ELSIF (výraz) THEN příkaz_2; -- středník je nutný
ELSE příkaz_3; -- středník je nutný
END IF; -- středník je nutný
--Příklad jde krasně přepsat i do srozumitelné šestiny:
--Když platí (výraz_1) tak udělej příkaz_1;
--Jinak, když platí (výraz_2) tak udělej příkaz_2;
--Jinak proveď příkaz_3;
--Konec podmínky; |
Viz také:
Klíčové slovo: END
Klíčové slovo end specifikuje konec definice Architecture, Configuration, Entity, Package a Package body.
Viz také:
Klíčové slovo: END BLOCK
Klíčové slovo end block je ukončení definice, která započala příkazem block.
Viz také:
Klíčové slovo: END CASE
Klíčové slovo end case je ukončení definice přepínače, který započal příkazem case.
Viz také:
Klíčové slovo: END COMPONENT
Klíčové slovo end component je ukončení definice komponentu, který započal příkazem component.
Viz také:
Klíčové slovo: END FOR
Klíčové slovo end for je ukončení cyklu, který započal příkazem for.
Viz také:
Klíčové slovo: END GENERATE
Klíčové slovo end generate je ukončení definice, který započal příkazem generate.
Viz také:
Klíčové slovo: END IF
Klíčové slovo end if je ukončení definice podmínky, který započal příkazem if.
Viz také:
Klíčové slovo: END LOOP
Klíčové slovo end loop je ukončení definice smyčky, který započal příkazem loop.
Viz také:
Klíčové slovo: END PROCESS
Klíčové slovo end process je ukončení definice procesu, který započal příkazem process.
Viz také:
Klíčové slovo: END RECORD
Klíčové slovo end record je ukončení definice, který započal příkazem record.
Viz také:
Klíčové slovo: END UNITS
Klíčové slovo end unist je ukončení definice, který započal příkazem unist.
Viz také:
Klíčové slovo: ENTITY
Klíčové slovo ENTITY je deklarace rozhraní návrhu. Návrh ENTITY je abstraktní model číslicového systému.
Příkaz ENTITY obsahuje:
1. definici entity, ta obsahuje jméno entity a deklaraci portu rozhraní,
2. přinejmenším jedno tělo definované příkazem ARCHITECTURE.
Příkaz ENTITY se zapisuje v tomto pořadí:
1. vyhrazené slovo ENTITY, následováno
a - jménem entity,
b - vyhrazené slovo IS,
2.1. nepovinný příkaz GENERIC následovaný seznamem deklarací,
2.2. nepovinný příkaz PORT následovaný seznamem deklarací,
2.4. nepovinný příkaz BEGIN následovaný vhodnýmy deklaracemi a
3. povinným příkazem END následován volitelním jménem (bod 1a).
Porty definovane uvnitř entity jsou viditelné pouze v tělech definovaném příkazem ARCHITECTURE a odkazu napojeném na definici ENTITY.
Pokud je definován nějaky signal nebo skupina signálu v těle příkazu ARCHITECTURE, tak jsou viditelné jen směrem dolů.
Příklad:
entity Mux is
generic(RISE, FALL: time := 0 ns);
port(A,B: in std_ulogic;
Sel: in std_ulogic;
Y: out std_ulogic);
end Mux; |
LRM 1.1.
Viz také:
Klíčové slovo: GENERIC
Klíčové slovo GENERIC se používá ve spojení s příkazem ENTITY. Deklarace pomocí příkazu GENERIC specifikuje statické hodnoty pro všechny těla
definované příkazem ARCHITECTURE směrem dolů. Jako například různé nastavení, doby zpoždění a jiné parametry.
Příklad:
generic(RISE, FALL: time := 0 ns); |
LRM 1.1.
Viz také:
Klíčové slovo: MOD
Klíčové slovo MOD je zbytek po dělení celých čísel.
Například: chceme zjistit jaky zbytek zůstane po dělení čísla 88 číslem 16.
Zápis provedeme takto:
-- Vstup = 88
Vystup <= Vstup mod 16;
--Vysledek je 8 |
Přibližná náhrada příkazu MOD: >
Vystup = Vstup – INT(Vstup/16)*16
Funkce INT je zahození desetinné části výsledku.
Příklad 1:
--hacesoft 31.7.2005
--prochazka.zde.cz
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;
entity demo is
Port(clk : in bit;
Vstup : in integer ;
Vystup : out integer );
end demo;
architecture telo of demo is
begin
process (clk)
begin
if clk='1' and clk'event then
Vystup <= Vstup mod 16;
end if;
end process;
end telo; |
LRM 7.2.
Viz také:
Klíčové slovo: PORT
Klíčové slovo PORT se používá ve spojením s příkazem ENTITY. PORTuž jak vyplývá ze samotného slova je jakýsi pomyslný „konektor“ pomocí
něho se spojují proudící data.
Příkaz PORT se zapisuje v tomto pořadí:
1. vyhrazené slovo PORT, následováno
a – seznamem deklarací signálu,
b – typem signálů.
Seznam signálů stejného významu i stejného typu se může zapisovat na jeden řádek ale pro větší přehlednost zápasu se provádí zápis na jeden
řádek jen signálů které logicky patří k sobě. V Příkladu 1 jsou vstupy A a B na jednom řádku ale vstup Select už k ním nepatří. I když se jedná
také o vstup. V tomto případě vstupy A a B si místo jednotlivých vstupů spíš zasloužili definovaní jako skupina signálů (Příklad 2).
Ale někdy se muže jevit jako výhodnější definování podle příkladu 1.
Typ signálu:
- při použití příkazu IN jsou data přivedená na port pouze ke čtení. S informacemi v těle definované příkazem ARCHITECTURE se může jakkoliv
nakládat ale nejdou měnit. Ale na vstupu definovaný příkazem ENTITY se tyto data zapisují.
- při použití příkazu OUT jsou data na portu pouze pro čtení. S informacemi v těle definované příkazem ARCHITECTURE se mohou do takto
definovaně proměnné pouze zapisovat. Ale na výstupu z ENTITY jsou tato data pouze pro čtení.
- při použití příkazu INOUT se jedná o kombinací příkazu IN a OUT. To znamená že takto definovaná proměnná je určena jak pro čtení kdekoliv tak
i pro zápis kdekoliv. Typickým příkladem takové proměnné je datová sběrnice (Příklad 3).
- při použití příkazu BUFFER je to podobné jako u příkazu INOUT s tím rozdílem že disponuje na výstupu záchytným registrem (Příklad 4).
Nasledován posledním parametrem který určuje zda se jedna o jeden „drát“ to se specifikuje pomocí slova BIT a nebo o skupinu signálů., to
se specifikuje pomocí slova STD_LOGIC_VECTOR a následován definicí rozsahu vzestupnou (příkaz TO) nebo sestupnou. (příkaz DOWNTO).
Příklad 1:
entity Mux is
port(Vstup_A, Vstup_B: in bit;
Select: in bit;
Vystup: out bit);
end Mux; |
Příklad 2:
entity Mux_1 is
port(Vstup: in std_logic_vector(1 downto 0);
Select: in bit;
Vystup: out bit);
end Mux_1; |
Příklad 3:
entity Transport is
port(data: inout std_logic_vector(7 downto 0);
data1: inout std_logic_vector(7 downto 0);
Dir: in bit);
end Transport; |
Příklad 4:
Obousměrný komunikační port
LRM 1.1.
Viz také:
Klíčové slovo: RANGE
Klíčové slovo RANGE určuje velikost proměnné. V příkladu je datový typ
integer omezen na hodnoty 0 až 8. To znamená že proměnná má čtyři bity.
Příkaz RANGE muže obsahovat vzestupnou i sestupnou deklaraci (RANGE 0 to 8; nebo RANGE 8 downto 0;).
Příklad:
--hacesoft 7.10.2005
--prochazka.zde.cz
--Ukázka příkazu RANGE.
--Ten způsobí že v proměnné typu range jsou přípustné hodnoty pouze 0 až 8!!!
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;
entity demo is
Port ( clk : in bit;
VstupA : in integer range 0 to 8;
VstupB : in integer range 0 to 8;
Vystup : out integer range 0 to 24);
end demo;
architecture telo of demo is
begin
process (clk)
variable c : integer range 0 to 9 :=2;
--promena C je inicializovana na hodnotu 2.
begin
if clk='1' and clk'event then
c := c + 1;
if c=9 then c := 0; end if;
Vystup <= VstupA + VstupB - c;
end if;
end process;
end telo; |
LRM 3.1.
Viz také:
Klíčové slovo: ROL
Klíčové slovo ROL je operace bitového posunu doleva. Bit který vypadne z levé části slova se objeví na pravé straně. Pokud nechcete rotovat se slovem dokola a zajímá vás jen posun doleva, co vypadne vlevo se ztratí použijte instrukci SLL.
Příklad 1:
--hacesoft 30.7.2005
--prochazka.zde.cz
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;
entity posuny is
Port (Vstup : in unsigned(7 downto 0);
Vystup : out unsigned(7 downto 0));
end posuny;
architecture behavioral of posuny is
begin
Vystup <= Vstup AND Vstup ROL 1;
end behavioral; |
Příklad 2:
Posuvné matematické operace
LRM 7.2.3.
Viz také:
Klíčové slovo: ROR
Klíčové slovo ROR je operace bitového posunu doprava. Bit který vypadne z pravé části slova se objeví na levé straně. Pokud nechcete rotovat se slovem dokola a zajímá vás jen posun doprava, co vypadne vpravo se ztratí použijte instrukci SRL.
Příklad 1:
--hacesoft 30.7.2005
--prochazka.zde.cz
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;
entity posuny is
Port (Vstup : in unsigned(7 downto 0);
Vystup : out unsigned(7 downto 0));
end posuny;
architecture behavioral of posuny is
begin
Vystup <= Vstup AND Vstup ROR 1;
end behavioral; |
Příklad 2:
Posuvné matematické operace
LRM 7.2.3.
Viz také:
Klíčové slovo: SIGNAL
Klíčové slovo SIGNAL deklaruje konkretní signál (jeden drát (signál) nebo skupinu stejných vodičů (sběrnice)) specifikovaného
druhu.
Deklarace signálu obsahuje vyhrazené slovo SIGNAL, jméno signálu, typ signálu, nepovinnou informaci druhu signálu (REGISTER nebo BUS) a
poslední specifikace která rovněž není povinná a to je počáteční hodnota signálu.
Signály deklarované uvnitř entity jsou viditelné pouze v korespondenční architektuře.
Poznámka: Signál nemůže být deklarován uvnitř procesu, procedury nebo funkce.
Příklad:
architecture ukazka of vzorek is
signal data: std_logic_vector(15 downto 0);
signal data1 : std_logic_vector(3 downto 0) REGISTER;
signal data2 : std_logic REGISTER ;
signal data3 : INOUT std_logic BUS;
signal data4 : IN std_logic;
signal prepinac : boolean := TRUE;
signal data5 : std_logic_vector(4 downto 0) := "11111";
signal data6 : std_logic_vector(63 downto 0):= x"0000000000000000";
signal data7 : std_logic := '1';
begin
---...
end ukazka; |
LRM 4.3.
Viz také:
Klíčové slovo: SLA
Klíčové slovo SLA je operace aritmetického posunu doleva.
Příklad:
--hacesoft 30.7.2005
--prochazka.zde.cz
--demonstrace rozdilu instrukci SLA, SLL a ROL. Pro posuny doprava je všechno obraceně.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;
entity posuny is
Port(clk : in bit;
Zapis : in bit;
Vstup : in BIT_VECTOR(7 downto 0);
VystupSLA : out BIT_VECTOR(7 downto 0);
VystupSLL : out BIT_VECTOR(7 downto 0);
VystupROL : out BIT_VECTOR(7 downto 0));
end posuny;
architecture behavioral of posuny is
begin
process (clk)
variable promennaSLA : BIT_VECTOR (7 downto 0);
variable promennaSLL : BIT_VECTOR (7 downto 0);
variable promennaROL : BIT_VECTOR (7 downto 0);
begin
if clk='1' and clk'event then
if Zapis='1' then
promennaSLA := vstup;
promennaSLL := vstup;
promennaROL := vstup;
end if;
promennaSLA := promennaSLA SLA 1;
promennaSLL := promennaSLL SLL 1;
promennaROL := promennaROL ROL 1;
VystupSLA <= promennaSLA;
VystupSLL <= promennaSLL;
VystupROL <= promennaROL;
end if;
end process;
end behavioral; |
Následující obrázek ukazuje činnost kódu v příkladu 1. Kde jsou dobře patrny rozdíly instrukcí SLA, SLL a ROL.
LRM 7.2.3.
Viz také:
Klíčové slovo: SLL
Klíčové slovo SLL je operace logického posunu doleva. Bit který vypadne z levé části slova se už neobjeví na pravé straně. Pokud chcete rotovat slovo dokola použijte instrukci ROL.
Příklad 1:
--hacesoft 30.7.2005
--prochazka.zde.cz
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;
entity posuny is
Port (Vstup : in unsigned(7 downto 0);
Vystup : out unsigned(7 downto 0));
end posuny;
architecture behavioral of posuny is
begin
Vystup <= Vstup AND Vstup SLL 1;
end behavioral; |
Příklad 2:
Posuvné matematické operace
LRM 7.2.3.
Viz také:
Klíčové slovo: SRA
Klíčové slovo SRA je operace aritmetického posunu doprava.
Příklad:
--hacesoft 30.7.2005
--prochazka.zde.cz
--demonstrace rozdilu instrukci SRA, SRL a ROR. Pro posuny doprava je všechno obraceně.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;
entity posuny is
Port(clk : in bit;
Zapis : in bit;
Vstup : in BIT_VECTOR(7 downto 0);
VystupSRA : out BIT_VECTOR(7 downto 0);
VystupSRL : out BIT_VECTOR(7 downto 0);
VystupROR : out BIT_VECTOR(7 downto 0));
end posuny;
architecture behavioral of posuny is
begin
process (clk)
variable promennaSRA : BIT_VECTOR (7 downto 0);
variable promennaSRL : BIT_VECTOR (7 downto 0);
variable promennaROR : BIT_VECTOR (7 downto 0);
begin
if clk='1' and clk'event then
if Zapis='1' then
promennaSRA := vstup;
promennaSRL := vstup;
promennaROR := vstup;
end if;
promennaSRA := promennaSRA SRA 1;
promennaSRL := promennaSRL SRL 1;
promennaROR := promennaROR ROR 1;
VystupSRA <= promennaSRA;
VystupSRL <= promennaSRL;
VystupROR <= promennaROR;
end if;
end process;
end behavioral; |
Následující obrázek ukazuje činnost kódu v příkladu 1. Kde jsou dobře patrny rozdíly instrukcí SRA, SRL a ROR.
LRM 7.2.3.
Viz také:
Klíčové slovo: SRL
Klíčové slovo SRL je operace logického posunu doprava. Bit který vypadne z pravé části slova se už neobjeví na levé straně. Pokud chcete rotovat slovo dokola použijte instrukci ROR.
Příklad 1:
--hacesoft 30.7.2005
--prochazka.zde.cz
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;
entity posuny is
Port (Vstup : in unsigned(7 downto 0);
Vystup : out unsigned(7 downto 0));
end posuny;
architecture behavioral of posuny is
begin
Vystup <= Vstup AND Vstup SRL 1;
end behavioral; |
Příklad 2:
Posuvné matematické operace
LRM 7.2.3.
Viz také:
Klíčové slovo: THEN
Klíčové slovo THEN je nedílnou součásti příkazu IF.
Příklad:
--hacesoft 8.10.2005
--prochazka.zde.cz
--Ukázka příkazu THEN.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;
entity demo is
Port ( clk : in bit;
Vystup : out integer range 0 to 8);
end demo;
architecture telo of demo is
begin
process (clk)
variable c : integer range 9 downto 0 :=3;
--promena C je inicializovana na hodnotu 3.
begin
if clk='1' and clk'event then
c := c + 1;
if c=9 then c := 0; end if;
Vystup <= c;
end if;
end process;
end telo; |
Viz také:
Klíčové slovo: TO
Klíčové slovo to je vzestupná deklarace rozsahu. Nejprve se definuje dolní mez, nesledován příkazem to a nakonec se definuje horní mez. U klíčového slova downto je tomu přesně naopak!
LRM 6.5.
Viz také:
Klíčové slovo: TRANSPORT
Klíčové slovo TRANSPORT je deklarace zpoždění, kde se přenesou všechny data s definovaným zpoždění.
Příklad:
--hacesoft 7.10.2005
--prochazka.zde.cz
--Ukázka příkazu TRANSPORT.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;
entity demo is
Port ( clk : in bit;
Vystup : out integer range 0 to 8);
end demo;
architecture telo of demo is
begin
process (clk)
variable c : integer range 0 to 9 :=0;
begin
if clk='1' and clk'event then
c := c + 1;
if c = 9 then c := 0; end if;
Vystup <= transport c after 10 ps;
end if;
end process;
end telo; |
Následující obrázek ukazuje učinnost prikazu TRANSPORT.
LRM 8.4.
Viz také:
Klíčové slovo: VARIABLE
Klíčové slovo VARIABLE deklaruje proměnnou specifikovaného typu.
Syntax: Klíčove slovo VARIABLE nasleduje název proměnné, typ proměnné a velikost proměnné a volitelní parametr určující počáteční stav proměnné.
Příklad:
VARIABLE A : INTEGER RANGE 0 TO 1024 : = 0; |
Proměnné A, typu integer s rozsahem 1024 (velikost je 9. bitu) a počáteční hodnotou 0.
Proměnná může být deklarovaná uvnitř procesu, procedury a nebo funkce.
Proměnná nemůže být typu soubor. Proměnné deklarované uvnitř procesu si zachovávají svoji hodnotu při dalším průchodu procesem.
Opačně tomu je u proměnných deklarovaných uvnitř funkce a procedury. Ty jsou vždy inicializovány při jejich volaní.
Příklad1:
--hacesoft 9.10.2005
--prochazka.zde.cz
--Ukázka příkazu VARIABLE.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;
entity demo is
Port ( clk : in bit;
Vystup : out integer range 0 to 7);
end demo;
architecture telo of demo is
begin
process (clk)
variable a : integer range 0 to 8 :=0;
begin
if clk='1' and clk'event then
a := a + 1;
if a = 8 then a := 0; end if;
Vystup <= a;
end if;
end process;
end telo; |
LRM 4.3.
Viz také:
Klíčové slovo: WAIT
Klíčové slovo WAIT dočasně pozastaví proces do doby:
- WAIT FOR: čekat dokud neuplyne požadovaný čas.
- WAIT UNTIL: nasledován Booleovským výrazem. Čekat dokud výraz není pravda (true);
- WAIT ON: nasledován citlivostním seznamem. Čekat dokud nenastane událost uvedena v citlivostním seznamu.
Pokud je příkaz WAIT použit uvnitř procesu, tak ten už nesmí obsahovat citlivostní seznam.
Viz také:
|
Komentáře
http://www.prochazka.profitux.cz/index.php?clanek=vhdl/procesy
www.prochazka.profitux.cz/index.php?clanek=vhdl/definice_zpozdeni
atd...
PS: téměř nečitelná kontrola s nemožnosti změny obrázku
pro fatální nedostatek času je téměř všechna aktivita zastavena. Omlouvám se, ale pravděpodobně dokumentaci už nikdy nedodělám. Odkazy jsou připraveny pro postupné dodělávání dokumentace.
Domovský web: www.prochazka.zde.cz