Podstawy Sterowania Logicznego - Język
VHDL - wprowadzenie
Podstawy sterowania
logicznego
Język VHDL – wprowadzenie
Języki opisu sprzętu
HDL = Hardware Description Language
Języki opisu sprzętu (HDL) to języki
wysokiego poziomu służące do opisu
działania układów cyfrowych.
Po skompilowaniu kodu źródłowego w
języku HDL, środowiska programistyczne
pozwalają na weryfikację symulacyjną
projektu oraz generują plik do
zaprogramowania układ programowalnego.
Podstawy Sterowania Logicznego 2011/12, ©ZM
2/18
Języki opisu sprzętu
Najpopularniejsze języki HDL to:
ABEL – opracowany w firmie Data I/O,
VHDL – standard IEEE 1076, bazujący na
języku Ada,
VERILOG – standard IEEE1364, bazujący
na języku C.
Język ABEL stosuje się najczęściej do projektowa-nia układów SPLD (GAL), języki VHDL i VERILOG –
do układów CPLD i FPGA.
Podstawy Sterowania Logicznego 2011/12, ©ZM
3/18
Elektrotechnika I st., rok 3, moduł C
1
Podstawy Sterowania Logicznego - Język
VHDL - wprowadzenie
z
w
ud tó
ła
n
k
e
hc
u
m
y
ia
le
ln
n
e
a
a
m
w
w
ie
o
to
n
m
k
ta
ra
je
s
g
y
ro
rz
rop
l p
o
k
k
y
y
C
w
Podstawy Sterowania Logicznego 2011/12, ©ZM
4/18
Język VHDL
VHDL = Very (High Speed Integrated Circuit) Hardware Description Language
Opis układu w języku VHDL składa się modułów (jednostek projektowych), które zawierają:
deklarację jednostki (entity),
deklarację i opis architektury (architecture) Instrukcje zawarte w opisie architektury są instrukcjami współbieżnymi, co oznacza, że ich wyniki są przypisane do tego samego momentu czasu niezależnie od kolejności ich umieszczenia w programie.
Podstawy Sterowania Logicznego 2011/12, ©ZM
5/18
Język VHDL
Obiekty języka
Sygnały – obiekty będące funkcjami czasu.
signal ss : bit := ’1’;
Zmienne – obiekty nie będące funkcjami
czasu, które można stosować procesu lub
podprogramu, do pamiętania wyników
pośrednich.
variable vv : integer range 0 to 200 := 100;
Stałe – obiekty przypisujące nazwom stałe wartości.
constant cc : integer := 10;
Podstawy Sterowania Logicznego 2011/12, ©ZM
6/18
Elektrotechnika I st., rok 3, moduł C
2
Podstawy Sterowania Logicznego - Język
VHDL - wprowadzenie
Język VHDL
Typy proste
Całkowity – integer
Zakres: –(231-1) ÷ +(231-1)
Rzeczywisty – real
Zakres gwarantowany: –(1038) ÷ +1038
Czasowy – time
Zakres: 0 ÷ (231-1) fs, ps, ns, us, ms, sec, min, hr
Wyliczeniowe
Podstawy Sterowania Logicznego 2011/12, ©ZM
7/18
Język VHDL
Typy proste wyliczeniowe (standardowe)
Bitowy – bit
Wartości: (’0’, ’1’)
Boolowski – boolean
Wartości: (false, true)
Znakowy – character
Wartości: (…, ’0’, …, ’9’, ’A’, …, ’Z’, ’a’, …, ’z’) Podstawy Sterowania Logicznego 2011/12, ©ZM
8/18
Język VHDL
Typy proste wyliczeniowe (standardowe) – cd
Logiczne – std_ulogic, std_logic
Wartości:
’U’ – niezainicjowany,
’X’ – wymusza stan nieznany,
’0’ – wymusza stan 0,
’1’ – wymusza stan 1,
’Z’ – stan wysokiej impedancji,
’W’ – dla odczytu – słaby stan nieznany,
’L’ – dla odczytu – słaby stan 0,
’H’ – dla odczytu – słaby stan 1,
’ –’ – stan nieokreślony,
Podstawy Sterowania Logicznego 2011/12, ©ZM
9/18
Elektrotechnika I st., rok 3, moduł C
3
Podstawy Sterowania Logicznego - Język
VHDL - wprowadzenie
Język VHDL
Typy złożone
Tablice – array – zbiór elementów tego samego typu
type WEWY is array (0 to 15) of bit;
type BYTE is array (7 downto 0) of bit;
variable MEMORY : array (0 to 1023) of byte;
Rekordy – record – zbiór elementów różnych typów
type DATA id record
D : integer range 1 to 31;
M : integer range 1 to 12;
R : integer range 1 to 3000;
end record;
Podstawy Sterowania Logicznego 2011/12, ©ZM
10/18
Język VHDL
Instrukcje współbieżne
przypisania do sygnału (<=) – podstawowe, warunkowe (when-else), selektywne (with-select);
procesu sekwencyjnego (process),
wywołania procedury,
łączenia komponentów (port map),
powielania (generate),
blokowa (block)
Podstawy Sterowania Logicznego 2011/12, ©ZM
11/18
Język VHDL
Funkcje i procedury
Funkcja
Rodzaj podprogramu zwracający jedną wartość, który wywołuje się w wyrażeniach
Procedura
Rodzaj podprogramu, który może zwracać więcej niż jeden wynik. Procedura może być wywołana jako instrukcja współbieżna w ciele architektury lub sekwencyjna w obrębie procesu lub innego podprogramu.
Podstawy Sterowania Logicznego 2011/12, ©ZM
12/18
Elektrotechnika I st., rok 3, moduł C
4
Podstawy Sterowania Logicznego - Język
VHDL - wprowadzenie
Język VHDL
Przykład 1 – generator zegara 10 MHz
entity zegar is
generic( op : time := 50 ns );
port( Q : inout std_logic := ’1’);
end zegar;
architecture arch1 of zegar is
begin
Q <= not Q after op;
end arch1;
Podstawy Sterowania Logicznego 2011/12, ©ZM
13/18
Język VHDL
Przykład 2 – multiplekser 2-wejściowy
entity mux2 is
port( A, B, S : in std_logic;
Q : out std_logic );
end mux2;
architecture arch2 of mux2 is
begin
Q <= A when S = ’0’ else B;
end arch2;
Podstawy Sterowania Logicznego 2011/12, ©ZM
14/18
Język VHDL
Przykład 3 – multiplekser 4-wejściowy
type BIT2 is array (1 downto 0) of std_logic; entity mux4 is
port( A, B, C, D : in std_logic;
ADR : in BIT2;
Q : out std_logic );
end mux4;
architecture arch3 of mux4 is
begin
with ADR select
Q <= A when ADR = ”00”,
Q <= B when ADR = ”01”,
Q <= C when ADR = ”10”,
Q <= D when ADR = ”11”;
end arch3;
Podstawy Sterowania Logicznego 2011/12, ©ZM
15/18
Elektrotechnika I st., rok 3, moduł C
5
Podstawy Sterowania Logicznego - Język
VHDL - wprowadzenie
Język VHDL
Przykład 4 – funkcja – test parzystości
type BYTE is array (7 downto 0) of bit;
function PARITY8( x : BYTE ) return boolean is variable q : bit;
begin
q := ’1’;
for i in 0 to 7 loop
q := q xor x( i );
end loop;
return q;
end PARITY8
Podstawy Sterowania Logicznego 2011/12, ©ZM
16/18
Język VHDL
Przykład 5 – procedura – przerzutnik JK
type BIT2 is array (1 downto 0) of std_logic; procedure JK1( signal CLK, J, K, R, S : in std_logic; signal Q : inout std_logic;
signal NQ : out std_logic ) is
variable JK : BIT2;
variable reclk : boolean;
-- cd na następnym slajdzie
Podstawy Sterowania Logicznego 2011/12, ©ZM
17/18
Język VHDL
Przykład 5 – procedura – przerzutnik JK – cd begin
JK := J&K;
reclk := rising_edge( CLK );
if R = ’1’ then Q <= ’0’;
elsif S = ’1’ then Q <= ’1’
elsif re then
case JK is
when ”10” => Q <= ’1’;
when ”01” => Q <= ’0’;
when ”11” => Q <= not Q;
when others => null;
end case;
end if;
QN <= not Q;
end JK1;
Podstawy Sterowania Logicznego 2011/12, ©ZM
18/18
Elektrotechnika I st., rok 3, moduł C
6