[01] Układy cyfrowe - informacje ogolne
Str 42.
Weryfikacja projektu:
– symulacja funkcjonalna – zweryfikowanie poprawności logicznej
projektu, przeprowadzana przed etapem podziału (partitioning) i
rozmieszczenia (fitting)
– symulacja czasowa – po etapie podziału i rozmieszczenia system
uzupełnia informacje o projekcie o dane na temat zależności
czasowych, co umożliwia dokładne przeanalizowanie projektu pod
względem niepożądanych efektów związanych z opóźnieniami
wprowadzanymi przez rzeczywiste struktury cyfrowe,
[02] Specyfika_projektowania
Konwerter kodu binarnego na kod BCD
• W kodzie BCD (Binary Coded Decimal) każda cyfra liczby zapisanej w
kodzie dziesiętnym jest przedstawiana czterobitową liczbą binarną
• Np. liczba 489 zostanie zapisana jako wektor binarny z wykorzystaniem
12 bitów (3 ´ 4 bity)
4 8 9
0100 1000 1001
Metoda „+3” str 6
[03] Reprezentacja_systemow_cyfrowych
Reprezentacja funkcjonalna (behavioral) str 5
• Opisuje funkcjonalność (zachowanie) systemu.
• System jest traktowany jako ”czarna skrzynka” bez uwzględnienia
wewnętrznej reprezentacji.
• Ten sposób reprezentacji systemu skupia się na zależności sygnałow
wyjściowych od sygnałow wejściowych, definiując odpowiedzi
systemu na konkretne wartości sygnałów wejściowych.
• Istnieje wiele sposobów na podanie charakterystyki wejsciowo-wyjściowej
systemu.
Reprezentacja strukturalna
• Opisuje wewnętrzną realizację (strukturę) systemu.
• Podana jest dokładna specyfikacji jakie komponenty zostały użyte i jak są
ze sobą połączone
• W mniejszym lub większym stopniu jest to schemat albo diagram
systemu.
• Stosuje się pojęcie netlist do reprezentacji schematu systemu.
Reprezentacja fizyczna
• Opisuje fizyczną charakterystykę systemu.
• Rozszerza o dodatkowe informacje reprezentację strukturalną.
• Podany jest fizyczny rozmiar komponentów, fizyczne rozlokowanie
elementów na płytce krzemowej i ścieżek realizujących połączenia.
• Reprezentacja fizyczna dostarcza najbardziej dokładną informację o
systemie.
• Jest to ostateczna specyfikacja do wykorzystania w procesie wytwrzania.
Str 14,15,15
[!] -
Sumator
Str 19,20,21,22
[!]
– Kod U2 itp
Str 26
[!]
– dzialanie przerzutników =>
=> setup time –„jak wczesnie ustawic dane przed zatrzaśnięciem”
=> hold time – „jak długo tą wartośc trzeba trzymać”
[04] Jezyki_opisu_sprzetu_VHDL
Str 14 [!] – opis strukturalny - „z rysunku na VHDL”
- opis funkcjonalny
Testbench
• Jednym z podstawowych zastosowań języka VHDL jest symulacja, gdzie bada się
działanie układu dla zweryfikowania poprawności projektu.
• Symulację można porównać do badania fizycznego układu, którego wejścia
podłączamy do stymulatora (generatora testów) i obserwujemy wyjścia.
• Symulacja kodu VHDL to wykonywanie wirtualnego eksperymentu, w którym
fizyczny układ zastąpiono opisem VHDL.
• Dodatkowo można wykorzystać VHDL do opisu generatora testów i modułu
kolekcjonującego odpowiedzi układu i porównującego je ze wzorcem.
• Mechanizm taki nosi nazwę testbench
[05] Jezyk_VHDL_podstawym
Tryby portu
• in – jednokierunkowy port wejściowy
• out – jednokierunkowy port wyjściowy
• buffer – port wyjściowy, który pozwala na odczytywanie pojawiających sie na nim wartości
wewnątrz projektowanego układu umożliwiając stosowanie wewnętrznego
sprzężenia zwrotnego (
UWAGA: może sprawiać problemy z kompatybilnością
)
• inout – port dwukierunkowy umożliwiający stosowanie wewnętrznego sprzężenia
Zwrotnego
Str 15,16
[!]
– „Dlaczego to jest błędny zapis itp.”
Obiekty
Obiekty w języku VHDL to elementy posiadające nazwę i przechowujące
wartość określonego typu. Istnieje cztery rodzaje obiektów:
– sygnały (
signal
),
– zmienne (
variable
),
– stałe (
constant
),
– pliki (
file
),
– aliasy (
alias
).
Zmienne
• Reprezentuje symboliczny element pamięciowy, w którym można
przechowywać i modyfikować wartości.
• Nie istnieje bezpośredniego odwzorowania zmiennych w realizowanym
układzie cyfrowym.
• Zmienna może być deklarowana i wykorzystywana jedyne w
procesach.
• Głównym zastosowanie zmiennych jest abstrakcyjny opis funkcjonowania
systemu.
• Sposób deklaracji jest następujący:
variable
nazwa_zmiennej1, nazwa_zmiennej2, … : typ_danych;
• Przypisanie wartości:
nazwa_zmiennej := wartość;
• Przypisanie wartości zmiennym odbywa się bez opóźnienia, stąd
nazywane jest też natychmiastowym (immediate assigment).
Operatory
Priorytet
Operatory
Najwyższy
** abs not
* / mod rem
+ - (identycznoć, negacja)
& + - (suma i różnica)
sll srl sla sra rol ror
= /= < <= > >=
Najniższy
and or nand nor xor xnor
Operatory relacyjne
• Dla tablicy 1-D możliwe jest stosowanie operatorów relacyjnych
• Obydwa argumenty muszą mieć ten sam typ elementów
• Porównanie następuje element po elemencie zaczynając od lewej strony
• Jeśli jedna z tablic osiągnie wcześniej koniec jest uznawana z element
mniejszy
” 011” = ” 011” ”011” > ” 010 ” ” 011 ” > ” 00011” ” 0110 ” > ” 011”
• Dla:
signal
s1 : std_logic_vector (7
downto
0);
signal
s2 : std_logic_vector (3
downto
0);
if
(s1 = s2)
then
…
else
….
wyrażenie s1 = s2 jest zawsze fałszywe. Tego typu błąd jest trudny do
zlokalizowania.
Operatory konkatenacji i agregacja
• Bardzo przydatny operator dla manipulacji na tablicach 1-D
• Umożliwia łączenie elementów, małych tablic i fragmentów tablic w
większe tablice.
• Przesunięcie w prawo o dwie pozycje i dołączenie dwóch zer na początku:
y <= ”00 ” & a(7
downto
2);
• Przesunięcie w prawo o dwie pozycje i dołączenie dwóch bitów o wartości takiej
jak MSB (arithmetic shift):
y <= a(7) & a(7) & a(7
downto
2);
• Rotacja w praco o dwie pozycje:
y <= a(1
downto
0) & a(7
downto
2);
• Agregacja nie jest operatorem
y <= "10100000”;
y <= (‘1’, ‘0’, ‘1’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’);
y <= (7 => ‘1’, 6 =>‘0’, 5 =>‘1’, 4 =>‘0’, 3 =>‘0’, 2 =>‘0’, 1 =>‘0’, 0 =>‘0’);
y <= (7|5 => ‘1’, 6|4|3|2|1|0 =>‘0’);
y <= (7|5 => ‘1’,
others
=>‘0’);
• Wyzerowanie całego wektora
y <= (
others
=> ‘0’);
Typy danych pakietu IEEE numeric_std
• Definiuje typy signed i unsigned jako tablica elementów std_logic
• Dla unsigned tablica jest interpretowana w kodzie NKB
• Dla signed tablica jest interpretowana w kodzie U2
• Deklaracja obiektów nowego typu jest identyczna jak std_logic_vector:
signal
s1 : signed(7
downto
0);
• Dla celów operacji na obiektach nowego typu przeciążono operatory: abs, *, /,
mod, rem, +, –
• Operatory relacyjne także zostały przeciążone.
Przykład: ” 011” > ”1000” dla sygnałów typu:
– std_logic_vector
false
– pierwszy element ”011” jest mniejszy niż ”1000”
– unsigned
false
– 3 > 8
– signed
true
– 3 > – 8
[06] Realizacji_logiki_kombinacyjnej
Logika kombinacyjna
• Logika jest logiką kombinacyjna jeśli
wartość wyjść w danej chwili zależy
wyłącznie od wartości wejść w danej
chwili.
• Układ kombinacyjny nie posiada
wewnętrznej pamięci ani pętli
sprzężenia zwrotnego
• W języku VHDL realizowane głownie
przy wykorzystaniu instrukcji
wspołbieżnych rownież procesow
• Przykładami funkcji kombinacyjnych są:
– dekodery,
– multipleksery
– sumatory
Instrukcje współbieżne
• Wspołbieżne instrukcje przypisania sygnału (Concurrent Signal
Assignment Statements):
– podstawowe przypisanie do sygnału (simple signal assignment statement)
sygnał <= wyrażenie;
– warunkowe przypisanie do sygnału (conditional signal assignmenet statement)
sygnał <= wyrażenie1
when
wyrażenie_boolowskie1
else
wyrażenie2
when
wyrażenie_boolowskie2
else
wyrażenie3;
– selektywne przypisanie do sygnału (selected signal assignment statement)
with
expression
select
signal <= wyrażenie1
when
stała1,
wyrażenie2
when
stała2;
• Zachowanie układu jest niezależne od kolejności instrukcji
przyporządkowania sygnałow.
• Stosowane w specyfikacji typu „przepływ danych” (dataflow description).
Opis z wykorzystaniem instrukcji sekwencyjnych
• Proces (process) jest konstrukcją VHDL zawierającą zbior akcji wykonywanych
sekwencyjnie, znanych jaki instrukcje sekwencyjne.
• Proces sam w sobie jest instrukcją wspołbieżną.
• Może być interpretowany jako fragment układu zamknięty w czarnej skrzynce,
ktorego zachowanie można scharakteryzować instrukcjami sekwencyjnymi.
• Nie zawsze istnieje możliwość realizacji fizycznego układu działającego zgodnie z
opisanym zachowaniem.
• Wykonanie operacji wewnątrz procesu jest sekwencyjne, dlatego też kolejność
instrukcji ma znaczenie.
• Wiele instrukcji sekwencyjnych nie ma bezpośredniej reprezentacji w sprzęcie i są
trudne lub niemożliwe do realizacji.
Str 32
[!]
– funkcja std_match
Str 39,40
[!]
– lista czułości
Sekwencyjne przypisanie wartości sygnału
• Sekwencyjne przypisanie sygnału jest identyczne do
wspołbieżnego przypisania:
sygnał <= wyrażenie
•
W procesie nie można natomiast używać wspołbieżnej
instrukcji przypisania warunkowego i selektywnego
. (when else)
• Inaczej niż w wspołbieżnym przypisaniu wartości do
sygnału, w przypadku przypisania sekwencyjnego
wartość sygnałowi jest nadawana po zakończeniu
process
(a, b, c, d)
begin
y <= a
or
b;
y <= b
xor
c;
y <= a
and
d;
end process
;
procesu.
• Wewnątrz procesu sygnałowi może być przypisywana
wartość wielokrotnie. Tylko ostatnie przypisanie
decyduje o wartości sygnału.
• Procesy przedstawione obok dadzą tą samą realizację.
• Z wyjątkiem szczegolnych sytuacji należy unikać
wielokrotnych przypisań do sygnału.
Instrukcja warunkowa – if => TYLKO W PROCESIE !!
Niekompletne gałęzie
• W instrukcji
if
tylko gałąź
then
jest wymagana. Co oznacza, że poniższy kod jest
poprawny:
process
(a, b)
begin
if (
a = b)
then
eq <= ‘1’;
end if
;
end;
• Gdy sygnał ‘a’ jest rowny ‘b’ sygnał ‘eq’ otrzymuje wartość ‘1’. Dla przypadku, gdy
‘a’ nie jest rowne ‘b’ nie umieszczono gałęzi
else
. Zgodnie z semantyką języka
VHDL oznacza to, że sygnał ‘eq’ się nie zmienia i podtrzymuje poprzednią
wartość.
process
(a, b)
begin
if (
a = b)
then
eq <= ‘1’;
else
eq <= q;
end if
;
end;
str 48 – niekompletne przypisanie sygnałów
Instrukcja warunkowa – case
• Konstrukcja
case
wykorzystuje wartość wyrażenia
expression do wybory instrukcji, ktore mają być
wykonane.
• Wartości jakie daję wyrażenie expression muszą
być typu dyskretnego albo muszą być w postaci
tablicy jednowymiarowej.
• Wybory choice_i są wartościami (lub zbiorami
wartości), do ktorych może się wyliczyć wyrażenie
expression.
• Każdy z wyborow może się pojawić tylko raz i
wszystkie możliwe wartości wyrażenia expression
muszą być uwzględnione.
• Słowo kluczowe
others
może być użyte jako ostatni
wybor dla uwzględnienia wszystkich
niewymienionych wartości.
case
expression
is
when
choice_1 =>
statement_1;
statement_2;
when
choice_2 =>
statement_3;
statement_4;
●●●
when
choice_n =>
statement_k;
statement_k+1;
end case
;
+ str 56
Str 58
[!]
– ścieżka krytyczna
Przydatne kody:
-sterowanie wyświetlaczem str 8
-implementacja tablicy prawdy str 13
-multiplexer str 19
-demultiplexer str 54
[07] Realizacji_logiki_sekwencyjnej
Str 33
[!]
– automat Mealy’ego
Str 37
[!]
– automat Moore’a
Str od 44
[!]
- licznik
Logika sekwencyjna
• Logika jest sekwencyjna, gdy
wartość wyjść w danym momencie
czasu zależy od wartości wejść w
danej chwili i od wartości wejść w
chwilach poprzednich
• Logika sekwencyjna musi zawierać
elementy pamięciowe, zazwyczaj
przerzutniki
• Implementacja logiki sekwencyjnej
odbywa się zazwyczaj przy użyciu
automatow (maszyn stanow),
rejestrow lub zatrzaskow (latch)
-Przerzutnik D str 5
Automaty
• Automat opisywany jest zazwyczaj przez podanie diagramu stanow lub
tablicy przejść-wyjść
• Realizacja automatu odbywa się przez opisanie części realizującej element
pamięciowy przechowujący stan wewnętrzny i części obliczającej stan
następny i wartość wyjść
• W opisie VHDL automatow wykorzystuje się symboliczne nazwy stanow.
• Możliwe jest wprowadzenie kodowania stanow
• Kompilator automatycznie dokonuje następujących operacji:
– wyboru liczby bitow dla kodowania
– doboru przerzutnikow D lub T
– kodowania stanow
– zastosowania syntezy logicznej do obliczenia funkcji wzbudzeń
Automaty mogą być podzielone na automaty Moore’a i automaty Mealy’ego.
• Wyjścia w automacie Moore’a zależą tylko i wyłącznie od stanu wewnętrznego automatu.
• Wyjścia w automacie Mealy’ego zależą od stanu wewnętrznego automatu i wartości wejść
automatu.
• Wyjścia Mealy’ego pozwalają generować szybsze odpowiedzi na pobudzenia niż wyjścia
Moore’a.
• Szerokość sygnału na wyjściach Mealy’ego uzależniona jest od warunkow na wejściach
podczas, gdy szerokość sygnałow na wyjściach Moore’a jest stała i zależna od częstotliwości
zegara.
**************************************
• Reset asynchroniczny sprowadza
automat do odpowiednio stanu
niezależnie od zegara
• Reset synchroniczny sprowadza
automat do odpowiednio stanu
pod wpływem zbocza zegara
str 29 –resety
str 40
[!]
– kodowanie stanów (one-hot)
Realizacja logiki sekwencyjnej – porady
• Wszystkie rejestry powinny być taktowane tym samym sygnałem
zegarowym.
• Należy oddzielać elementy pamięciowe i opisywać je w oddzielnych
segmentach.
• Należy unikać jednosegmentowego stylu opisu.
• Elementy pamięciowe powinny być opisywane w prosty sposob tak, aby
narzędzia syntezy wykorzystywały elementy biblioteczne do ich realizacji.
• Reset asynchroniczny powinien być wykorzystywany jedynie do
inicjalizacji systemu.
• Do zerowania rejestrow w czasie pracy należy używać resetu
synchronicznego.
[08] Projekt_simpleUART
Asynchroniczna transmisja znakowa polega na przesyłaniu pojedynczych
znaków, które posiadają ściśle określony format.
– Początek znaku stanowi bit startu, jałowy z punktu widzenia przesyłanej
informacji i służący jedynie celom synchronizacyjnym.
– Po nim następuje pole danych, na które wprowadza się kolejne bity
stanowiące treść znaku.
– Bezpośrednio za polem danych przewidziano bit kontrolny, służący
zabezpieczeniu informacji znajdującej się na polu danych.
– Transmitowany znak kończy jeden lub dwa bity stopu.
Standard RS 232 (6)
W ramach jednostki informacyjnej bity przesyłane są synchronicznie -
zgodnie z taktem nadajnika. Natomiast poszczególne jednostki są
przesyłane asynchronicznie - ich wyprowadzanie nie jest synchronizowane
żadnym sygnałem, a więc odstęp pomiędzy nimi jest dowolny.
Czas trwania bitu w jednostce informacyjnej nazywa się odstępem
jednostkowym. Jego odwrotność określa szybkość transmisji w bodach (1
bd = 1 bit/s). Typowe wartości szybkości transmisji przy asynchronicznej
transmisji znakowej wynoszą: 1200, 2400, 4800, 9600 bd, co przy
założeniu 10-bitowej długości jednostki informacyjnej i przysłaniu znaków
bezpośrednio jeden za drugim odpowiada 120, 240, 480, 960 znakom na
sekundę.
[09] Projektowanie_z_wykorzystaniem_FSM
Automaty
• Automat FSM (Finite State Machine) opisywany jest zazwyczaj przez
podanie diagramu stanow lub tablicy przejść-wyjść
• Głownym zastosowaniem automatow FSM jest realizacja operacji, ktore
wykonywane są w sekwencji. Złożone systemy cyfrowe realizują
skomplikowane zadania lub algorytmy poprzez wykonywanie sekwencji
podstawowych operacji wykorzystując do tego informacje o stanie
systemu czy informacji z zewnątrz.
• Automat FSM działa jako układ sterowania US, ktorego zadaniem jest
koordynacja i zarządzanie operacjami wykonywanymi przez inne składowe
systemu – układ operacyjny UO.
• Automaty mogą być także wykorzystane w innych, prostych operacjach,
takich jak wykrywanie sekwencji w danych wejściowych czy generacja
zadanej sekwencji sygnałow wyjściowych
[10] Projektowanie hierarchiczne
Str 18
[!]
– zapisz kod na podstawie rysunku
Str 58
[!]
– pojemność pamięci
Str 33 – wykrywanie sekwencji
[11] Projektowanie_RTL
Str 8 i dalej
[!]
– diagram ASM
Str 11 – algorytm Euklidesa
[12] Cyfrowe przetwarzanie sygnałów
Str 13
[!]
– sumator 1-bitowy
Str 42
[!]
– liczby w notacji stalopozycyjnej
[13] Synteza_strukturalna
Str 22
[!]
– ASM
Str 30
[!]
– ASDM
[14] Rozne_metody_projektowania
Str 11 – kodowanie stanów US
Str 23,24
[!]
– współdzielenie zasobów
Str 40
[!]
– polokowanie
[15] Projektowanie_ukladow_kryptograficznych
Runda algorytmu DES
• Jest to podstawowy element algorytmu DES. Jakość realizacji tego bloku będzie
decydować o szybkości działania całego algorytmu i wielkości zasobow
niezbędnych do realizacji algorytmu w sprzęcie.
• Blok ten składa się z permutacji rozszerzającej ext_perm, ośmiu skrzynek
selekcyjnych S-Box, permutacji p_perm, permutacji pc2_perm i blokow shl
realizujących przesunięcie w lewo o 1 lub 2