[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.
• 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),
– 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
• 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
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