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 
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:

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;

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

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

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ÓŁBIEŻNE 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

M U X

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

M U X

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

M U X

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

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

> B = 

B = 

eq B = 
i

3

i

2

i

1

i

0

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

M U X

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

S 1

S 0

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

S 1

S 0

X

N

0E

N

0D

N

0C

N

0B

background image

I

T
P

W

ZPT

54

Archmux5

A

B

C

D

S 1

S 0

X

background image

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

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

Sekwencyjn

y

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 : 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

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


Document Outline