j VHDL


Język VHDL
Very high speed integrated Hardware Description Language
przemysłowy standard języka HDL
(IEEE Std 1076-1987, IEEE Std 1076-1993)
VHDL jest językiem przenośnym
może być stosowany przez systemy różnych firm
Powszechnie stosowany w specyfikacjach układów
cyfrowego przetwarzania sygnałów:
" U. Meyer Baese, DSP with FPGAs, Springer, Berlin 2001,
" K. K. Parchi, T. Nishitani, Digital Signal Processing for
Multimedia Systems, Marcel Dekker, Inc. New York 1999
1
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)
2
Jednostka projektowa
DESIGN ENTITY
JEDNOSTKA PROJEKTOWA
ENTITY DECLARATION
WEJŚCIE/WYJŚCIE
PARAMETRY
ARCHITECTURE BODY
FUNKCJE
I DZIAAANIE
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;
3
Jednostka projektowa języka VHDL
entity
Komunikacja
z otoczeniem
architecture architecture architecture
Działanie układu
4
Najprostsza struktura pliku
Słowo kluczowe
Key Word
IS
ENTITY halfadd
Deklaracje
PORT (A, B : IN bit;
Sygnałów we/wy SUM, CARRY : OUT bit);
END halfadd;
ARCHITECTURE behave
OF halfadd IS
BEGIN
To samo co w pliku
;
halfadd.vhd
SUM <= A xor B;
CARRY <= A and B;
END behave;
Ta sama nazwa
Sekcja opisu logicznego
5
Jednostka deklaracji
A SUM
B CARRY
entity HALFADD is
Deklaracja sygnałów
port (A,B : in bit;
nazwa
SUM, CARRY : out bit);
tryb
end HALFADD;
typ danych
6
Jednostka deklaracji
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
Typy danych: bit, bit_vector, integer, Boolean
7
Tryby
portu
Blok architektury
A
Działanie lub SUM
B
CARRY
budowa
Architektura opisuje sposób działania jednostki (entity) lub jej
budowę (strukturę).
Style specyfikacji
architecture BEHAVE of HALFADD is
funkcjonalny (behavioralny)
begin
SUM <= A xor B;
przepływ danych (dataflow)
CARRY <= A and B;
strukturalny
end BEHAVE;
8
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 wartości do
sygnałów
 procesy
 komponenty
end nazwa_arch;
9
Elementy strukturalne języka VHDL
Słowa kluczowe
Identyfikatory
Obiekty danych
Operatory
Atrybuty
Instrukcje
10
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
SIGNAL, COMPONEN, IN, OUT
bus impure Open severity With
case in Or signal Xnor
component inertial Others shared Xor
configuration inout Out sla
constant is Package sll
disconnect label Port sra
11
Identyfikatory
Identyfikatory mogą się składać z liter, cyfr
i podkreślników
Wielkość liter nie ma znaczenia
Nazwa musi się rozpoczynać od litery
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.
12
Obiekty danych
Obiekty danych służą do przechowywania wartości.
Wyróżnia się trzy klasy obiektów:
" sygnał  signal
" zmienne  variable
" stałe  constant
Wartości zmiennych są przypisywane natychmiast,
wartości sygnałów  z pewnym opóznieniem.
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.
13
Pojęcie typu danych
Język VHDL jest bardzo 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 ;
entity HALFADD is
port (A,B : in bit;
SUM, CARRY : out bit);
end HALFADD;
Wartości dozwolone w sygnale typu bit: 2 02 2 2 2
2 2 2 2 2 2
2 2 2 2 12
Przy operacji przyporządkowania sygnałów, typy danych
po każdej stronie operatora przyporządkowania muszą
być zgodne
14
Typy danych
Wyróżnia się 10 typów danych sygnału:
BIT, BIT_VECTOR,
STD_LOGIC, STD_LOGIC_VECTOR,
(STD_ULOGIC),
SIGNED, UNSIGNED, INTEGER,
ENUMERATION, BOOLEAN
15
Predefiniowane 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
16
Sygnały
Sygnał może być zdefiniowany w jednostce deklaracji oraz w części
deklaracyjnej architektury lub pakietu.
Sygnał posiada trzy cechy z nim skojarzone:
typ
wartość
Składnia

signal nazwa_syg: typ_syg[:=wart_pocz];
np.:
signal s1, s2 : bit;
signal liczba : integer := 7;
17
Stałe
Stałe to takie obiekty danych, których wartości
nie zmieniają się w trakcie symulacji
Stałe mogą być zadeklarowane w jednostce
projektowej, pakiecie, procesie, architekturze,
funkcji i procedurze
Składnia:
constant nazwa : typ := wartość;
np.:
constant zero:STD_LOGIC_VECTOR(3 DOWNTO
0):= 0000 ;
18
Typ wyliczeniowy
Typ wyliczeniowy (enumeration type) może być definiowany przez użytkownika.
Przykład:
type MY_STATE is (RESET, IDLE, RW_CYCLE, INT_CYCLE);
...
signal STATE : MY_STATE;
signal TWO_BIT : bit_vector (0 to 1);
...
STATE <= RESET; O.K.
Ale do sygnału STATE nie można przyporządkować
każdego 2-bitowego ciągu binarnego.
STATE <=  00 NIE
STATE <= TWO_BIT NIE
19
Typ wyliczeniowy c.d.
Typ wyliczeniowy jest kodowany na minimalnej
liczbie bitów w zapisie wg NKB:
RESET <=  00
IDLE <=  01
RW_CYCLE <=  10
INT_CYCLE <=  11
20
Tablice
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;
21
Tablice
signal Z_BUS:bit_vector(3 downto 0);
signal C_BUS:bit_vector(1 to 4);
Z_BUS <= C_BUS;
Przyporządkowanie dla danych tego samego typu i zakresu
Z_BUS(3) <= C_BUS(1);
Z_BUS(2) <= C_BUS(2);
Z_BUS(1) <= C_BUS(3);
Z_BUS(0) <= C_BUS(4);
Z_BUS(3 downto 2) <= "00";
C_BUS(2 to 4) <= Z_BUS(3 downto 1);
W przyporządkowaniu można odwoływaćsiędo fragmentów tablic
22
Atrybuty
Dostarczają dodatkowych informacji o obiektach (np. sygnałach,
zmiennych, typach lub komponentach)
Pewna liczba atrybutów jest predefiniowana
Składnia
obiekt atrybut[(parametr)];
Przykładowe atrybuty
 EVENT  równy TRUE, gdy zachodzi zmiana wartości sygnału,
 STABLE  równy TRUE, gdy nie zachodzi zmiana wartości sygnału
 LEFT - zwraca lewą granicę zakresu
 RIGHT - zwraca prawą granicę zakresu
 RANGE - zwraca zakres typu
23
Przykład (atrybuty)
type count is integer range 0 to 127
type states is (st1, st2, st3, st4);
count left = 0
count right = 127
states left = st1
states high = st4
If Clock event and Clock =  1 then Q := D;
24
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
różne **, ABS, NOT INTEGER, BIT,BIT_VECTOR
25
Operatory - przykłady
library IEEE;
signal A_BUS, B_BUS, Z_BUS :
use IEEE.Std_Logic_1164.all;
std_logic_vector (3 downto 0);
entity MVLS is
port (A,B,C : in std_logic;
Z_BUS <= A_BUS and B_BUS;
Z : out std_logic);
end MVLS ;
Z_BUS(3) <= A_BUS(3) and B_BUS(3);
Z_BUS(2) <= A_BUS(2) and B_BUS(2);
architecture EX of MVLS is
Z_BUS(1) <= A_BUS(1) and B_BUS(1);
begin
Z_BUS(0) <= A_BUS(0) and B_BUS(0);
Z <= A and not(B or C);
end EX ;
if A = B then
Z <= '1';
else
Z <= '0';
end if;
26
Instrukcje
WSPÓABIEŻNE I SEKWENCYJNE
Współbieżne (Concurrent assignment statement)
Sekwencyjne (Sequential assignment statement)
27
Instrukcje
Zachowanie układu jest niezależne od kolejności
Współbieżne:
instrukcji przyporządkowania sygnałów.
X <= A + B;
Stosowane w specyfikacji typu  przepływ danych
Z <= C + X;
(dataflow description).
Z <= C + X;
X <= A + B;
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.
28
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
29
Przykład c.d.
Tak samo
c <= a and b; d <= a or b;
d <= a or b; c <= a and b;
30
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
31
Instrukcja podstawowa
Składnia:
signal_name <= expression;
signal_name <= expression after delay;
Przykład:
ENTITY simpsig IS
PORT (a, b: IN BIT;
c, d: OUT BIT) ;
END simpsig;
ARCHITECTURE arch1 OF simpsig IS
BEGIN
c <= a AND b;
d <= b;
END arch1;
32
Instrukcja podstawowa (przykładzik)
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
33
Instrukcja selektywna
Składnia:
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;
34
Instrukcja selektywna -with-select
Używana wewnątrz architektury
Podobieństwo do znanej instrukcji case
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;
35
Instrukcja warunkowa
Składnia:
signal_name <= value_a when condition1 else
value_b when condition2 else
value_c when condition3 else ...
value_x;
36
Instrukcja warunkowa -when-else
Odpowiednik instrukcji if-then-else
Składnia
sygnał <= wart1 when warunek1 else
wart2 when warunek2 else
[...]
wartN when warunekN;
A <= In1 when war1=1 else
In2 when war2=2 else
In3;
37
Przykładzik (multiplekser)
entity multiplekser is -- jednostka o nazwie 'multiplekser'
port(i0,i1,i2,i3 : in bit; -- deklaracja wejsc informacyjnych
s1,s0 : in bit; -- deklaracja wejsc sterujacych
Y: out bit); -- deklaracja wyjscia)
end multiplekser;
architecture opis of multiplekser is
-- architektura o nazwie 'opis' opisujaca jednostke multiplekser
signal wybor : integer range 0 to 3;
-- deklaracja sygnalu pomocniczego o nazwie 'wybor'
-- 'wybor' jest liczba calkowita z zakresu od 0 do 3
begin
with wybor select
Y <= i0 when 0,
i0
i1 when 1,
i2 when 2,
i1
Y
i3 when others;
i2
i3
wybor <= 0 when s1='0' and s0='0' else
s0
s1
1 when s1='0' and s0='1' else
2 when s1='1' and s0='0' else
3;
end opis;
38
Instrukcja podstawowa (przykład)
A
B
X
library ieee;
MUX
C
use ieee.std_logic_1164.all;
D
entity mux is port (
a, b, c, d: in std_logic_vector (3 downto 0);
S1 S0
s: in std_logic_vector (1 downto 0);
x: out std_logic_vector (3 downto 0));
end mux;
39
Instrukcja podstawowa (przykład c.d.)
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
40
Instrukcja selektywna (przykład)
library ieee;
use ieee.std_logic_1164.all;
entity mux is port(
a, b, c, d: in std_logic_vector(3 downto 0);
s: in std_logic_vector(1 downto 0);
x: out std_logic_vector(3 downto 0);
end mux;
architecture archmux of mux is
begin
with s select
x <= a when  00 ,
b when  01 ,
c when  10 ,
d when others;
end archmux;
41
Instrukcja warunkowa (przykład)
library ieee;
use ieee.std_logic_1164.all;
entity mux is port (
a, b, c, d:in std_logic_vector (3 downto 0);
s: in std_logic_vector (1 downto 0);
x: out std_logic_vector (3 downto 0));
end mux;
architecture archmux of mux is
begin
x <= a when (s =  00 ) else
b when (s =  01 ) else
c when (s =  10 ) else
d;
end archmux;
42
Ostrzeżenie przed pochopnym wnioskiem
Wniosek: instrukcja podstawowa jest niewygodna
do specyfikacji układów
Można podać wiele przykładów, w których
zastosowanie instrukcji podstawowej
prowadzi do znacznie lepszej implementacji
Jednym z nich jest komparator
(patrz Układy cyfrowe, bloki funkcjonalne)
43
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;
44
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);
i3 <= NOT (a3 XOR b3);
i2 <= NOT (a2 XOR b2);
i1 <= NOT (a1 XOR b1);
i0 <= NOT (a0 XOR b0);
45
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;
46
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
lepszej implementacji!!!
47
Koder z priorytetem
Tablica prawdy
w3 w2 w1 w0 y1 y0 z
0000--0
0001001
001 " 011
01 "" 101
1 "" " 111
48
Koder z priorytetem (instrukcja warunkowa)
library ieee;
use ieee.std_logic_1164.all;
entity priority is
port (w : in std_logic_vector (3 downto
0);
y: out std_logic_vector(1
downto 0);
z: out std_logic);
end priority;
architecture behavior of priority is
begin
y <=  11 when w(3) =  1 else
 10 when w(2) =  1 else
 01 when w(1) =  1 else
 00 ;
z <=  0 when w =  0000 else  1 ;
end behavior;
49
Koder z priorytetem (instrukcja selektywna)
entity priority is
port (w : in std_logic_vector (3
downto 0);
y: out std_logic_vector(1
downto 0);
z: out std_logic);
end priority;
architecture behavior2 of priority is
begin
with w select
y <= "00" when "0001",
with w select
"01" when "0010",
z <=  0 when "0000",
"01" when "0011",
 1 when others;
"10" when "0100",
"10" when "0101",
end behavior2;
"10" when "0110",
"10" when "0111",
"11" when others;
50
Instrukcje sekwencyjne
Instrukcje sekwencyjne są stosowane w specyfikacji
behawioralnej (behavioral description)
Przede wszystkim w tzw. procesach (process)
Proces
Instrukcja IF
Instrukcja CASE
51
Proces
Składnia:
Process ( )
begin
..
Name :PROCESS (sensitivity_list)
end process
BEGIN
Instrukcja sekwencyjna #1
Lista czułości
Instrukcja sekwencyjna #2
.......
Instrukcja sekwencyjna # N
Instrukcje sekwencyjne są
END PROCESS name;
wykonywane kolejno
jedna po drugiej
Etykieta jest opcjonalna
52
Procesy
Konstrukcja wykonywana równolegle
Występuje wewnątrz architektury
Zawiera opis zachowania
Instrukcje wewnętrzne wykonywane są
sekwencyjnie
Zawiera:
T listę czułości (ang. sensitivity list);
jest to lista sygnałów, których zmiana
powoduje aktywację procesu
53
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
Składnia:
[etykieta:] process [ ( lista_czułości ) ] [ is ]
--definicje i deklaracje
begin
--instrukcje_sekwencyjne;
end process [ etykieta ] ;
54
Przykładowa organizacja procesu
architecture A of E is
begin
-- concurrent statements
P1 : process
begin
-- sequential statements
end process P1;
-- concurrent statements
P2 : process
begin
-- sequential statements
end process P2;
-- concurrent statements
end A;
55
Instrukcja warunkowa if then else
Jest to instrukcja sekwencyjna
Część elsifmoże wystąpić dowolną ilość
razy
Część elsenie musi wystąpić
Część elsifmoże używać wielokrotnie
Może być zagnieżdżana
if warunekthen
Składnia:
sekwencja_instrukcji1
{elsifwarunekthen
sekwencja_instrukcji2 }
[else
sekwencja_instrukcji3]
end if;
56
if then else
FT
if warunek
F
T
sekwencja_instrukcji1
elsif warunek
T
F
elsif warunek
sekwencja_instrukcji2
else
sekwencja_instrukcji3
sekwencja_instrukcji4
end if;
57
Przykład (bramka ex-or)
entity xor_gate is
port ( a: in bit;
b: in bit;
y: out bit);
end xor_gate;
architecture xor_gate_arch1 of xor_gate is
begin
gate:process(a, b)
if (q < 10 ) then
begin
a:= b;
if a=b then y<='0';
elsif (q = 10) then
else y<='1';
a:= c;
end if;
else a:= d;
end process gate;
end if;
end xor_gate_arch1;
architecture xor_gate_arch2 of xor_gate is
begin
Y <= '0' when a=b else '1';
end xor_gate_arch2;
58
Instrukcja wyboru -case
Instrukcja sekwencyjna
Podobna do instrukcji with select
Można określać kilka wartości lub zakres
Wartości nie mogą się powtarzać
Składnia (przykład):
casezm_wielow is
when wybór1 => sekwencja1_instrukcji ;
when wybór2 => sekwencja2_instrukcji ;
[when others => sekwencja3_instrukcji ; ]
end case;
59
Przykłady
entity mp is
port ( instr : in instrukcja;
addr : in integer;
data : inout integer:=0);
end mp;
case sterowanie is
architecture opis of mp is
when "00" => sel := 1
type regtype is array (0 to 255) of integer;
when "01" => sel := 1;
signal a, b : integer;
when "10" => sel := 2;
signal reg : regtype;
when others => sel := 3;
begin
end case;
process(instr)
begin
case instr is
when lda => a<= data;
when ldb => b<= data;
when add => a<= a + b;
case inp is
when sub => a<= a - b;
when 0 => Y <= A;
when sta => reg(addr)<=a;
when 1 to 3 => Y <= B;
when stb => reg(addr)<=b;
when 4|6|8 => Y <= C;
when outa => data<= a;
when others => Y <= 'X';
when xfr => a <= b;
end case;
end case;
end process;
end opis;
60
Instrukcja IF
if CONDITION then
if CONDITION then
-- sequential statements
-- sequential statements
elsif CONDITION then
end if;
-- sequential statements
elsif CONDITION then
if CONDITION then
-- sequential statements
-- sequential statements
else
else
-- sequential statements
-- sequential statements
end if; end if;
61
Instrukcja IF(przykład)
process (A, B, C, X)
begin
if (X = "0000") then
Z <= A;
elsif (X <= "0101") then
Z <= B;
else
Z <= C;
end if;
end process;
62
InstrukcjaCASE (składnia)
case OBJECT is
when VALUE_1 =>
-- statements
when VALUE_2 =>
-- statements
when VALUE_3 =>
--statements
--etc...
end case;
63
InstrukcjaCASE(przykład)
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;
end case;
end process;
64
Archmux1 i Archmux2
entity mux is port(
A
a, b, c, d: in bit;
s: in bit_vector(1 downto 0);
B
X
x: out bit); MUX
C
end mux;
D
architecture archmux1 of mux is
begin
mux4_1:process (a, b, c, d, s)
S1 S0
begin
architecture archmux2 of mux is
if s = "00" then
begin
x <= a;
x <= a when (s = "00") else
elsif s = "01" then
b when (s = "01") else
x <= b;
c when (s = "10") else
elsif s = "10" then
d;
x <= c;
end archmux2;
else
x <= d;
end if;
end process mux4_1;
end archmux1;
65
Archmux3 i Archmux4
architecture archmux3 of mux is
begin
process (a,b,c,d,s)
begin
case s is
when "00" => x<= a;
when "01" => x<= b;
when "10" => x<= c;
when "11" => x<= d;
end case;
end process;
end archmux3;
architecture archmux4 of mux is
signal SEL : bit_vector(1 downto 0);
begin
with SEL select
x <= a when "00",
b when "01",
c when "10",
d when "11";
SEL <= s;
End archmux4;
66
Archmux5
Architecture archmux5 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 archmux5;
67
Archmux6
architecture archmux6 of mux is
begin
mux4_1:process (a, b, c, d, s)
begin
if s = "00" then
x <= a;
end if;
if s = "01" then
x <= b;
end if;
if s = "10" then
x <= c;
end if;
if s = "11" then
x <= d;
end if;
end process mux4_1;
end archmux6;
68
Archmux1 i Archmux2
A
B
X
C
D
S1
S0
69
N0B
N0D
N0C
Archmux3 i Archmux4
A
B
X
C
D
S1
S0
70
N0E
N0D
N0C
N0B
Archmux5
A
B
X
C
D
S1
S0
71
Archmux6
C
B
A
N0E
X
D
N0A
S1
S0
72
N0F
N0D
N0H
N0G
Synteza układów sekwencyjnych
VHDL umożliwia bezpośrednią reprezentację
automatu (układu sekwencyjnego). Tablicę
przejść-wyjść można bezpośrednio przetłumaczyć
na specyfikację VHDL.
Wystarczą do tego instrukcje sekwencyjne:
a) wyboru (CASE) oraz
b) warunkowa (IF THEN ELSE).
73
Automat
Przerzutniki
Układ kombinacyjny
Stan następny
(next_state)
Wejścia
CLK EVENT
Case... When...
and
If... Then
CLK= 1
Else
Stany bieżące
(present_state)
74
Zasady specyfikacji automatu
Stany automatu są reprezentowane przez typ
wyliczeniowy, którego wartości są nazwami stanów
Funkcje przejść wyjść są realizowane instrukcjami CASE,
IF THEN wewnątrz PROCESU
Synchronizm zapewnia odpowiednie wyrażenie testujące
zbocze sygnału zegarowego
Specyfikacja jedno- lub dwu-procesowa
Problem kodowania stanów!
75
Przykład: automat Moore a
Rst
x
x = 1
x = 0
s 0 1 z
A/z = 0
B/z = 0
x = 0
A A B 0
x = 1
x = 0
B A C 0
C/z = 1
x = 1
C A C 1
76
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;
77
Automat Moore a - wersja I
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;
78
Automat Moore a - wersja II
ARCHITECTURE funkcja_przejsc OF simple IS
TYPE State_type IS (A, B, C);
SIGNAL Q_present, Q_next : State_type ;
BEGIN
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;
79
Automat Moore a z kodowaniem stanów
ARCHITECTURE funkcja_przejsc OF simple IS
SIGNAL Q_present, Q_next: STD_LOGIC_VECTOR(1 DOWNTO 0)
CONSTANT A :STD_LOGIC_VECTOR(1 DOWNTO 0) := "00";
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;
80
ASM
Diagramy stanów (tablice p-w) są niewystarczające do opisu US (FSM)
Mało elastyczne przy opisie skomplikowanych układów
Nie przystosowane do stopniowego ulepszania opisu
Nie opisują algorytmu, tzn. sekwencji czynności wykonywanych
w zależności od danych wejściowych
algorytm = sekwencja +przetwarzanie danych
oddzielają sterowanie od danych
Wady te są eliminowane w:
" Algorithmic State Machine (ASM)
81
Graf ASM
...zbudowany z wierzchołków (klatek) i krawędzi
Klatka stanu
Klatka wyjściowa
(operacyjna)
Klatka decyzyjna
warunkowa
typu Moore a
(warunkowa)
(typu Mealy ego)
Nazwa stanu
Sygnaływyjściowe
Sygnały wyj.
1 (True)
0 (False)
Sygnały
lub warunkowe
wejściowe
lub mikrooperacje
mikrooperacje
82
Graf ASM automatu Moore a
x
s 0 1 z
A A B 0
B A C 0
C A C 1
z
83
System cyfrowy
Dane
wejściowe
Wejścia Sygnały
Część operacyjna
kontrolera sterujące
Część (Datapath)
sterująca
Mikrooperacje
(kontroler)
wywoływane przez
Stan Stan części
sygnały binarne
kontrolera operacyjnej
Wynik
84
Wprowadzanie komponentu ...
. . . do nowej struktury
Deklaracja i podstawienie komponentu:
Komponent może być zadeklarowany w bloku architektury
lub w pakiecie
Instrukcja podstawienia jest też nazywana
instrukcją konkretyzacji
85
Podstawienie komponentu
Instrukcja podstawienia (łączenia) komponentu to
współbieżna instrukcja określająca wzajemne połączenie
sygnałów i podukładów zwanych komponentami
Nagłówek: nazwa_komp PORT MAP (lista sygnałów)
Przyporządkowanie
sygnałów (asocjacja)
Dwa sposoby przyporządkowania:
a) asocjacja pozycyjna
b) asocjacja nazw
86
Wielokrotne stosowanie komponentów:
pakiety
Pakiet stanowi jednostkę projektową, w której są
zdefiniowane typy, komponenty i inne elementy, które mogą
być wykorzystane wielokrotnie w innych jednostkach
projektowych. Pakiety są przechowane w bibliotekach
Dostęp do pakietu osiąga się deklaracją:
LIBRARY work;
USE work.package_name.all;
work - robocza biblioteka, do której każdy kompilator VHDL ma
bezpośredni dostęp
87
Typowe zadanie
Zbudować większy multiplekser mając do dyspozycji mniejsze
Mniejszy mux4to1
Większy mux16to1
Mniejszy zadeklarujemy w pakiecie
jako component
88
Deklaracja komponentu - przykład
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
PACKAGE mux4to1_package IS
COMPONENT mux4to1
PORT ( d0, d1, d2, d3 : IN STD_LOGIC ;
a : IN STD_LOGIC_VECTOR(1 DOWNTO 0) ;
y : OUT STD_LOGIC ) ;
END COMPONENT ;
END mux4to1_package ;
89
Podstawienie komponentu - przykład
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
LIBRARY work ;
USE work.mux4to1_package.all ;
ENTITY mux16to1 IS
PORT ( d : IN STD_LOGIC_VECTOR(0 TO 15) ;
a : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ;
y : OUT STD_LOGIC ) ;
END mux16to1 ;
ARCHITECTURE Structure OF mux16to1 IS
SIGNAL m : STD_LOGIC_VECTOR(0 TO 3) ;
BEGIN
Mux1: mux4to1 PORT MAP ( d(0), d(1), d(2), d(3), a(1 DOWNTO 0), m(0) ) ;
Mux2: mux4to1 PORT MAP ( d(4), d(5), d(6), d(7), a(1 DOWNTO 0), m(1) ) ;
Mux3: mux4to1 PORT MAP ( d(8), d(9), d(10), d(11), a(1 DOWNTO 0), m(2) ) ;
Mux4: mux4to1 PORT MAP ( d(12), d(13), d(14), d(15), a(1 DOWNTO 0), m(3) ) ;
Mux5: mux4to1 PORT MAP
( m(0), m(1), m(2), m(3), a(3 DOWNTO 2), y ) ;
END Structure ;
90
Komponenty systemowe
Makrofunkcje, Megafunkcje
Zorientowane technologicznie, Niezależne od technologii
System MAX + plus II jest wyposażony w:
Library of Parameterized Modules (LPM)
Moduły w LPM są
a) niezależne od technologii
b) parametryzowane
91
Konfiguracja modułu LPM
Konfiguracja i wyposażenie jest definiowana parametrami
Moduł sumator/układ odejmujący: lpm_add_sub
a) LPM_WIDTH
b) LPM_CONFIGURATION
a) określa liczbę bitów sumatora
b) określa operację: liczby ze znakiem (signed) lub
liczby bez znaku (unsigned)
92


Wyszukiwarka

Podobne podstrony:
SIMULINK MATLAB to VHDL Route
lab1 VHDL
tut?2 sdram vhdl
VHDL Zalecenia
PUP niest wyk5 VHDL[51F] v1
lab6 VHDL
vhdl
lab8 VHDL
Jezyki opisu sprzetu VHDL
TC VHDL b
PUCY VHDL Uklady sekwencyjne
Język opisu sprzętu VHDL
Język opisu sprzętu VHDL
VHDL 1j
lab4 VHDL
VHDL 2rl
ELC VHDL

więcej podobnych podstron