[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