Transcript Slajd 1

Projektowanie systemów cyfrowych
z wykorzystaniem języka VHDL
Układy kombinacyjne
Wprowadzenie
•
VHDL - Very (high speed integrated circuits) Hardware
Description Language
Etapy projektowania:
1. Zdefiniowanie założeń i wymagań projektowych
2. Opisanie projektu w języku VHDL
3. Kompilacja
4. Symulacja kodu źródłowego
5. Synteza, optymalizacja i dopasowanie projektu
6. Symulacja zrealizowanego projektu
7. Zaprogramowanie układu
NAND3
library ieee;
use ieee.std_logic_1164.all;
entity nand3 is -- deklaracja jednostki nand3
port (x1, x2, x3 in bit;
y out bit);
end nand3;
architecture bramka_nand of nand3 is
begin
y <= not (x1 and x2 and x3);
end bramka_nand;
Biblioteki i pakiety
•
•
•
•
Biblioteka to miejsce do którego mogą być kompilowane jednostki
projektowe
Rodzaje bibliotek: ieee, work
Biblioteka ieee zawiera jednostki projektowe standardu IEEE:
– std_logic_1164
– numeric_std
– numeric_bit
Pakiet stanowi jednostkę projektową, w której zdefiniowane są typy,
komponenty, funkcje, itp.
Deklaracja biblioteki i pakietu:
library ieee;
use ieee.std_logic_1164.all;
Entity
entity - deklaracja interfejsu zawiera opis wejść i wyjść projektowanego
układu (port) oraz może zawierać opis wartości parametrów (generic)
Entity - składnia
entity nazwa_jednostki is -- deklaracja jednostki
[generic (lista_deklarowanych_stalych);]
[port (lista_sygnalow_wej. in|inout nazwa_typu;
lista_ sygnalow_wyj. out|buffer|inout nazwa_typu);]
end nazwa_jednostki;
Przykład:
entity nand3 is -- deklaracja jednostki nand3
port (x1, x2, x3 in bit;
y out bit);
end nand3;
Porty - rodzaje
in
out
inout
buffer
Typy skalarne
Typy skalarne:
•
integer – liczby całkowite
zakres predefiniowany od – (231 – 1) do + (231 – 1)
można ograniczyć zakres, np:
type przedzial is range -10 to +10;
range – pozwala uzyskać prostsze struktury logiczne po syntezie
subtype natural is integer range 0 to 2147483647;
subtype positive is integer range 1 to 2147483647;
•
real – liczby rzeczywiste
zakres predefiniowany od – 1.0E+38 do + 1.0E+38
można ograniczyć zakres, np:
type przedzial is range –10.0 to +10.0;
•
bit – typ bitowy
zakres to znaki: ‘0’ oraz ‘1’
Typy skalarne
• std_ulogic|std_logic – typ dziewięciowartościowy
(IEEE Std 1164-1993)
stan niezainicjowany
stan nieznany
Stosowane tylko
stan 0
do symulacji
stan 1
stan wysokiej impedancji
słaby stan nieznany (odczyt)
słabe 0 (odczyt), równoważne połączeniu przez rezystor z masą
słabe 1 (odczyt), równoważne połączeniu przewodu przez
rezystor z napięciem zasilania
′-′,-- stan nieokreślony, podobnie jak ′X′
′U′,
′X′,
′0′,
′1′,
′Z′,
′W′,
′L′,
′H′,
---------
Typy skalarne
std_logic kontra std_ulogic
Typ std_logic jest podtypem std_ulogic
•
boolean – typ boolowski
zakres to wyrażania: true oraz false
•
character – typ znakowy
zakres to: 128 znaków kodu ASCII, sposób zapisu: ‘a’, ‘b’
Typy skalarne
•
Typy wyliczeniowe
- definiowane przez listę nazw lub literałów (pojedynczych cyfr lub liter)
type kolory is (niebieski, zielony, czerwony);
type litery is (′A′,′B′,′C′,′c′);
•
Typy fizykalne
- stosowane do zdefiniowania jednostek miar
- nie mają fizycznego znaczenia dla syntezy
- jedynym predefiniowanym typem fizykalnym jest typ time
type time is range –2147483647 to 2147483647 units fs;
Typy złożone
•
array - typy macierzowe (tablicowe)
- obiekt składa się z wielu elementów tego samego typu
- najczęściej stosowane:
type bit_vector is array (natural range <>) of bit;
type std_logic_vector is array (natural range <>) of std_logic;
type std_ulogic_vector is array (natural range <>) of std_ulogic;
- definicja magistrali:
signal a: std_logic_vector(3 downto 0);
- macierz dwuwymiarowa:
type table_8x4 is array (0 to 7, 0 to 3) of bit;
Architecture
architecture – obiekt zawierający opis zawartości jednostki projektowej,
czyli funkcji realizowanej przez układ. Możliwe są trzy style opisu
architektury
Architecture – składnia
architecture nazwa_architektury of nazwa_jednostki is
[czesc_deklaracyjna: typy, sygnaly_wewnetrzne, stale]
begin
instrukcja_wspolbiezna;
--cialo architektury
end nazwa_architektury;
Przykład:
architecture bramka_nand of nand3 is
begin
y <= not (x1 and x2 and x3);
end bramka_nand;
Sygnały
•
signal
– obiekt reprezentujący połączenie pomiędzy składnikami projektu
– sygnałem może być typ skalarny, nie dopuszcza się sygnałów typu
wyliczeniowego lub plikowego
signal nazwa_sygnalu: nazwa_typu [ograniczenie][:= wyrazenie];
Przykład:
signal a: integer;
signal b: std_ulogic_vector(0 to 7);
Przypisanie wartości do sygnału:
nazwa_sygnalu <= wartość | wyrażenie
Przykład:
b <= ”110X0Z01”;
Zmienne
•
variable
– obiekt przechowywujący informację lokalną w procesie lub
podprogramie
– przypisanie wartości do zmiennej jest natychmiastowe
[shared] variable nazwa_zmiennej: nazwa_typu [ograniczenie]
[:=wyrazenie];
Przykład:
variable a: bit;
variable b: std_logic_vector(3 downto 0);
Przypisanie wartości do zmiennej:
nazwa_zmiennej := wartość | wyrażenie;
Przykład:
b := „1000”;
Stałe
•
constant
- obiekt, którego wartość jest zawsze stała
- musi mieć wartość początkową
- zakres „widzialności” stałej jest zależny od miejsca deklaracji
constant nazwa_stalej: typ := wyrazenie;
Przykład:
constant pi: real := 3.1415;
Operatory
•
Logiczne: and
or
•
Relacji: =
<
•
Przesunięć:
sll
•
Dodawania:
+
•
Znaku: +
•
Multiplikatywne: *
•
Różne: **
\=
nand
<=
srl
-
nor
>
xor
sla
sra
-
abs
not
=>
&
/
xnor
mod
rem
rol
ror
Instrukcje współbieżne
•
<= - przypisanie podstawowe
•
when-else – przypisanie warunkowe
– należy wymienić wszystkie możliwe warunki lub wpisać
wyrazenie_koncowe, które domyślnie spełnia warunek when others
– warunki badane są kolejno i realizowane jest przypisanie dla
pierwszego spełnionego warunku
Składnia:
sygnal <= wyrazenie when warunek [and | or warunek] else
wyrazenie_koncowe;
Przykład:
y <= a when s = ′0′ else
b when s = ′1′ else ′X′;
Instrukcje współbieżne
•
with-select-when – przypisanie selektywne
- do sygnału zostaje przypisana taka wartość, która jest uzależniona od
wartości sygnału selekcji
- wszystkie wartości wyboru muszą być określone i różne
Składnia:
with wybor select
sygnal <= wyrazenie when wartosc_wyboru,
sygnal <= wyrazenie_koncowe when others;
Przykład:
with s select
x <= a when ″00″,
b when ″01″,
c when ″10″,
d when ″11″,
″--″ when others;
Instrukcje współbieżne
•
process – jedna z konstrukcji projektowych
- proces może być w danej chwili wykonywany lub wstrzymany
- lista czułości określa, które sygnały powodują wykonanie procesu
(w układzie kombinacyjnym zawiera wszystkie jego wejścia)
Składnia:
[etykieta:] process [(lista_wrazliwosci)][is]
[czesc_deklaracyjna ] -- deklaracje zmiennych, stałych, typów
begin
[wait on (lista_wrazliwosci);] -- przy nieokreślonej liście
-- wrażliwości przy process;
-- „czekaj na zmianę sygnałów”
instrukcja_ sekwencyjna;
end process [etykieta];
Instrukcje sekwencyjne
•
if-then-elsif-else – sekwencyjne przypisanie warunkowe
- stosowane wewnątrz procesu
- warunki są typu boolean, warunki są sprawdzane kolejno
Składnia:
if warunek then
instrukcja sekwencyjna;
elsif warunek then
instrukcja sekwencyjna;
else
instrukcja sekwencyjna;
Przykład:
if R = ′1′ then
Q <= ′0′;
elsif C = ′1′ then
Q <= D;
else
Q <= Q;
end if;
end if;
cdn