ELC VHDL


Elementy języka VHDL
Języki opisu sprzętu:
Firmowe - stosowane wyłącznie w
systemach danej firmy (AHDL, ABEL)
stosowane coraz powszechniej
Uniwersalne -
w różnych systemach, równolegle
z językami firmowymi
(VHDL, Verilog)
Najpopularniejszym i z opracowanym standardem
jest - VHDL
I
T
P
W
ZPT
1
Język VHDL
Very high speed integrated circuit Hardware Description Language
(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
2
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
3
Jednostka projektowa
DESIGN ENTITY
Deklaracji jednostki
ENTITY DECLARATION
WEJÅšCIE/WYJÅšCIE
PARAMETRY
ARCHITECTURE BODY
Blok architektury
FUNKCJE
I DZIAAANIE
JEDNOSTKA PROJEKTOWA reprezentuje fragment układu cyfrowego;
ma dobrze zdefiniowane wejścia i wyjścia; spełnia ściśle określoną funkcję
I
Może mieć dowolny stopień złożoności  od prostej bramki do systemu!!!
T
P
W
ZPT
4
Specyfikacja jednostki
Halfadd:
A
SUM
B
entity HALFADD is
Deklaracje
port (A,B : in bit;
We/Wy
SUM, CARRY : out bit);
A
CARRY
end HALFADD;
B
To samo co
architecture BEHAVE of HALFADD is
Specyfikacja
w pliku
begin
logiczna
halfadd.vhd SUM <= A xor B;
CARRY <= A and B;
end BEHAVE;
Te same nazwy
Sekcja
I
specyfikacji
T
P
W
ZPT
5
Jednostka projektowa języka VHDL
entity
Komunikacja
z otoczeniem
architecture architecture architecture
I
Działanie układu
T
P
W
ZPT
6
Deklaracja jednostki
A SUM
B CARRY
Komunikacja
entity HALFADD is
z otoczeniem
port (A,B : in bit;
SUM, CARRY : out bit);
end HALFADD;
Deklaracja wyprowadze :
nazwy sygnałów
tryby
I
T
P typy danych
W
ZPT
7
Tryby wyprowadzeń
Tryby
entity HALFADD is
port (A,B : in bit;
SUM, CARRY : out bit);
end HALFADD;
" in - wejściowy
" out - wyjściowy
" inout - dwukierunkowy
" buffer- wyjściowy z możliwością odczytu
I
T
P
W
ZPT
8
Tryby
portu
Tryby wyprowadzeń&
Tryb
Tryb
In
Out
Buffer
Inout
In
In
Out
I
T
P
W
ZPT
9
Typ danych
Typ danych
entity HALFADD is
port (A,B : in bit;
SUM, CARRY : out bit);
end HALFADD;
bit, bit_vector, integer, Boolean
Typy danych:
I
T
P
W
ZPT
10
Blok architektury
architecture BEHAVE of HALFADD is
SUM
A begin
Działanie lub
SUM <= A xor B;
B
budowa
CARRY CARRY <= A and B;
end BEHAVE;
Architektura opisuje sposób działania jednostki (entity) lub jej
budowÄ™ (strukturÄ™).
VHDL wyraznie odróżnia opis działania od opisu struktury
Style specyfikacji
funkcjonalny (behavioralny)
I
przepływ danych (dataflow)
T
P
strukturalny
W
ZPT
11
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
wyrak%eniami logicznymi
strukturalny
Specyfikowana jest budowa układu. W opisie podane są
komponenty oraz połączenia między nimi.
I
T
P
W
ZPT
12
Deklaracja jednostki
entity nazwa_jednostki is
deklaracja parametrów ogólnych: generic (lista)
deklaracja wyprowadzeń: port (lista)
end nazwa_jednostki;
Paramery ogólne (generics) umożliwiają
projektowanie parametryzowanych wzorców układów
I
T
P
W
ZPT
13
Blok architektury
architecture nazwa_arch of nazwa_jednostki is
Definicje i deklaracje:
(typów, podtypów, stałych,
sygnałów, komponentów,
konfiguracji)
begin
 instrukcje przypisania
 procesy (instrukcje sekwencyjne)
 komponenty
I
T
P
W
end nazwa_arch;
ZPT
14
Moduły systemowe wspomagające
specyfikacjÄ™&
& dostępne dla wielu jednostek projektowych to
biblioteki i pakiety.
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.
Biblioteka to zbiór zanalizowanych pakietów i jednostek
projektowych przechowywanych w danym systemie
operacyjnym i dostępnych bezpośrednio wg nazwy logicznej
I
(nie jest to nazwa katalogu w tym systemie).
T
P
W
ZPT
15
Dostęp do biblioteki i jej pakietów&
Dostęp do pakietu osiąga się deklaracją:
LIBRARY library_name;
USE library_name.package_name.all;
Biblioteka systemowa IEEE
I
T
P
W
ZPT
16
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
17
Elementy strukturalne języka VHDL
SÅ‚owa kluczowe
Identyfikatory
Obiekty danych
Operatory
Atrybuty
Instrukcje
I
T
P
W
ZPT
18
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
Klasa deklarowana jest przed nazwÄ… obiektu np.:
signal s1, s2 : bit;
variable u: integer range 0 to 127;
Odpowiednikiem sprzętowym sygnału jest ścieżka w układzie
scalonym.
I
T
Zmienna nie ma odpowiednika sprzętowego i służy do obliczeń
P
W
na wyższym poziomie abstrakcji.
ZPT
19
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 ;
variable nazwa_zm: typ_zm [ograniczenia]
constant nazwa : typ := wartość;
Przy operacji przypisania sygnałów, typy danych po
I
T
każdej stronie operatora przypisania muszą być zgodne
P
W
ZPT
20
Typy danych
Wyróżnia się 10 typów danych:
BIT, BIT_VECTOR,
STD_LOGIC, STD_LOGIC_VECTOR,
(STD_ULOGIC),
SIGNED, UNSIGNED, INTEGER,
ENUMERATION, BOOLEAN
I
T
P
W
ZPT
21
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
22
Atrybuty
Dostarczaj dodatkowych informacji o obiektach (np..



sygnałach, zmiennych, typach lub komponentach)
Składnia
obiekt atrybut[(parametr)];
Najczęściej stosowany atrubut:
 event  równy TRUE, gdy zachodzi zmiana wartości sygnału,
If Clock event and Clock =  1 then Q := D;
I
T
P
W
ZPT
23
Instrukcje
WSPÓA ŻNE I SEKWENCYJNE
ABIEÅ»
A Å»
A Å»
Współbie
ne (Concurrent assignment statement)


Sekwencyjne (Sequential assignment statement)
I
T
P
W
ZPT
24
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
25
Współbieżne instrukcje przypisania
sygnału
(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
I
T
P
W
ZPT
26
Instrukcja podstawowa
Składnia:
signal_name <= wyraż
żenie;
ż
ż
boolowskie lub
arytmetyczne
Typowe zastosowanie:
Realizacje układów kombinacyjnych
I
T
P
W
ZPT
27
Przykład  MUX 4:1
a
b
y
MUX
c
y = s1s0a + s1s0b+ s1s0c + s1s0d
d
S1 S0
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;
I
T
P
W
ZPT
28
Przykład  MUX 4:1
library ieee;
a
b
use ieee.std_logic_1164.all;
y
MUX
c
entity mux is port (
d
a, b, c, d : in std_logic ;
S1 S0
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)))
I
T
or (d and (s(1) and (s(0));
P
W
end archmux;
ZPT
29
Przykład  MUX grupowy 4:1
library ieee;
use ieee.std_logic_1164.all;
a
b
entity mux is port (
y
MUX
c
a, b, c, d : in std_logic ;
d
s: in std_logic_vector (1 downto 0) ;
S1 S0
x: out std_logic ) ;
end mux;
a = (a3,a2,a1,a0)
b = (b3,b2,b1,b0)
& & & & & & & ..
y = (y3,y2,y1,y0)
I
T
P
W
ZPT
30
Przykład  MUX grupowy 4:1
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))
I
or (c(0) and (s(1) and not(s(0)))
T
P
or (d(0) and (s(1) and (s(0));
W
end archmux;
ZPT
31
Instrukcja warunkowa - when-else
Wyrażenie
Składnia:
boolowskie
signal_name <= value_a when condition1 else
value_b when condition2 else
value_c when condition3 else ...
value_x;
I
T
P
W
ZPT
32
Przykład  MUX 4:1
library ieee;
use ieee.std_logic_1164.all;
entity mux is port (
a, b, c, d : in std_logic ; std_logic_vector (3 downto 0);
s: in std_logic_vector (1 downto 0) ;
y: out std_logic ) ;
std_logic_vector (3 downto 0));
end mux;
Dla uzyskania MUX
architecture archmux of mux is
grupowego wystarczy
begin
zmienić tylko typ
y <= a when (s =  00 ) else
zmiennych w deklaracji
b when (s =  01 ) else
c when (s =  10 ) else
I
d;
T
P
end archmux;
W
ZPT
33
Instrukcja selektywna - with-select
Składnia:
Zmienna wielowartościowa
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;
Przykładzik:
with INT_A select
Można określać kilka wartości lub
Z <= A when 0,
B when 1 to 3,
zakres
C when 4 | 6 | 8,
Wartości nie mogą się powtarzać
I
D when others;
T
P
W
ZPT
34
Przykład  MUX 4:1
library ieee;
use ieee.std_logic_1164.all;
entity mux is port (
a, b, c, d : in std_logic ; std_logic_vector (3 downto 0);
s: in std_logic_vector (1 downto 0) ;
y: out std_logic ) ;
std_logic_vector (3 downto 0));
end mux;
architecture archmux of mux is
Dla uzyskania MUX
begin
grupowego wystarczy
with s select
zmienić tylko typ
zmiennych w deklaracji
y <= a when  00 ,
b when  01 ,
c when  10 ,
I
T
d when others;
P
W
end archmux;
ZPT
35
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
36
Komparator
B
A
n
n
 1 z 3
A < B
A = B
K
A > B
I
T
P
W
ZPT
37
Komparator
a3
i 3
ik = ak •"bk
A = a3a2a1a0 B = b3b2b1b0
b3
a2
i 2
b2
A eq B = i3i2i1i0
a1
i 1
b1
a0
i 0
b0
A < B =
A eq B + A gt B
A > B = a3b3 +i3a2b2 +
+i3i2a1b1 +i3i2i1a0b0
I
T
P
W
ZPT
38
Komparator wersja 1
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;
I
T
P
W
ZPT
39
Komparator wersja 2
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);
I i3 <= NOT (a3 XOR b3);
T
i2 <= NOT (a2 XOR b2);
P
W
i1 <= NOT (a1 XOR b1);
i0 <= NOT (a0 XOR b0);
ZPT
40
Komparator wersja 2 c.d.
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;
I
T
P
W
ZPT
41
Realizacje komparatora
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
I
T
lepszej implementacji!!!
P
W
ZPT
42
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
43
Proces
Składnia:
Process ( )
begin
..
Name :PROCESS (sensitivity_list)
end process
BEGIN
Instrukcja sekwencyjna #1
Lista czułości
Instrukcja sekwencyjna #2
.......
Instrukcja sekwencyjna # N
Instrukcje sekwencyjne sÄ…
END PROCESS name;
wykonywane kolejno
jedna po drugiej
I
T
P Etykieta jest opcjonalna
W
ZPT
44
Procesy
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
I
T
P
W
ZPT
45
Instrukcja warunkowa if then else
Jest to instrukcja sekwencyjna
Częśćelsifmoże wystąpić dowolną liczbę razy
Częśćelsenie musi wystąpić
Może być zagnieżdżana
Składnia:
if warunekthen
sekwencja_instrukcji1
{elsifwarunekthen
sekwencja_instrukcji2 }
[else
sekwencja_instrukcji3]
end if;
I
T
P
W
ZPT
46
Instrukcja wyboru -case
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):
casezm_wielow is
when wybór1 => sekwencja1_instrukcji ;
when wybór2 => sekwencja2_instrukcji ;
[when others => sekwencja3_instrukcji ; ]
end case;
I
T
P
W
ZPT
47
Archmux1 i Archmux2
entity mux is port(
a
a, b, c, d: in bit;
b
s: in bit_vector(1 downto 0);
y
MUX
c
y: out bit);
end mux;
d
architecture archmux1 of mux is
S1 S0
begin
mux4_1:process (a, b, c, d, s)
begin
architecture archmux2 of mux is
if s = "00" then
begin
y <= a;
y <= a when (s = "00") else
elsif s = "01" then
b when (s = "01") else
y <= b;
c when (s = "10") else
elsif s = "10" then
d;
y <= c;
end archmux2;
else
y <= d;
I
end if;
T
end process mux4_1;
P
W
end archmux1;
ZPT
48
Archmux3 i Archmux4
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",
I
d when "11";
T
P
W
End archmux4;
ZPT
49
Archmux5
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;
I
T
P
W
ZPT
50
Archmux6
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;
I
T
P
W
ZPT
51
Archmux1 i Archmux2
A
B
X
C
D
I
T
P
S1
W
S0
ZPT
52
N0B
N0D
N0C
Archmux3 i Archmux4
A
B
X
C
D
I
T
S1
P
S0
W
ZPT
53
N0E
N0D
N0C
N0B
Archmux5
A
B
X
C
D
I
T
P
S1
W
S0
ZPT
54
Archmux6
C
B
A
N0E
X
D
N0A
I
T
P
S1
W
S0
ZPT
55
N0F
N0D
N0H
N0G
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
56
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
57
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
58
Atrybuty
Dostarczaj dodatkowych informacji o obiektach (np..



sygnałach, zmiennych, typach lub komponentach)
Składnia
obiekt atrybut[(parametr)];
Najczęściej stosowany atrubut:
 event  równy TRUE, gdy zachodzi zmiana wartości sygnału,
If Clock event and Clock =  1 then Q := D;
I
T
P
W
ZPT
59
Przykład: automat Moore a
Rst
x
x = 1
s0 1 z
x = 0
A/z = 0
B/z = 0
AAB0
x = 0
BAC0
x = 1
x = 0
CAC1
C/z = 1
x = 1
I
T
P
W
ZPT
60
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
61
Automat - wersja I
ARCHITECTURE funkcja_przejsc OF automacik IS
TYPE State_type IS (A, B, C);
SIGNAL Q : State_type;
Deklaracja typu i sygnału
BEGIN
PROCESS (Rst, Clock)
BEGIN
IF Rst = '0' THEN
Q <= A;
ELSIF (Clock'EVENT AND Clock = '1') THEN
CASE Q IS
Zerowanie
WHEN A =>
asynchronicz-
IF x = '0' THEN Q <=A; ELSE Q <= B;
ne
END IF;
WHEN B =>
IF x = '0' THEN Q <= A; ELSE Q <= C;
Synchronizacja
END IF;
WHEN C =>
IF x = '0' THEN Q <= A; ELSE Q <= C;
END IF;
END CASE;
END IF;
I
T
END PROCESS;
P
z <= '1' WHEN Q = C ELSE '0';
W
END funkcja_przejsc;
ZPT
62
Automat Moore a - wersja II
ARCHITECTURE funkcja_przejsc OF simple IS
TYPE State_type IS (A, B, C);
SIGNAL Q_present, Q_next : State_type ;
BEGIN
P
PROCESS (x, Q_present)
r
o BEGIN
c
CASE Q_present IS
e
WHEN A =>
s
IF x = '0' THEN Q_next <= A; ELSE Q_next <= B;
k
END IF;
o
WHEN B =>
m
IF x = '0' THEN Q_next <=A; ELSE Q_next <= C;
b
i
END IF;
n
WHEN C=>
a
IF x = '0' THEN Q_next <= A; ELSE Q_next <= C;
c
y
END IF;
j
END CASE;
n
END PROCESS;
y
PROCESS (Clock, Rst)
BEGIN
IF Rst = '0' THEN Q_present <= A;
Proces
ELSIF (Clock'EVENT AND Clock = '1') THEN
sekwencyjny
I
Q_present <= Q_next;
T
END IF;
P
W
END PROCESS;
z <= '1' WHEN Q_present = C ELSE '0';
ZPT
END funkcja_przejsc;
63
Proces
Automat
Sekwencyjny
Proces
Kombinacyjny
CLK EVENT
and
Case
CLK= 1
If Then
Else
Stan następny
(next_state)
Wejścia
Układ
Przerzut-
kombinacyjny
niki
Stany bieżące
(present_state)
I
T
P
W
ZPT
64
Problem kodowania stanów
Specyfikacja automatu: ciekawostka o procesie
kompilacji
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 !!!
Ucieczka przed skomplikowaniem
części kombinacyjnej w realizacjach
dla struktur FPGA
I
T
P
W
ZPT
65
Problem kodowania stanów&
Dlatego warto w projektach dla urządzeń
rynkowych stosować zewnętrzne procedury
kodowania stanów automatu.
Takie procedury są dostępne w oprogramowaniu
uniwersyteckim
Pakiet SIS& JEDI, NOVA
I
T
P
W
ZPT
66
Problem kodowania stanów&
Szczęśliwie się składa, iż język VHDL
umożliwia wprowadzenie dowolnego,
zewnętrznie obliczonego kodowania stanów
wewnętrznych
architecture nazwa_arch of nazwa_jednostki is
begin
Tu kodowanie:
za pośrednictwem deklaracji
end nazwa_arch;
stałych (constant)
I
T
P
W
ZPT
67
Automat Moore a z kodowaniem stanów
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";
Inny typ zmiennej
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;
zabezpieczenie przed
WHEN C =>
nadmiarowym stanem: 10
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
I
IF Rst = '0' THEN Q_next <= A; ELSIF (Clock'EVENT AND Clock = '1') THEN Q_present <= Q_next;
T
END IF;
P
END PROCESS;
W
z <= '1' WHEN Q_present = C ELSE '0';
END funkcja_przejsc;
ZPT
68
SUBDESIGN MOORE_AHDL(
CLOCK, RESETN, W : INPUT;
Automat
Z : OUTPUT;
)
w AHDL
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;
I
IF Y == C THEN
T
Z = B"1";
P
ELSE
W
Z = B"0";
END IF;
END;
ZPT
69
AHDL kontra VHDL
AHDL VHDL
AHDL VHDL
Variable
if (clk event and clk= 1 ) then
temp : dff
out <= d;
end if;
temp.clk = clk;
temp.d = data
out = temp.out
Całkowicie behawioralny
opis, nawet nie znamy typu
przerzutnika
I
T
P
W
ZPT
70
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
I
T
P
W
ZPT
71


Wyszukiwarka

Podobne podstrony:
SIMULINK MATLAB to VHDL Route
ELC met synt
lab1 VHDL
Jednostka sterujÄ…ca ELC drugiej
tut?2 sdram vhdl
VHDL Zalecenia
PUP niest wyk5 VHDL[51F] v1
lab6 VHDL
vhdl
ELC?k r p
lab8 VHDL
ELC
j VHDL
Jezyki opisu sprzetu VHDL
TC VHDL b
PUCY VHDL Uklady sekwencyjne

więcej podobnych podstron