Podstawy Techniki Cyfrowej i Mikroprocesorowej 1

Transkrypt

Podstawy Techniki Cyfrowej i Mikroprocesorowej 1
Programowalne układy cyfrowe –
Studia niestacjonarne II – Wykład 5
Podstawy języka VHDL
Very high speed integrated Hardware Description Language
dr inŜ. Sławomir Sambor
[email protected]
ITA, budynek C-5 pokój 708,
Tel. 0 71 320 30 78
http://zstux.ita.pwr.wroc.pl/slawek/
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
1
Jednostka projektowa
Język VHDL
DESIGN ENTITY
JEDNOSTKA PROJEKTOWA
ENTITY DECLARATION
WEJŚCIE/WYJŚCIE
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)
PARAMETRY
ARCHITECTURE BODY
FUNKCJE
I DZIAŁANIE
entity HALFADD is
port (A,B : in bit;
SUM, CARRY : out bit);
end HALFADD;
architecture BEHAVIORAL of HALFADD is
begin
SUM <= A xor B;
CARRY <= A and B;
end BEHAVIORAL;
Jednostka projektowa języka VHDL
Najprostsza struktura pliku
Słowo kluczowe
Komunikacja
z otoczeniem
entity
Key Word
entity HALFADD is
Deklaracje
port (A,B : in bit;
Sygnałów we/wy
SUM, CARRY : out bit);
end HALFADD;
architecture
architecture
architecture
architecture BEHAVIORAL of HALFADD is
begin
SUM <= A xor B;
CARRY <= A and B;
Działanie układu
Podstawy Techniki Cyfrowej i
Mikroprocesorowej
end BEHAVIORAL;
Sekcja opisu logicznego
1
Jednostka deklaracji
Jednostka deklaracji
entity HALFADD is
port (A,B : in bit;
SUM, CARRY : out bit);
end HALFADD;
entity HALFADD is
Deklaracja sygnałów
•in - wejściowy
port (A,B : in bit;
• nazwa
•out - wyjściowy
• tryb
•inout - dwukierunkowy
• typ danych
•buffer - wyjściowy z moŜliwością odczytu
SUM, CARRY : out bit);
end HALFADD;
Typy danych: bit, bit_vector, integer, Boolean
Style specyfikacji - przykłady
Blok architektury
architecture Budowa_Sumatora1 of Sumator is
signal S1, S2 : bit;
begin
Bramka_Not1 : entity Work.Gate_Not port map (wej1, S1);
Bramka_Not2 : entity Work.Gate_Not port map (wej2, S2);
Bramka_And1 : entity Work.Gate_And port map (S1, S2, wyj);
end Budowa_Sumatora1;
Architektura opisuje sposób działania jednostki (entity)
lub jej budowę (strukturę).
architecture BEHAVIORAL of HALFADD is
begin
SUM <= A xor B;
Style specyfikacji
CARRY <= A and B;
• funkcjonalny (behavioralny)
end BEHAVIORAL;
architecture Budowa_Sumatora2 of Sumator is
signal S1, S2 : bit;
begin
process (wej1, wej2)
S1 <= not wej1 after 2 ns;
S2 <= not wej2 after 2 ns;
wyj <= S1 and S2 after 2 ns;
end process;
end Budowa_Sumatora2;
• przepływ danych (dataflow)
• strukturalny
Blok architektury
Elementy strukturalne języka VHDL
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;
Podstawy Techniki Cyfrowej i
Mikroprocesorowej
Słowa kluczowe
Identyfikatory
Obiekty danych
Operatory
Atrybuty
Instrukcje
2
Słowa kluczowe
Identyfikatory
abs downto library postponed Srl
access else linkage procedure Subtype
after elsif literal process Then
alias end loop pure To
BEGIN, END..
all entity map range Transport
and exit mod record Type
IF, THEN, CASE...
architecture file nand register Unaffected
array for new reject Units
AND, OR, NAND, XOR...
assert function Next rem Until
attribute generate Nor report Use
SIGNAL, COMPONEN, IN, OUT
begin generic Not return Variable
block group Null rol Wait
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
body guarded Of ror When
buffer if On select While
bus impure Open severity With
case in Or signal Xnor
component inertial Others shared Xor
configuration inout Out sla
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.
constant is Package sll
disconnect label Port sra
Obiekty danych
Obiekty danych słuŜą do przechowywania wartości.
WyróŜnia się trzy klasy obiektów:
• sygnał – signal
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 ;
• zmienne – variable
entity HALFADD is
• stałe – constant
port (A,B : in bit;
Wartości zmiennych są przypisywane natychmiast, wartości sygnałów – z pewnym
opóźnieniem.
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.
SUM, CARRY : out bit);
end HALFADD;
Wartości dozwolone w sygnale typu bit: ‘0’, ‘1’
Przy operacji przyporządkowania sygnałów, typy
danych po kaŜdej stronie operatora przyporządkowania
muszą być zgodne
Typy danych
Predefiniowane typy danych
WyróŜnia się 10 typów danych sygnału:
STD_LOGIC, STD_LOGIC_VECTOR
BIT, BIT_VECTOR,
STD_LOGIC, STD_LOGIC_VECTOR,
(STD_ULOGIC),
SIGNED, UNSIGNED, INTEGER,
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
ENUMERATION, BOOLEAN
Podstawy Techniki Cyfrowej i
Mikroprocesorowej
3
Sygnały
Sygnał moŜe być zdefiniowany w jednostce deklaracji oraz w
części
deklaracyjnej architektury lub pakietu.
Sygnał posiada dwie cechy z nim skojarzone:
Stałe
typ
wartość
Składnia
signal nazwa_syg: typ_syg[:=wart_pocz];
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”;
np.:
signal s1, s2 : bit;
signal liczba : integer := 7;
Typ wyliczeniowy
Typ wyliczeniowy c.d.
Typ wyliczeniowy (enumeration type) moŜe być definiowany przez uŜytkownika.
Przykład:
Typ wyliczeniowy jest kodowany na minimalnej
type MY_STATE is (RESET, IDLE, RW_CYCLE, INT_CYCLE);
liczbie bitów w zapisie wg NKB:
...
RESET <= ”00”
signal STATE : MY_STATE;
IDLE <= ”01”
signal TWO_BIT : bit_vector (0 to 1);
RW_CYCLE <= ”10”
...
INT_CYCLE <= ”11”
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
Tablice
Tablice
Typy BIT_VECTOR oraz STD_LOGIC_VECTOR są
signal Z_BUS:bit_vector(3 downto 0);
tablicami sygnałów typu BIT i STD_LOGIC
signal C_BUS:bit_vector(1 to 4);
Dane typu tablicowego mogą być definiowane przez
uŜytkownika
Z_BUS <= C_BUS;
Zakres tablicy jest definiowany pod odpowiednią deklaracją za
pomocą słów kluczowych: „to” „downto”
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);
TYPE Byte IS ARRAY (7 DOWNTO 0) OF STD_LOGIC;
Z_BUS(0) <= C_BUS(4);
SIGNAL X : Byte;
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
Podstawy Techniki Cyfrowej i
Mikroprocesorowej
4
Atrybuty
Przykład (atrybuty)
Dostarczają dodatkowych informacji o obiektach (np. sygnałach,
zmiennych, typach lub komponentach)
Pewna liczba atrybutów jest predefiniowana
type count is integer range 0 to 127
type states is (st1, st2, st3, st4);
Składnia
obiekt’atrybut[(parametr)];
Przykładowe atrybuty
count’left = 0
count’right = 127
states’left = st1
‘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
states’high = st4
If Clock’event and Clock = ‘1’ then Q := D;
Operatory - przykłady
Operatory
signal A_BUS, B_BUS, Z_BUS :
library IEEE;
use IEEE.Std_Logic_1164.all;
std_logic_vector (3 downto 0);
entity MVLS is
Z_BUS <= A_BUS and B_BUS;
port (A,B,C : in std_logic;
Z_BUS(3) <= A_BUS(3) and B_BUS(3);
Z : out std_logic);
Z_BUS(2) <= A_BUS(2) and B_BUS(2);
end MVLS ;
Z_BUS(1) <= A_BUS(1) and B_BUS(1);
architecture EX of MVLS is
Z_BUS(0) <= A_BUS(0) and B_BUS(0);
begin
if A = B then
Z <= A and not(B or C);
end EX ;
Z <= '1';
else
Z <= '0';
end if;
Instrukcje
WspółbieŜne instrukcje przypisania
sygnału
WSPÓŁBIEśNE I SEKWENCYJNE
WspółbieŜne (Concurrent assignment statement)
(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)
Sekwencyjne (Sequential assignment statement)
WspółbieŜne:
X <= A + B;
Zachowanie układu jest niezaleŜne od kolejności
Z <= C + X;
instrukcji przyporządkowania sygnałów.
Z <= C + X;
Stosowane w specyfikacji typu „przepływ danych”
X <= A + B;
(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.
Podstawy Techniki Cyfrowej i
Mikroprocesorowej
– when –else
– with –select
5
Instrukcja podstawowa
Instrukcja podstawowa (przykład)
Składnia:
library ieee;
signal_name <= expression;
use ieee.std_logic_1164.all;
signal_name <= expression after delay;
entity mux is port (
Przykład:
a, b, c, d : in std_logic ;
ENTITY simpsig IS
s: in std_logic_vector (1 downto 0) ;
PORT (a, b: IN BIT;
x: out std_logic ) ;
c, d: OUT BIT) ;
end mux;
END simpsig;
architecture archmux of mux is
ARCHITECTURE arch1 OF simpsig IS
begin
BEGIN
x <= (a and not(s(1)) and not(s(0)))
c <= a AND b;
or (b and not(s(1)) and (s(0))
d <= b;
or (c and (s(1) and not(s(0)))
END arch1;
or (d and (s(1) and (s(0));
end archmux
Instrukcja selektywna
Instrukcja selektywna - with-select
Składnia:
with sel_sig select
signal_name <= value_a when value1_of_sel_sig ,
value_b when value2_of_sel_sig ,
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ć
value_c when value3_of_sel_sig , ...
value_x when last_value_of_sel_sig;
Przykład:
with INT_A select
Z <= A when 0,
B when 1 to 3,
C when 4 | 6 | 8,
D when others;
Instrukcja warunkowa
Instrukcja warunkowa - when-else
Odpowiednik instrukcji if-then-else
Składnia:
signal_name <= value_a when condition1 else
value_b when condition2 else
Składnia
sygnał <= wart1 when warunek1 else
wart2 when warunek2 else
value_c when condition3 else ...
[...]
value_x;
wartN when warunekN;
A <= In1 when war1=1 else
In2 when war2=2 else
In3;
Podstawy Techniki Cyfrowej i
Mikroprocesorowej
6
Proces
Instrukcje sekwencyjne
Instrukcje sekwencyjne są stosowane w specyfikacji
behawioralnej (behavioral description)
Name :PROCESS (sensitivity_list)
Przede wszystkim w tzw. procesach (process)
BEGIN
Składnia:
process ( )
begin
..
end process
Lista czułości
Instrukcja sekwencyjna #1
Instrukcja sekwencyjna #2
Proces
.......
Instrukcja IF
Instrukcja sekwencyjna # N
Instrukcja CASE
END PROCESS name;
Procesy c.d.
Procesy
Konstrukcja wykonywana równolegle
Występuje wewnątrz architektury
Zawiera opis zachowania
Instrukcje wewnętrzne wykonywane są sekwencyjnie
Zawiera:
Instrukcje sekwencyjne są
wykonywane kolejno
jedna po drugiej
listę czułości (ang. sensitivity list);
jest to lista sygnałów, których zmiana
powoduje aktywację procesu
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 ] ;
Przykładowa organizacja procesu
Instrukcja warunkowa if then else
architecture A of E is
begin
-- concurrent statements
P1 : process
begin
-- sequential statements
end process P1;
-- concurrent statements
Jest to instrukcja sekwencyjna
Część elsif moŜe wystąpić dowolną ilość razy
Część else nie musi wystąpić
Część elsif moŜe uŜywać wielokrotnie
MoŜe być zagnieŜdŜana
Składnia: if warunek then
P2 : process
begin
sekwencja_instrukcji1
{elsif warunek then
-- sequential statements
end process P2;
sekwencja_instrukcji2 }
[else
-- concurrent statements
end A;
Podstawy Techniki Cyfrowej i
Mikroprocesorowej
sekwencja_instrukcji3]
end if ;
7
if then else
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)
begin
if a=b then y<='0';
else y<='1';
end if;
end process gate;
end xor_gate_arch1;
architecture xor_gate_arch2 of xor_gate is
begin
Y <= '0' when a=b else '1';
end xor_gate_arch2;
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):
case zm_wielow is
when wybór1 => sekwencja1_instrukcji ;
when wybór2 => sekwencja2_instrukcji ;
[when others => sekwencja3_instrukcji ; ]
end case;
Podstawy Techniki Cyfrowej i
Mikroprocesorowej
Przykłady
case sterowanie is
when "00" => sel := 1
when "01" => sel := 1;
when "10" => sel := 2;
when others => sel := 3;
end case;
case inp is
when 0 => Y <= A;
when 1 to 3 => Y <= B;
when 4|6|8 => Y <= C;
when others => Y <= 'X';
end case;
entity mp is
port ( instr : in instrukcja;
addr : in integer;
data : inout integer:=0);
end mp;
architecture opis of mp is
type regtype is array (0 to 255) of integer;
signal a, b : integer;
signal reg : regtype;
begin
process(instr)
begin
case instr is
when lda => a<= data;
when ldb => b<= data;
when add => a<= a + b;
when sub => a<= a - b;
when sta => reg(addr)<=a;
when stb => reg(addr)<=b;
when outa => data<= a;
when xfr => a <= b;
end case;
end process;
end opis;
8