 
I
T
P
W
ZPT
1
Języki opisu 
sprzętu:
 Firmowe -
Najpopularniejszym i z opracowanym standardem
jest - VHDL
Elementy języka VHDL
 Uniwersalne
-
(AHDL,
ABEL)
stosowane wyłącznie
w systemach danej 
firmy
    stosowane coraz powszechniej 
    w różnych systemach, 
równolegle
z językami firmowymi
(VHDL, Verilog)
 
I
T
P
W
ZPT
2
Język VHDL
V
ery high speed integrated circuit
H
ardware
D
escription
L
anguage (
VHDL
)
przemysłowy standard języka HDL
Kolejne wersje normy IEEE Std 1076: 1987, 1993
Powszechnie stosowany w 
specyfikacjach 
układów cyfrowego 
przetwarzania sygnałów:
 
I
T
P
W
ZPT
3
Język VHDL
 Zawiera użyteczne konstrukcje semantyczne
umożliwiające zwięzłą specyfikację złożonych 
układów cyfrowych
 Projekt może być opisany hierarchicznie (na
wielu poziomach)
 Możliwe jest korzystanie z biblioteki gotowych
elementów i tworzenie podukładów (tzw. 
komponentów)
 
I
T
P
W
ZPT
4
Jednostka projektowa
DESIGN ENTITY
JEDNOSTKA PROJEKTOWA reprezentuje fragment układu 
cyfrowego;
ma dobrze zdefiniowane wejścia i wyjścia; spełnia ściśle 
określoną funkcję
Może mieć dowolny stopień złożoności – od prostej bramki do 
systemu!!!
ARCHITECTURE 
BODY
FUNKCJE
I DZIAŁANIE
Blok architektury
ENTITY 
DECLARATION
WEJŚCIE/WYJŚCIE
PARAMETRY
Deklaracji jednostki
 
I
T
P
W
ZPT
5
Specyfikacja jednostki
Specyfikacja
logiczna
Te same nazwy
Deklaracje
We/Wy
Sekcja 
specyfika
cji
To samo 
co 
w pliku 
halfadd.v
hd
entity HALFADD is
port (A,B : in bit;
      SUM, CARRY : out bit);
end HALFADD;
architecture BEHAVE of HALFADD is 
begin
    SUM <= A xor B;
    CARRY <= A and B;
end BEHAVE;
A
B
A
B
SUM
CARRY
Halfadd:
 
I
T
P
W
ZPT
6
Jednostka projektowa języka
VHDL
entity
architecture
architecture
architecture
Komunikacja 
z otoczeniem
Działanie układu
 
I
T
P
W
ZPT
7
Deklaracja jednostki
entity HALFADD is
port (A,B : in bit;
SUM, CARRY : out bit);
end HALFADD;
Deklaracja 
wyprowadzeń: 
 nazwy sygnałów
 tryby
 typy danych 
A
B
SUM
CARRY
Komunikacja 
z otoczeniem
 
I
T
P
W
ZPT
8
Tryby wyprowadzeń
entity HALFADD is
port (A,B : in bit;
SUM, CARRY : out bit);
end HALFADD;
Tr
y
b
y
p
o
rt
u
•in - wejściowy
•out - wyjściowy
•inout - dwukierunkowy
•buffer - wyjściowy z  możliwością 
odczytu
Tryby
 
I
T
P
W
ZPT
9
Tryb
Tryb
In
In
In
Out
Buffer
Out
Inout
Tryby wyprowadzeń…
 
I
T
P
W
ZPT
10
Typ danych
entity HALFADD is
port (A,B : in bit;
SUM, CARRY : out bit);
end HALFADD;
Typy
danych:
Typ danych
bit, bit_vector, integer, 
Boolean 
 
I
T
P
W
ZPT
11
Blok 
architektury
 
architecture BEHAVE of HALFADD is 
begin
    SUM <= A xor B;
    CARRY <= A and B;
end BEHAVE; 
Style specyfikacji
  funkcjonalny (behavioralny)
  przepływ danych (dataflow)
  strukturalny
Działanie lub
budowa
A
B
SUM
CARRY
Architektura opisuje sposób działania jednostki
(entity) lub jej budowę (strukturę).
VHDL wyraźnie odróżnia opis działania od opisu
struktury
 
I
T
P
W
ZPT
12
Style 
specyfikacji
behavioralny
Specyfikowane jest działanie układu bez podania 
szczegółów realizacyjnych
  przepływ danych (dataflow)
Opis w postaci tzw. instrukcji przypisania 
reprezentowanych wyrażeniami logicznymi
  strukturalny
Specyfikowana jest budowa układu. W opisie podane 
są komponenty oraz połączenia między nimi.
 
I
T
P
W
ZPT
13
Deklaracja jednostki
entity nazwa_jednostki is
end nazwa_jednostki;
Paramery ogólne (generics) umożliwiają 
projektowanie parametryzowanych wzorców 
układów
deklaracja wyprowadzeń: port 
(lista)
deklaracja parametrów ogólnych: generic 
(lista)
 
I
T
P
W
ZPT
14
Blok architektury
architecture nazwa_arch of 
nazwa_jednostki is
begin
end nazwa_arch;
Definicje i deklaracje:
(typów, podtypów, stałych, 
sygnałów, komponentów, 
konfiguracji)
– instrukcje przypisania
– procesy (instrukcje 
sekwencyjne)
– komponenty
 
I
T
P
W
ZPT
15
Moduły systemowe wspomagające 
specyfikację…
Pakiet
jest modułem do deklarowania i definiowania
obiektów danych, typów, komponentów, funkcji i 
procedur przeznaczonych do stosowania w wielu 
jednostkach projektowych
.
…dostępne dla wielu jednostek projektowych 
to  
biblioteki i pakiety.
Biblioteka
to zbiór zanalizowanych pakietów i
jednostek projektowych przechowywanych w danym 
systemie operacyjnym i dostępnych bezpośrednio wg 
nazwy logicznej (nie jest to nazwa katalogu w tym 
systemie). 
 
I
T
P
W
ZPT
16
Dostęp do biblioteki i jej
pakietów…
LIBRARY library_name;
USE 
library_name.package_name.all;
Dostęp do pakietu osiąga się deklaracją:
Biblioteka systemowa 
IEEE
 
I
T
P
W
ZPT
17
Biblioteka systemowa IEEE
IEEE to najważniejsza biblioteka zawierająca 
pakiety ze standardowymi typami danych.  
Odwołanie do tej biblioteki a także polecenie use 
umożliwiające dostęp do standardowego pakietu: 
Std_Logic_1164 musi poprzedzać każdą 
jednostkę projektową.
LIBRARY IEEE;
use IEEE.Std_Logic_1164.all; 
 
I
T
P
W
ZPT
18
Elementy strukturalne języka
VHDL
 Słowa kluczowe
 Identyfikatory
 Obiekty danych
 Operatory
 Atrybuty
 Instrukcje
 
I
T
P
W
ZPT
19
Obiekty danych
Dane liczbowe i alfanumeryczne są 
przechowywane w obiektach danych. Z 
punktu widzenia syntezy wyróżnia się trzy 
klasy obiektów:
 sygnał – signal
 zmienne – variable
 stałe – constant
Odpowiednikiem sprzętowym sygnału jest ścieżka
w układzie scalonym. 
Zmienna nie ma odpowiednika sprzętowego i służy 
do obliczeń na wyższym poziomie abstrakcji.
Klasa deklarowana jest przed nazwą obiektu 
np.:
signal s1, s2 : bit;
variable u: integer range 0 to 127;
 
I
T
P
W
ZPT
20
Pojęcie typu danych
Język VHDL jest silnie zorientowany na typy 
danych. 
Każdy obiekt musi mieć zdefiniowany typ i może 
przechowywać dane tylko tego typu.
signal signal_name : type_name ;
Przy operacji przypisania sygnałów, typy danych 
po każdej stronie operatora przypisania muszą 
być zgodne
variable nazwa_zm: typ_zm [ograniczenia]
constant nazwa : typ := wartość;
 
I
T
P
W
ZPT
21
Typy danych
BIT, BIT_VECTOR,
STD_LOGIC,
STD_LOGIC_VECTOR
,
(STD_ULOGIC),
SIGNED, UNSIGNED, INTEGER,
ENUMERATION, BOOLEAN
Wyróżnia się 10 typów danych:
 
I
T
P
W
ZPT
22
Standardowe typy danych
STD_LOGIC, STD_LOGIC_VECTOR
LIBRARY IEEE;
use IEEE.Std_Logic_1164.all; 
STD_LOGIC: 0, 1, Z, –, L, H, U, X, W
STD_LOGIC_VECTOR jest tablicą obiektów z STD_LOGIC
 
I
T
P
W
ZPT
23
Składnia
obiekt’atrybut[(parametr)];
Atrybuty
Dostarczają dodatkowych informacji o 
obiektach (np.. sygnałach, zmiennych, typach 
lub komponentach) 
If Clock’event and Clock = ‘1’ then Q := D;
Najczęściej stosowany atrubut:
‘event – równy TRUE, gdy zachodzi zmiana wartości sygnału,
 
I
T
P
W
ZPT
24
Instrukcje
Współbieżne (Concurrent assignment statement)
Sekwencyjne (Sequential assignment statement)
WSPÓŁBIEŻNE I 
SEKWENCYJNE
 
I
T
P
W
ZPT
25
Instrukcje
Współbieżne:
Zachowanie układu jest niezależne od kolejności 
instrukcji przyporządkowania sygnałów.
Stosowane w specyfikacji typu „przepływ danych”
(dataflow description).
Sekwencyjne:
Instrukcje sekwencyjne są stosowane w specyfikacji behawioralnej
(behavioral description).
Przede wszystkim w tzw. procesach (process).
Porządek zapisu instrukcji sekwencyjnych zmienia działanie układu.
 
I
T
P
W
ZPT
26
(Concurrent Signal Assignment 
Statements) 
podstawowe przypisanie do sygnału
     (simple signal assignment statement)
   warunkowe przypisanie do sygnału
      (conditional signal assignmenet statement)
   selektywne przypisanie do sygnału
      (selected signal assignment statement)
– when – else
– with – select
Współbieżne instrukcje
przypisania sygnału
 
I
T
P
W
ZPT
27
Instrukcja podstawowa
Składnia:
signal_name <= wyrażenie;
boolowskie lub
arytmetyczne
Typowe zastosowanie:
Realizacje układów kombinacyjnych
 
I
T
P
W
ZPT
28
Przykład – MUX 4:1
library ieee;
use ieee.std_logic_1164.all;
entity mux is port (
a, b, c, d : in std_logic ;
s: in std_logic_vector (1 downto
0) ;
y: out std_logic ) ;
end mux;
d
s
s
c
s
s
b
s
s
a
s
s
y
0
1
0
1
0
1
0
1
a
b
c
d
M U X
S S
1
0
y
 
I
T
P
W
ZPT
29
Przykład – MUX 4:1
library ieee;
use ieee.std_logic_1164.all;
entity mux is port (
a, b, c, d : in std_logic ;
s: in std_logic_vector (1
downto 0) ;
x: out std_logic ) ;
end mux;
architecture  archmux  of  mux  is
begin
x <= (a and not(s(1)) and not(s(0)))
or   (b  and  not(s(1))  and  (s(0))
or   (c  and  (s(1)  and  not(s(0)))
or   (d  and  (s(1)  and  (s(0));
end archmux;
a
b
c
d
M U X
S S
1
0
y
 
I
T
P
W
ZPT
30
Przykład – MUX grupowy 4:1
a = (a3,a2,a1,a0)
b = (b3,b2,b1,b0)
…………………..
y = (y3,y2,y1,y0)
library ieee;
use ieee.std_logic_1164.all;
entity mux is port (
x:
out std_logic ) ;
a, b, c, d : in std_logic ;
s:
in std_logic_vector (1 downto 0) ;
end mux;
a
b
c
d
M U X
S S
1
0
y
 
I
T
P
W
ZPT
31
architecture  archmux  of  mux  is
begin
x (3) <=
(a(3) and not(s(1)) and
not(s(0)))
or   (b(3)  and  not(s(1))  and  (s(0))
or   (c(3)  and  (s(1)  and  not(s(0)))
or   (d(3)  and  (s(1)  and  (s(0));
x (2) <=
(a(2) and not(s(1)) and
not(s(0)))
or   (b(2)  and  not(s(1))  and  (s(0))
or   (c(2)  and  (s(1)  and  not(s(0)))
or   (d(2)  and  (s(1)  and  (s(0));
x (1) <= (a(1) and not(s(1)) and not(s(0)))
or   (b(1)  and  not(s(1))  and  (s(0))
or   (c(1)  and  (s(1)  and  not(s(0)))
or   (d(1)  and  (s(1)  and  (s(0));
x (0) <= (a(0) and not(s(1)) and not(s(0)))
or   (b(0)  and  not(s(1))  and  (s(0))
or   (c(0)  and  (s(1)  and  not(s(0)))
or   (d(0)  and  (s(1)  and  (s(0));
end archmux;
Przykład – MUX grupowy 4:1
 
I
T
P
W
ZPT
32
signal_name <= value_a when condition1 else
value_b when condition2 else
value_c when condition3 else ...
value_x;
Składnia:
Wyrażenie
boolowskie
Instrukcja warunkowa - when-
else
 
I
T
P
W
ZPT
33
Przykład – MUX 4:1
library ieee;
use ieee.std_logic_1164.all;
entity mux is port (
a, b, c, d : in
s: in std_logic_vector (1
downto 0) ;
y: out
end mux;
architecture  archmux  of  mux  is
begin
y   <=  awhen  (s  =  ”00”)  else
            bwhen  (s  =  ”01”)  else
c
when (s = ”10”)
else
d;
end archmux;
Dla uzyskania MUX 
grupowego wystarczy 
zmienić tylko typ 
zmiennych w 
deklaracji
std_logic_vector (3 downto 0);
std_logic_vector (3  downto  
0));
std_logic ;
std_logic ) ;
 
I
T
P
W
ZPT
34
with sel_sig select
signal_name <= value_a when value1_of_sel_sig ,
value_b when value2_of_sel_sig ,
value_c when value3_of_sel_sig , ...
value_x when last_value_of_sel_sig;
Składnia:
Zmienna wielowartościowa
Instrukcja selektywna - with-
select
Można określać kilka wartości
lub zakres
Wartości nie mogą się
powtarzać
Przykładzik:
with INT_A select
Z <= A when 0,
B when 1 to 3,
C when 4 | 6 |
8,
D when others;
 
I
T
P
W
ZPT
35
Przykład – MUX 4:1
architecture archmux of mux is
begin
with s select
     y <= a when ”00”,
              b when ”01”,
              c when ”10”,
              d when others;
end archmux;
Dla uzyskania MUX 
grupowego 
wystarczy zmienić 
tylko typ zmiennych 
w deklaracji
library ieee;
use ieee.std_logic_1164.all;
entity mux is port (
a, b, c, d : in
s: in std_logic_vector (1
downto 0) ;
y: out
end mux;
std_logic_vector (3 downto 0);
std_logic_vector (3  downto  
0));
std_logic ;
std_logic ) ;
 
I
T
P
W
ZPT
36
Ostrzeżenie przed pochopnym
wnioskiem
Można podać wiele przykładów, w których
zastosowanie instrukcji podstawowej
prowadzi do znacznie lepszej implementacji
Jednym z nich jest komparator
 
I
T
P
W
ZPT
37
Komparator
A
n
B
n
K
„1 z 3”
A < B
A = B
A > B
 
I
T
P
W
ZPT
38
Komparator
k
k
k
b
a
i
0
0
1
2
3
1
1
2
3
2
2
3
3
3
b
a
i
i
i
b
a
i
i
b
a
i
b
a
B
A
B
A
gt
eq 
A = a
3
a
2
a
1
a
0
B =
b
3
b
2
b
1
b
0
A > B =
A < B =
A eq B = 
i
3
i
2
i
1
i
0
i
0
i
1
i
2
i
3
a
3
b
3
a
2
b
2
a
1
b
1
a
0
b
0
 
I
T
P
W
ZPT
39
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY compare_8bit IS
PORT (A, B:
IN STD_LOGIC_VECTOR(7 DOWNTO 0);
AeqB, AgtB, AltB: OUT STD_LOGIC );
END compare_8bit;
ARCHITECTURE Behavior OF compare_8bit IS
BEGIN
AeqB <= '1' WHEN A = B ELSE '0';
AgtB <= '1' WHEN A > B ELSE '0';
AltB <= '1' WHEN A < B ELSE '0';
END Behavior;
Komparator wersja 1
 
I
T
P
W
ZPT
40
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY compare_2_8bit IS
PORT (a7,a6,a5,a4,a3,a2,a1,a0:
IN STD_LOGIC;
b7,b6,b5,b4,b3,b2,b1,b0:
IN STD_LOGIC;
AeqB, AgtB, AltB:
OUT STD_LOGIC);
END compare_2_8bit;
ARCHITECTURE Behavior OF compare_2_8bit IS
SIGNAL i7,i6,i5,i4,i3,i2,i1,i0:
STD_LOGIC;
SIGNAL AequalB,AgreaterB,AlesserB: STD_LOGIC;
BEGIN
i7 <= NOT (a7 XOR b7);
i6 <= NOT (a6 XOR b6);
i5 <= NOT (a5 XOR b5);
i4 <= NOT (a4 XOR b4);
i3 <= NOT (a3 XOR b3);
i2 <= NOT (a2 XOR b2);
i1 <= NOT (a1 XOR b1);
i0 <= NOT (a0 XOR b0);
Komparator wersja 2
 
I
T
P
W
ZPT
41
AequalB <= i7 AND i6 AND i5 AND i4 AND i3 AND i2 AND i1 AND i0;
AgreaterB <= (a7 AND (not b7)) OR (i7 AND a6 AND (not b6)) 
OR (i7 AND i6 AND a5 AND (not b5)) 
OR (i7 AND i6 AND i5 AND a4 AND (not b4)) 
OR (i7 AND i6 AND i5 AND i4 AND a3 AND (not b3)) 
OR (i7 AND i6 AND i5 AND i4 AND i3 AND a2 AND (not b2)) 
OR (i7 AND i6 AND i5 AND i4 AND i3 AND i2 AND a1 AND (not b1)) 
OR (i7 AND i6 AND i5 AND i4 AND i3 AND i2 AND i1 AND a0 AND 
(not b0));
AlesserB <= NOT (AequalB OR AgreaterB);
AeqB <= AequalB;
AgtB <= AgreaterB;
AltB <= AlesserB;
END Behavior;
Komparator wersja 2 c.d.
 
I
T
P
W
ZPT
42
Wersja 1:
MAX 7000: 48 makrokomórek, 27 
expanderów
FLEX:
20 komórek
Wersja 2:
MAX 7000:  32 makrokomórki, 15 
expanderów 
FLEX:          13 komórek
Specyfikacja za pomocą 
instrukcji podstawowej 
prowadzi do dużo lepszej 
implementacji!!!
Realizacje komparatora
 
I
T
P
W
ZPT
43
Instrukcje sekwencyjne
Instrukcje sekwencyjne są stosowane w 
specyfikacji behawioralnej (behavioral 
description) 
Przede wszystkim w tzw. procesach 
(process)
Proces
Instrukcja IF
Instrukcja CASE
 
I
T
P
W
ZPT
44
Proces
Name :
PROCESS (sensitivity_list)
BEGIN
Instrukcja sekwencyjna #1
Instrukcja sekwencyjna #2
.......
Instrukcja sekwencyjna # N
END PROCESS
name
;
Składnia:
Process ( )
begin
..
end process
Lista czułości
Instrukcje sekwencyjne są 
wykonywane kolejno
jedna po drugiej
Etykieta jest opcjonalna
 
I
T
P
W
ZPT
45
 Konstrukcja wykonywana równolegle
 Występuje wewnątrz architektury
 Zawiera opis behawioralny
 Instrukcje wewnętrzne wykonywane są 
sekwencyjnie
 Zawiera:
listę czułości (ang. sensitivity list); 
jest to lista sygnałów, których zmiana powoduje 
aktywację procesu
Procesy
 
I
T
P
W
ZPT
46
if warunek then
sekwencja_instrukcji1
{elsif warunek then
sekwencja_instrukcji2 }
[else
sekwencja_instrukcji3]
end if ;
 Jest to instrukcja sekwencyjna
 Część elsif może wystąpić dowolną liczbę 
razy
 Część else nie musi wystąpić
 Może być zagnieżdżana
 Składnia:
Instrukcja warunkowa if then
else
 
I
T
P
W
ZPT
47
 Instrukcja sekwencyjna
 Podobna do instrukcji with select
 Można określać kilka wartości lub zakres
 Wartości nie mogą się powtarzać
 Składnia (przykład):
case zm_wielow is
    when wybór1 =>      sekwencja1_instrukcji ;
    when wybór2 =>      sekwencja2_instrukcji ;
   [when others  =>    sekwencja3_instrukcji ; ]
end case;
Instrukcja wyboru - case
 
I
T
P
W
ZPT
48
entity mux is port(
 a, b, c, d: in bit;
 s: in bit_vector(1 downto 0);
y: out bit);
end mux;
architecture archmux1 of mux is
begin
mux4_1: process (a, b, c, d, s)
begin
if s = "00" then 
y <= a;
elsif s = "01" then
y <= b;
elsif s = "10" then
y <= c;
else
y <= d;
end if;
end process mux4_1;
end archmux1;
architecture archmux2 of mux is
begin
y <= a when (s = "00") else
     b when (s = "01") else
     c when (s = "10") else
     d;
end archmux2;
Archmux1 i Archmux2
a
b
c
d
M U X
S S
1
0
y
 
I
T
P
W
ZPT
49
architecture archmux3 of mux is
begin
process (a,b,c,d,s)
begin
case s is
when "00" => y<= a;
when "01" => y<= b;
when "10" => y<= c;
when "11" => y<= d;
end case;
end process;
end archmux3;
architecture archmux4 of mux is
begin
with s select
y <= a when "00",
     b when "01",
     c when "10",
d when "11";
End archmux4;
Archmux3 i Archmux4
 
I
T
P
W
ZPT
50
Architecture archmux5 of mux is
Begin
    y    <=     (a and not(s(1)) and 
not(s(0)))
            OR  (b and not(s(1)) and s(0))
            OR  (c and s(1) and not(s(0)))
            OR  (d and s(1) and s(0));
end archmux5;
Archmux5
 
I
T
P
W
ZPT
51
architecture archmux6 of mux is
begin
mux4_1: process (a, b, c, d, s)
begin
if s = "00" then
y <= a;
end if;
if s = "01" then
y <= b;
end if;
if s = "10" then
y <= c;
end if;
if s = "11" then
y <= d;
end if;
end process mux4_1;
end archmux6;
Archmux6
 
I
T
P
W
ZPT
52
Archmux1 i Archmux2
A
B
C
D
S 1
S 0
N
0
D
N
0
C
N
0
B
X
 
I
T
P
W
ZPT
53
Archmux3 i Archmux4
A
B
C
D
S 1
S 0
X
N
0E
N
0D
N
0C
N
0B
 
I
T
P
W
ZPT
54
Archmux5
A
B
C
D
S 1
S 0
X
 
I
T
P
W
ZPT
55
Archmux6
A
B
C
D
S 1
S 0
N
0
D
N
0
H
N
0
G
N
0F
N 0 A
N 0 E
X
 
I
T
P
W
ZPT
56
Synteza układów
sekwencyjnych
VHDL umożliwia bezpośrednią 
reprezentację automatu (układu 
sekwencyjnego). Tablicę przejść-wyjść 
można bezpośrednio przetłumaczyć na 
specyfikację VHDL.
Wszystkie inne metody, polegające 
na oddzielnej syntezie części 
kombinacyjnej, a następnie na 
dołączaniu do niej rejestru,
nie mają sensu
 
I
T
P
W
ZPT
57
Zasady specyfikacji automatu
 Stany automatu są reprezentowane przez typ
wyliczeniowy, którego wartości są nazwami 
stanów
 Synchronizm zapewnia odpowiednie wyrażenie
testujące zbocze sygnału zegarowego
 Funkcje przejść wyjść są realizowane
instrukcjami CASE, IF THEN wewnątrz PROCESU
 Specyfikacja  jedno- lub dwu-procesowa
 Wyjątkiem w stosowaniu typu wyliczeniowego 
jest automat ze stanami kodowanymi przez 
użytkownika
 
I
T
P
W
ZPT
58
Typ wyliczeniowy
Typ wyliczeniowy (enumeration type) może być definiowany przez użytkownika.
Przykład:
type MY_STATE is (State1, State2, State3, State4);
...
signal STATE : MY_STATE;
STATE <= State1; 
 
 
I
T
P
W
ZPT
59
Składnia
obiekt’atrybut[(parametr)];
Atrybuty
Dostarczają dodatkowych informacji o 
obiektach (np.. sygnałach, zmiennych, typach 
lub komponentach) 
If Clock’event and Clock = ‘1’ then Q := D;
Najczęściej stosowany atrubut:
‘event – równy TRUE, gdy zachodzi zmiana wartości sygnału,
 
I
T
P
W
ZPT
60
Przykład: automat Moore’a
x = 0
x = 0
x = 0
x = 1
x = 1
x = 1
A/z = 0
B/z = 0
C/z = 1
Rst
x
s
0
1
z
A
A
B
0
B
A
C
0
C
A
C
1
 
I
T
P
W
ZPT
61
Automat: jednostka deklaracji
LIBRARY ieee;
USE ieee_std_logic_1164.all;
ENTITY automacik IS
PORT (Clock, Rst, x : IN
STD_LOGIC;
z
: OUT STD_LOGIC);
END automacik;
 
I
T
P
W
ZPT
62
ARCHITECTURE funkcja_przejsc OF automacik IS
TYPE State_type     IS (A, B, C);
SIGNAL Q : State_type;
BEGIN
PROCESS (Rst, Clock)
BEGIN
       IF Rst = '0' THEN
Q <= A;
ELSIF (Clock'EVENT AND Clock = '1') THEN
CASE Q IS
WHEN A =>
IF x = '0' THEN Q <=A; ELSE Q
<= B;
END IF;
WHEN B =>
IF x = '0' THEN Q <= A; ELSE Q
<= C;
END IF;
WHEN C =>
IF x = '0' THEN Q <= A; ELSE Q
<= C;
END IF;
END CASE;
    END IF;
END PROCESS;
z <= '1' WHEN Q = C ELSE '0';
END funkcja_przejsc;
Automat - wersja I
Deklaracja typu i sygnału
Zerowanie
asynchronicz-ne
Synchronizacja
 
I
T
P
W
ZPT
63
ARCHITECTURE funkcja_przejsc OF simple IS
TYPE State_type  IS (A, B, C);
SIGNAL Q_present, Q_next : State_type ;
BEGIN
PROCESS (x, Q_present)
BEGIN
CASE Q_present IS
WHEN A =>
IF x = '0' THEN Q_next <= A; ELSE Q_next
<= B;
END IF;
WHEN B =>
IF x = '0' THEN Q_next <=A; ELSE Q_next
<= C;
END IF;
WHEN C=>
IF x = '0' THEN Q_next <= A; ELSE Q_next
<= C;
END IF;
END CASE;
END PROCESS;
PROCESS (Clock, Rst)
BEGIN 
IF Rst = '0'
THEN Q_present <= A;
ELSIF (Clock'EVENT AND Clock = '1') THEN
Q_present <= Q_next;
END IF;
END PROCESS;
z <= '1' WHEN Q_present = C  ELSE '0';
END funkcja_przejsc;
Automat Moore’a - wersja II
P
r
o
c
e
s
k
o
m
b
i
n
a
c
y
j
n
y
Proces 
sekwencyjny
 
I
T
P
W
ZPT
64
Automat
Wejścia
Stan następny
(next_state)
Stany bieżące
(present_state)
Układ
kombinacyjny
Przerzut-
niki
Proces
Kombinacyjny
Case
If Then
Else
Proces
Sekwencyjn
y
CLK’EVENT
and
CLK=‘1’
 
I
T
P
W
ZPT
65
Automaty  w komercyjnych kompilatorach VHDL 
raczej nie są realizowane optymalnie jak też nie 
zawsze są realizowane  na minimalnej liczbie 
przerzutników
Nasz automat w opcji FPGA na trzech przerzutnikach !!!
Problem kodowania stanów
Specyfikacja automatu: ciekawostka o
procesie kompilacji
Ucieczka przed skomplikowaniem 
części kombinacyjnej w 
realizacjach dla struktur FPGA
 
I
T
P
W
ZPT
66
Dlatego warto w projektach dla urządzeń 
rynkowych stosować zewnętrzne 
procedury kodowania stanów automatu. 
Problem kodowania stanów…
Takie procedury są dostępne w 
oprogramowaniu uniwersyteckim
Pakiet SIS…JEDI, NOVA
 
I
T
P
W
ZPT
67
Szczęśliwie się składa, iż język VHDL 
umożliwia wprowadzenie dowolnego, 
zewnętrznie obliczonego kodowania 
stanów wewnętrznych
Problem kodowania stanów…
architecture nazwa_arch of 
nazwa_jednostki is
begin
end nazwa_arch;
Tu kodowanie: 
za pośrednictwem deklaracji 
stałych (constant)
 
I
T
P
W
ZPT
68
ARCHITECTURE funkcja_przejsc OF simple IS
     SIGNAL Q_present, Q_next: STD_LOGIC_VECTOR(1 DOWNTO 0)
     CONSTANT A :STD_LOGIC_VECTOR(1 DOWNTO 0) := "00";
     CONSTANT B :STD_LOGIC_VECTOR(1 DOWNTO 0) := "01";
     CONSTANT C :STD_LOGIC_VECTOR(1 DOWNTO 0) := "11";
BEGIN
PROCESS (x, Q_present)
BEGIN
CASE Q_present IS
WHEN A =>
IF x = '0' THEN Q_next <= A; ELSE Q_next <= B;
END IF;
WHEN B =>
IF x = '0' THEN Q_next <= A; ELSE Q_next <= C; 
END IF;
WHEN C =>
IF x = '0' THEN Q_next <= A; ELSE Q_next <= C;
END IF;
WHEN OTHERS => Q_next <= A;
END CASE;
END PROCESS;
PROCESS (Clock, Rst)
BEGIN
IF Rst = '0' THEN Q_next <= A; ELSIF (Clock'EVENT AND Clock = '1') THEN 
Q_present <= Q_next;
END IF;
END PROCESS;
z <= '1' WHEN Q_present = C ELSE '0';
END funkcja_przejsc;
Automat Moore’a z kodowaniem
stanów
zabezpieczenie przed
nadmiarowym stanem: 10
Inny typ
zmiennej
 
I
T
P
W
ZPT
69
SUBDESIGN MOORE_AHDL(
CLOCK, RESETN, W
: INPUT;
Z
: OUTPUT;
)
VARIABLE
Y
: MACHINE WITH STATES (A, B, C);
BEGIN
Y.CLK = CLOCK;
Y.RESET = !RESETN;
IF RESETN == B"0" THEN Y = A;
END IF;
CASE Y IS
WHEN A =>
IF W == B"0" THEN Y = A;
ELSE Y = B;
END IF;
WHEN B =>
IF W == B"0" THEN Y = A;
ELSE Y= C;
END IF;
WHEN C =>
IF W == B"0" THEN Y = A;
ELSE Y = C;
END IF;
END CASE;
IF Y == C THEN
Z = B"1";
ELSE
Z = B"0";
END IF;
END;
Automat
w AHDL
 
I
T
P
W
ZPT
70
AHDL kontra VHDL
Variable
temp : df
temp.clk = clk;
temp.d = data
out = temp.out
if (clk’event and clk=‘1’) 
then
out <= d;
end if;
AHDL
AHDL
VHDL
VHDL
Całkowicie behawioralny
opis, nawet nie znamy
typu
przerzutnika
 
I
T
P
W
ZPT
71
Specyfikacje typowych
układów
 Przerzutniki 
 Rejestry: równoległy, 
szeregowy
 Liczniki: w górę, z wpisem
równoległym
 Modelowanie na poziomie
strukturalnym
 Projektowanie większych
układów
Specyfikacje wszystkich
przykładów są
podane w
książce:
Programowalne układy przetwarzania
sygnałów cyfrowych i informacji