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

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

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