Laboratorium przedmiotu Technika Cyfrowa

Transkrypt

Laboratorium przedmiotu Technika Cyfrowa
Laboratorium przedmiotu Technika Cyfrowa
ćw.3 i 4: Asynchroniczne i synchroniczne automaty sekwencyjne
1. Implementacja asynchronicznych i synchronicznych maszyn stanu w języku
VERILOG:
Maszyny stanu w języku VERILOG implementuje się najczęściej za pomocą
instrukcji sterującej case. Przykładowa implementacja takiej maszyny została
pokazana w listingu 1:
listing 1
Analizując kod widać, Ŝe blok always wykonywany jest przy zmianie kaŜdej ze
zmiennych wejściowych (x1, x2), przy zmianie stanu oraz zmianie sygnału reset, czyli
w pełni asynchronicznie. Nie ma tutaj Ŝadnego zegara. Jeśli sygnał reset zostanie
ustawiony w stan wysoki zerowany jest obiekt state informujący o stanie, w którym
się maszyna znajduje, tzn. maszyna stanu jest ustawiana w stan s0 (zakodowany
jako 2’b00). Jeśli natomiast sygnał reset przyjmuje wartość zero, wykonywany jest
blok case (o ile nastąpi zmiana x1, x2 lub state). Zakładając, Ŝe maszyna znajduje
się w stanie początkowym (s0), o ile wejścia nie zostaną ustawione na x1=1, x2=0,
maszyna pozostaje w stanie s0. Jeśli natomiast wejścia zostaną ustawione na
x1=1,x2=0, to maszyna przechodzi do stanu s1. Podobną analizę moŜna
przeprowadzić dla kaŜdego kolejnego stanu. Wgłębiając się w kod moŜna równieŜ
zauwaŜyć, iŜ wyjścia maszyny ustawiane są w konkretnym stanie i nie zaleŜą
bezpośrednio od wejść, lecz tylko od stanu. Jest to automat sekwencyjny Moore’a.
Automat Mealy’ego róŜni się nieznacznie w kodzie języka VERILOG od
automatu Moore’a. Wystarczy usunąć fragmenty kodu ustawiające wyjścia z bloku
instrukcji case i wprowadzić poza blokiem always przypisania ciągłe ustawiające
wyjścia w zaleŜności od stanu i wejść. NaleŜy pamiętać równieŜ o zmianie typu
obiektów wyjściowych na wire. Zmodyfikowany kod przedstawiony został na kolejnym
listingu 2.
Synchroniczne automaty sekwencyjne implementuje się w sposób bardzo
podobny. W automacie Moore’a wystarczy właściwie zmienić tylko listę wraŜliwości
tak, aby ciało bloku always było wykonywane przy narastającym zboczu sygnału
reset i narastającym zboczu sygnału zegarowego (w zaleŜności od wymagań moŜe
być równieŜ zbocze opadające jak i obydwa). Przykładową implementację takiej
maszyny pokazuje kolejny listing 3.
W przypadku synchronicznego automatu Mealy’ego stany ustalane są
synchronicznie, natomiast wyjścia zaleŜą od synchronicznego stanu i wejść, które
mogą być synchroniczne lub asynchroniczne. W przypadku wejść synchronicznych
(względem tego samego zegara, co zegar automatu) automat Mealy’ego zachowuje
się dokładnie tak jak automat Moore’a, natomiast powstaje problem przy wejściach
asynchronicznych względem zegara maszyny. Mogą wystąpić wtedy przekłamania
na wyjściu. W przypadku, gdy się nie moŜna na nie zgodzić naleŜy albo dokonać
synchronizacji (wprowadzić synchroniczne przerzutniki typu D na wszystkie wejścia)
albo teŜ zrezygnować z automatu Mealy’ego i przejść na automat Moore’a.
W listingu 4 podano przykład synchronicznego automatu Mealy’ego.
listing 2
listing 3
listing 4
2. Sposób kodowania stanów:
Jedną z najwaŜniejszych rzeczy przy projektowaniu automatu synchronicznego jest
wybór kodowania stanów. Kilka z nich przedstawione zostało poniŜej:
• kodowanie binarne (sekwencyjne),
• kodowanie One-Hot (gorąca jedynka),
• kodowanie Gray’a,
• kodowanie Johnson’a.
Na optymalny wybór kodowania składa się nie tylko wielkość logiki potrzebnej na
implementację automatu, lecz rownieŜ szybkość jego wykonywania przy
implementacji sprzętowej. Znajdując optymalne kodowanie stanów stosując np.
kodowanie sekwencyjne moŜe się okazać przy drobnej modyfikacji automatu, iŜ
wybrane kodowanie nie jest juŜ optymalne i trzeba szukać ponownie. O wiele
lepszym rozwiązaniem jest stosowanie kodowania typu One-Hot. Polega ono na
zakodowaniu stanów w taki sposób, Ŝe dla kaŜdego stanu tylko jeden bit w słowie
kodującym jest w stanie wysokim. Ilustruje to następujący przykład:
Obecne narzędzia syntezujące kod VERILOG posiadają moŜliwość przekodowania
maszyny stanów. Tak jest np. w narzędziu XST (Xilinx Synthesis Technology), które
bądź zoptymalizuje kodowanie uŜytkownika, bądź teŜ dokona zmiany kodowania na
inne. Wyboru sposobu kodowania moŜna dokonać równieŜ ręcznie. Trzeba do tego
celu przed nazwą obiektu, w którym będzie zapisywany aktualny stan wstawić ciąg
znakow: (* FSM_ENCODING="<typ kodowania>" *). Pole <typ kodowania> moŜe
przyjąć następujące wartości:
• AUTO
• ONE-HOT
• GRAY
• COMPACT
• JOHNSON
•
•
SEQUENTIAL
USER
3. Bezpieczna implementacja maszyny stanu:
Przy projektowaniu maszyn stanu zwykle istnieją dwa przeciwstawne sobie cele.
Pierwszym z nich jest uzyskanie maszyny stanu, która po otrzymaniu nieoczekiwanej
sekwencji wejściowej potrafi przejść do pewnego znanego bezpiecznego stanu.
Implementacja ta jest zwykle dość wolna i wymaga kodowania binarnego, co kłóci się
czasem z innym celem, a mianowicie z uzyskaniem szybkiej implementacji maszyny
stanu. Dlatego teŜ rezygnuje się w niektórych sytuacjach z takiej implementacji na
koszt prędkości. Stosując do syntezy modułów VERILOGa XST moŜna wybrać
sposób syntezy wybranej maszyny. Podobnie jak przy wyborze kodowania stanów
maszyny
naleŜy
przed
zmienną
stanu
podać
ciąg
znaków:
(* SAFE_IMPLEMENTATION="YES", SAFE_RECOVERY_STATE="s0" *), gdzie s0
jest znanym stanem do ktorego maszyna przechodzi w przypadku nieznanej
sekwencji wejściowej.
4. Przebieg ćwiczenia:
Celem ćwiczenia jest zapoznanie studenta ze sposobem implementacji
asynchronicznych i synchronicznych maszyn stanu w języku VERILOG, jak równieŜ
ze szczegółami związanymi z ich syntezą.
Przygotowanie do laboratorium:
praktyczna znajomość sposobów projektowania układów kombinacyjnych;
umiejętność optymalizacji funkcji logicznych;
znajomość podstaw języka VERILOG;
Przebieg ćwiczenia i sposób oceniania:
sprawdzanie przygotowania do zajęć (max 1 pkt);
zrealizowanie zadań postawionych przez prowadzącego (max 4 pkt);
* podczas ćwiczenia kaŜda sekcja tworzy osobny protokół z przebiegu ćwiczenia
Protokół:
Protokół powinien zawierać:
nazwiska osób wykonujących ćwiczenie;
tytuł i numer ćwiczenia;
poprawny numer grupy i sekcji;
komentarze przedstawiające postęp w realizacji ćwiczenia oraz wszelkie
niezbędne do zrealizowania ćwiczenia notatki;
5. Literatura:
http://toolbox.xilinx.com/docsan/xilinx10/books/docs/qst/qst.pdf
- ISE 10.1 Quick Start Tutorial
http://direct.xilinx.com/direct/ise10_tutorials/ise10tut.pdf
- ISE In-Depth Tutorial
http://www.xilinx.com/support/documentation/boards_and_kits/ug334.pdf
- Spartan-3A/3AN FPGA Starter Kit Board User Guide
http://www.xilinx.com/support/documentation/boards_and_kits/s3astarter_schematic.
pdf
- Spartan-3A/3AN Starter Kit Board Schematic
http://www.xilinx.com/support/documentation/user_guides/ug331.pdf
- Spartan-3 Generation FPGA User Guide
Opracowanie: Jan Staniek, Edycja: Mariusz Latos, 2011