ELC VHDL

background image

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)

background image

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:

background image

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)

background image

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

background image

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:

background image

I

T

P

W

ZPT

6

Jednostka projektowa języka VHDL

entity

architecture

architecture

architecture

Komunikacja

z otoczeniem

Działanie układu

background image

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

background image

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

background image

I

T

P

W

ZPT

9

Tryb

Tryb

In

In

In

Out

Buffer

Out

Inout

Tryby wyprowadzeń…

background image

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

background image

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

background image

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.

background image

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)

background image

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

background image

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).

background image

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

background image

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;

background image

I

T

P

W

ZPT

18

Elementy strukturalne języka VHDL

 Słowa kluczowe
 Identyfikatory
 Obiekty danych
 Operatory
 Atrybuty
 Instrukcje

background image

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;

background image

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

ść;

background image

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:

background image

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

background image

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,

background image

I

T

P

W

ZPT

24

Instrukcje

Współbie

ne (Concurrent assignment statement)

Sekwencyjne (Sequential assignment statement)

WSPÓ

BIENE I SEKWENCYJNE

background image

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.

background image

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

background image

I

T

P

W

ZPT

27

Instrukcja podstawowa

Składnia:

signal_name <= wyra

enie;

boolowskie lub

arytmetyczne

Typowe zastosowanie:

Realizacje układów kombinacyjnych

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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 ) ;

background image

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;

background image

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 ) ;

background image

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

background image

I

T

P

W

ZPT

37

Komparator

A

n

B

n

K

„1 z 3”

A < B
A = B
A > B

background image

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

background image

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

background image

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

background image

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.

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

I

T

P

W

ZPT

53

Archmux3 i Archmux4

A

B

C

D

S1

S0

X

N0

E

N0

D

N0

C

N0

B

background image

I

T

P

W

ZPT

54

Archmux5

A

B

C

D

S1

S0

X

background image

I

T

P

W

ZPT

55

Archmux6

A

B

C

D

S1

S0

N0

D

N0

H

N0

G

N0

F

N0A

N0E

X

background image

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

background image

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

background image

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;

background image

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,

background image

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

background image

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;

background image

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

background image

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

background image

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’

background image

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

background image

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

background image

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)

background image

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

background image

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

background image

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

background image

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


Wyszukiwarka

Podobne podstrony:
ELC VHDL cz 1
Introduction to VHDL
lab1 VHDL
P J Ashenden VHDL tutorial
ELC met synt
VHDL(1)
lab8 VHDL
Język opisu sprzętu VHDL (K Kołek) vhdl ksiazka
j VHDL
Język opisu sprzętu VHDL
vhdl wyk
lab6 VHDL
Jezyki opisu sprzetu VHDL
j VHDL UCYF id 222716 Nieznany
lab vhdl id 258689 Nieznany
VHDL ściąga 2, Uc2- uklady cyfrowe,sciagi, wyklady
VHDL zmienne i sygnaly
ELC dek klas

więcej podobnych podstron