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