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