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
specyfikacji
To samo co
w pliku
halfadd.vhd
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;
T
ry
b
y
por
tu
•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 ukadu bez podania szczegóów
realizacyjnych
przepływ danych (dataflow)
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Ó
BIENE 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
MUX
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
MUX
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
MUX
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 <= a when (s = ”00”) else
b when (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
MUX
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
S1
S0
N
0
D
N
0
C
N
0
B
X
I
T
P
W
ZPT
53
Archmux3 i Archmux4
A
B
C
D
S1
S0
X
N0
E
N0
D
N0
C
N0
B
I
T
P
W
ZPT
54
Archmux5
A
B
C
D
S1
S0
X
I
T
P
W
ZPT
55
Archmux6
A
B
C
D
S1
S0
N0
D
N0
H
N0
G
N0
F
N0A
N0E
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
Sekwencyjny
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 : dff
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