VHDL 1j


Elementy języka VHDL
Języki opisu sprzętu:
Y Firmowe - stosowane wyłącznie w
systemach danej firmy (AHDL, ABEL)
stosowane coraz powszechniej
Y 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
Standard Logic  IEEE 1164 (1993)
Powszechnie stosowany w specyfikacjach
układów cyfrowego przetwarzania
sygnałów:
I
T
P
W
ZPT
2
Język VHDL
Y Zawiera użyteczne konstrukcje semantyczne
umożliwiające zwięzłą specyfikację złożonych układów
cyfrowych
Y Projekt może być opisany hierarchicznie (na wielu
poziomach)
Y 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 :
S nazwy sygnałów
S tryby
I
T
P S 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 dziaanie ukadu 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:
LIBRARY IEEE;
use IEEE.Std_Logic_1164.all;
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
Biblioteka robocza - work
Bieżące jednostki są kompilowane do biblioteki roboczej
o domyślnej nazwie logicznej WORK.
Dostęp do pakietów definiowanych przez użytkownika
osiąga się poleceniem:
LIBRARY work;
USE work.user_package_name.all;
I
T
P
W
ZPT
18
Elementy strukturalne języka VHDL
Słowa kluczowe
Identyfikatory
Obiekty danych
Operatory
Atrybuty
Instrukcje
I
T
P
W
ZPT
19
Słowa kluczowe
abs downto library postponed Srl
access else linkage procedure Subtype
after elsif literal process Then
BEGIN, END..
alias end loop pure To
all entity map range Transport
and exit mod record Type
architecture file nand register Unaffected
IF, THEN, CASE...
array for new reject Units
assert function Next rem Until
attribute generate Nor report Use
begin generic Not return Variable
AND, OR, NAND, XOR...
block group Null rol Wait
body guarded Of ror When
buffer if On select While
bus impure Open severity With
SIGNAL, COMPONENT, IN, OUT
case in Or signal Xnor
component inertial Others shared Xor
configuration inout Out sla
constant is Package sll
disconnect label Port sra
I
T
P
W
ZPT
20
Identyfikatory
Y Identyfikatory mogą się składać z liter, cyfr
i podkreślników
Y Wielkość liter nie ma znaczenia
Y Nazwa musi się rozpoczynać od litery
Y Nazwa nie powinna być dłuższa niż 16 znaków
Nazwa powinna być znacząca
Ta_Sama_Nazwa 16_bit_bus : integer; -- błędnie
TA_SAMA_NAZWA _bus_16_bit_ : integer; -- błędnie
ta_sama_nazwa bus_16_bit : integer; -- O.K.
I
T
P
W
ZPT
21
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
22
Obiekty danych&
Sygnał może być zdefiniowany
w deklaracji jednostki oraz w części
deklaracyjnej architektury lub pakietu
Zmienne są stosowane tylko w procesach i
podprogramach
Stałe mogą być zadeklarowane w jednostce
projektowej, pakiecie, procesie,
architekturze...
I
T
P
W
ZPT
23
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
24
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
25
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
26
Pomocnicze typy def. przez u
ytkownika


Typ wyliczeniowy
Typ tablicowy
I
T
P
W
ZPT
27
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;
signal TWO_BIT : bit_vector (0 to 1);
...
STATE <= State1; O.K.
Ale do sygnału STATE nie można przyporządkować bezpośrednio
2-bitowego ciągu binarnego.
I
T
STATE <=  00 NIE
P
W
ZPT
28
Typ tablicowy
Typy BIT_VECTOR oraz STD_LOGIC_VECTOR są
tablicami sygnałów typu BIT i STD_LOGIC
Dane typu tablicowego mogą być definiowane przez
użytkownika
Zakres tablicy jest definiowany pod odpowiednią
deklaracją za pomocą słów kluczowych:  to  downto
TYPE Byte IS ARRAY (7 DOWNTO 0) OF STD_LOGIC;
SIGNAL X : Byte;
I
T
P
W
ZPT
29
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
30
Operatory
Klasa
Operator Typ danych
operatorów
AND, OR, NAND, NOR,
logiczne BIT, BOOLEAN, BIT_VECTOR
XOR, XNOR
Argumenty  ten sam typ;
relacji =, /=, <, <=, >, >=
wynik - BOOLEAN
dodawania +,  , & INTEGER, BIT_VECTOR
znaku +,  INTEGER
mnożenia *, /, MOD, REM INTEGER
I
T
P
W
ZPT
31
Operatory&
W języku VHDL operatory logiczne nie maj okre%
W języku VHDL operatory logiczne nie maj %
W języku VHDL operatory logiczne nie maj %lonego
W języku VHDL operatory logiczne nie maj %
pierwsze
 stwa wykonywania operacji.


W zapisach wyrak%e boolowskich stosowane s nawiasy
W zapisach wyrak%e boolowskich stosowane s nawiasy
W zapisach wyrak%e boolowskich stosowane s nawiasy
W zapisach wyrak%e boolowskich stosowane s nawiasy
I
T
P
W
ZPT
32
Instrukcje
WSPÓ j%NE I SEKWENCYJNE
BIEj%
 j%
 j%
Współbie
ne (Concurrent assignment statement)


Sekwencyjne (Sequential assignment statement)
I
T
P
W
ZPT
33
Instrukcje
Współbie
ne:


Zachowanie układu jest niezależ ści
żne od kolejnoś zapisu
ż ś
ż ś
instrukcji przypisania 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
34
Instrukcje współbieżne - przykład
Entity test1 Is Entity test1 Is
Port ( a, b : in bit; Port ( a, b : in bit;
c, d : out bit); c, d : out bit);
end test1; end test1;
architecture test1_body of test1 is architecture test1_body of test1 is
begin begin
Są wykonywane
c <= a and b; d <= a or b;
d <= a or b; c <= a and b; jednocześnie
end test1_body; end test1_body;
Kolejność występowania instrukcji nie ma znaczenia
I
T
P
W
ZPT
35
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
36
Instrukcja podstawowa
Składnia:
signal_name <= wyraż
żenie;
ż
ż
boolowskie lub
arytmetyczne
Typowe zastosowanie:
Realizacje układów kombinacyjnych
I
T
P
W
ZPT
37
Przykład  prosty układ kombinacyjny
Funkcja f = Ł (0, 2, 4, 5)
library ieee;
use ieee.std_logic_1164.all;
entity funkcja is port (
x1, x2, x3 : in std_logic ;
Ale nie po to jest VHDL
aby realizować  szkolne
f: out std_logic ) ;
funkcje boolowskie.
end funkcja;
architecture RealFunk of funkcja is
begin
f <= (not x1 and not x2 and not x3)
or (not x1 and x2 and not x3)
or (x1 and not x2 and not x3)
or (x1 and not x2 and x3) ;
I
T
end RealFunk;
P
W
ZPT
38
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
39
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) ;
y: out std_logic ) ;
end mux;
architecture archmux 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)))
I
T
or (d and (s(1) and (s(0));
P
W
end archmux;
ZPT
40
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_vector (3 downto 0) ;
d
s: in std_logic_vector (1 downto 0) ;
S1 S0
y: out std_logic_vector (3 downto 0)) ;
end mux;
a = (a3,a2,a1,a0)
b = (b3,b2,b1,b0)
& & & & & & & ..
y = (y3,y2,y1,y0)
I
T
P
W
ZPT
41
Przykład  MUX grupowy 4:1
architecture archmux of mux is
begin
y (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));
y (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));
y (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));
y (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
42
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
43
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
44
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,
zakres
B when 1 to 3,
Wartości nie mogą się powtarzać
C when 4 | 6 | 8,
I
T
D when others;
P
W
ZPT
45
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
46
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
47
Komparator
B
A
n
n
 1 z 3
A < B
A = B
K
A > B
I
T
P
W
ZPT
48
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
ak `" bk A < B, gdy ak = 0, bk =1
T
P
A > B, gdy ak = 1, bk =0
W
ZPT
49
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
50
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
51
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
52
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
53
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
54
Proces (składnia)
Etykieta jest opcjonalna
Słowo kluczowe
Name :PROCESS (sensitivity_list)
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
Etykieta jest opcjonalna
P
W
ZPT
55
Procesy
Konstrukcja wykonywana równolegle
Występuje wewnątrz architektury
Zawiera opis behawioralny
Instrukcje wewnętrzne wykonywane są sekwencyjnie
Zawiera:
Y listę czułości (ang. sensitivity list);
jest to lista sygnałów, których zmiana powoduje aktywację
procesu
I
T
P
W
ZPT
56
Procesy c.d.
Procesy nie mogą być zagnieżdżane
Wewnątrz architektury może występować dowolna
liczba procesów
W części deklaracyjnej można definiować: typy,
podtypy, stałe, atrybuty i zmienne
Nie można deklarować sygnałów!!!
I
T
P
W
ZPT
57
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 warunek then
sekwencja_instrukcji1
{elsif warunek then
sekwencja_instrukcji2 }
[else
sekwencja_instrukcji3]
end if ;
I
T
P
W
ZPT
58
Instrukcja wyboru -case
Y Instrukcja sekwencyjna
Y Podobna do instrukcji with select
Y Można określać kilka wartości lub zakres
Y Wartości nie mogą się powtarzać
Y Składnia:
casezm_wielowis
when wybór1 => sekwencja1_instrukcji ;
when wybór2 => sekwencja2_instrukcji ;
[when others => sekwencja3_instrukcji ; ]
end case;
I
T
P
W
ZPT
59
InstrukcjaCASE(przykładzik)
process (A, B, C, X)
begin
case X is
when 0 to 4 =>
Z <= B;
when 5 =>
Z <= C;
when 7 | 9 =>
Z <= A;
when others =>
Z <= 0;
I
end case;
T
P
end process;
W
ZPT
60
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
61
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
62
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
63
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
64
Archmux1 i Archmux2
A
B
X
C
D
I
T
P
S1
W
S0
ZPT
65
N0B
N0D
N0C
Archmux3 i Archmux4
A
B
X
C
D
I
T
S1
P
S0
W
ZPT
66
N0E
N0D
N0C
N0B
Archmux5
A
B
X
C
D
I
T
P
S1
W
S0
ZPT
67
Archmux6
C
B
A
N0E
X
D
N0A
I
T
P
S1
W
S0
ZPT
68
N0F
N0D
N0H
N0G


Wyszukiwarka

Podobne podstrony:
SIMULINK MATLAB to VHDL Route
62 1j (4)
VW GOLF4 1J 02pl
lab1 VHDL
tut?2 sdram vhdl
VHDL Zalecenia
023 1J
PUP niest wyk5 VHDL[51F] v1
symulacja 1j
lab6 VHDL
M1 1J
M 1J
vhdl
62 1j (3)
lab8 VHDL

więcej podobnych podstron