Projektowanie z użyciem bloków funkcjonalnych w układach programowalnych firmy Xilinx CEL ĆWICZENIA Celem ćwiczenia jest utrwalenie wiedzy dotyczącej budowy, działania i własności programowalnych układów FPGA firmy Xilinx, a w szczególności nauczenie projektowania układów cyfrowych z użyciem wbudowanych bloków funkcjonalnych DCM (Digital Clock Manager) [p1, p5, u2] do przetwarzania sygnałów zegarowych. W realizowanych zadaniach projektowych stosowane będą trzy zasadnicze funkcje bloków DCM, tj. funkcje syntezera częstotliwości, cyfrowego przesuwnika fazy i układu DLL. Dodatkowym celem ćwiczenia jest nabycie umiejętności stosowania programowanych dzielników częstotliwości. Ponadto ćwiczenie daje możliwość doskonalenia umiejętności obsługi systemu projektowego ISE WebPack firmy Xilinx, a w szczególności stosowania programu IP (Core Generator & Architecture Wizard) do konfigurowania modułów IP. PROGRAM ĆWICZENIA ZADANIE WSTĘPNE Zadanie realizowane jako wstępne w tym ćwiczeniu polega przede wszystkim na zaprojektowaniu układu załączającego diodę LED z wybraną przez użytkownika częstotliwością. W założeniu dostępne są trzy częstotliwości tj. 0.5 Hz, 1 Hz i 2 Hz. Projekt będzie praktycznie zrealizowany z użyciem płytki testowej Spartan-3 Starter Bard (Digilent) *, wyposażonej w układ programowalny Spartan-3 (XC3S200FT256) i generator kwarcowy o częstotliwości 50 MHz. Do przygotowania projektu zastosowany będzie system projektowy ISE WebPack v.10.1 (Xilinx). Niezbędne do realizacja zadania obniżenie częstotliwości sygnału zegarowego zrealizowane zostanie z użyciem wbudowanego bloku funkcjonalnego DCM oraz dodatkowego dzielnika częstotliwości opisanego w języku VHDL. REALIZACJA ZADANIA 1. Utworzenie projektu w systemie ISE Utworzyć indywidualny podkatalog w katalogu C:\Labuprog (lub wskazanym przez prowadzącego ćwiczenie) Uruchomić system ISE: w tym celu użyć ikony ISE na pulpicie systemu Windows lub wybrać Start Programy Xilinx ISE Design Suite 10.1 ISE Project Nawigator * Szczegółowy opis płytki testowej znajduje się w instrukcji: Instrukcja obsługi systemu WebPack oraz zestawu z układem XC3S200
W Project Navigator wybrać kolejno: File New Project, co spowoduje otwarcie okna New Project Wizard W polu Project location wybrać katalog C:\Labuprog\podkatalog_indywidualny (z użyciem przycisku ) W polu Project name wpisać dzielnik W polu Top-level source type wybrać Schematic i kliknąć Next Wybrać wymienione poniżej parametry układu programowalnego oraz projektu (rys. poniżej) i kliknąć Next Family: Spartan3 Device: XC3S200 Package: FT256 Speed Grade: 5 Synthesis Tool: XST (VHDL/Verilog) Simulator: ISE Simulator (VHDL/Verilog) Preferred Language: VHDL W automatycznie otwartym oknie dialogowym New Project Wizard - Create New Source kliknąć New Source W kolejnym oknie (New Source Wizard - Select Source Type) wybrać Schematic, jako typ pliku źródłowego i wpisać dzielnik_top, jako nazwę tego pliku. Następnie kliknąć Next i zaakceptować komunikaty w dwóch kolejnych oknach wirtualnymi przyciskami Finish i Yes. 2
Nazwa utworzonego pliku źródłowego (dzielnik_top (dzielnik_top.sch)) pojawi się w oknie hierarchii plików (Sources for:) (rys. poniżej) 2. Konfigurowanie bloku DCM W celu skonfigurowania i umieszczenia na schemacie symbolu bloku DCM należy wpierw kliknąć nazwę pliku (dzielnik_top) w oknie hierarchii plików (Sources for:) i wybrać z menu opadającego Project New Source W lewej części okna New Source Wizard wybrać opcję IP (Core Generator & Architecture Wizard) a w polu File name wpisać nazwę bloku dcm1 i kliknąć Next Rozwinąć kolejno FPGA Feature and Design Clocking Virtex-II Pro, Virtex-II, Spartan-3 i wybrać Single DCM v9.1i 3
Kliknąć Next i Finish W automatycznie otwartym oknie Xilinx Clocking Wizard zaznaczyć na symbolu bloku DCM pole wyboru CLKDV. W polu Input Clock Frequency wpisać 50 MHz (wartość częstotliwości zegara wejściowego) i wybrać 10 w menu opadającym Divide By Value Kliknąć kolejno Next, Next i Finish 4
W celu utworzenia symbolu bloku dcm1 w oknie hierarchii plików (Sources for:) zaznaczyć plik dcm1(dcm1.xaw) a w oknie Processes for: dwukrotnie kliknąć Create Schematic Symbol 3. Utworzenie dzielnika częstotliwości Dzielnik częstotliwości zostanie zaprojektowany z użyciem języka VHDL. W tym celu należy wybrać kolejno: Project New Source W lewej części okna New Source Wizard wybrać opcję VHDL Module a w polu File name wpisać nazwę bloku dzielnika div2_5m (podział przez 2.5 miliona) i kliknąć Next W oknie New Source Wizard Define Module zadeklarować porty wejściowy CLK5MHZ_IN i wyjściowy CLK2HZ_OUT i wybrać kolejno Next i Finish. Następnie uzupełnić ciało architektury następującym opisem w języku VHDL: architecture Behavioral of div2_5m is signal CONTENT: std_logic_vector(21 downto 0):= "0000000000000000000000"; begin process (CLK5MHZ_IN) begin if rising_edge(clk5mhz_in) then if CONTENT(20 downto 0) = "111111111111111111111" then CONTENT <= not CONTENT(21) & "000000000000000000000"; else CONTENT <= CONTENT + 1; end if; end if; end process; CLK2HZ_OUT <= CONTENT(21); end Behavioral; W celu sprawdzenia poprawności opisu dzielnika w oknie hierarchii plików (Sources for:) zaznaczyć plik div2_5m Behavioral (div2_5m.vhd) a w oknie Processes for: dwukrotnie kliknąć Check Syntax Następnie należy utworzyć symbol dzielnika w sposób podobny do opisanego dla bloku DCM 4. Utworzenie schematu układu sterującego diodą LED W oknie hierarchii plików (Sources for:) dwukrotnie kliknąć dzielnik_top (dzielnik_top.sch), co spowoduje otwarcie okna edytora schematów. Korzystając z przygotowanych wcześniej symboli bloków DCM i dzielnika utworzyć schemat pokazany poniżej. 5
5. Przypisanie numerów wyprowadzeń W celu uruchomienia edytora PACE (Pinout and Area Constraints Editor), umożliwiającego przypisanie numerów wyprowadzeń układu FPGA do sygnałów projektowanego dzielnika należy w oknie hierarchii plików (Sources for:) zaznaczyć projekt dzielnik_top (dzielnik_top.sch), w oknie Processes for: wybrać User Constrains i dwukrotnie kliknąć Floorplan IO Pre-Synthesis (Assign Package Pins w ISE v. 9.2) Przyporządkowanie numerów wyprowadzeń układu FPGA do sygnałów projektu w edytorze PACE może być wykonane dwojako. W oknie Design Object List IO Pins, w kolumnie Loc należy wpisać oznaczenia wyprowadzeń jak na rysunku poniżej (1) albo nazwy sygnałów z okna Design Browser IO Pins przeciągnąć do odpowiednich wyprowadzeń na diagramie w oknie Device Architecture for... (2). Następnie zapisać przyporządkowanie wyprowadzeń: File Save i wybrać OK w automatycznie otwartym oknie Bus Delimiter. Zamknąć edytor PACE. Do projektu dodany został plik UCF (User Constraints File) z informacją o przyporządkowanych wyprowadzeniach. 6
6. Implementacja projektu W celu skompilowania projektu zgodnie z określonymi wcześniej wymaganiami należy w oknie hierarchii plików (Sources for:) zaznaczyć projekt dzielnik_top (dzielnik_top.sch) a w oknie Processes for: dwukrotnie kliknąć Implement Design Po zakończeniu procesu implementacji rozwinąć kolejno podmenu Implement Design Place & Route i otworzyć Place & Route Report Otwarty raport zawiera m.in. informację o zajętość zasobów logicznych układu FPGA (rysunek poniżej). Te i inne informacje dostępne są również w zakładce Design Summary okna edycyjnego. 7. Programowanie układu FPGA W celu przygotowania pliku do programowania układu FPGA należy w oknie hierarchii plików (Sources for:) zaznaczyć projekt dzielnik_top (dzielnik_top.sch) a w oknie Processes for: dwukrotnie kliknąć Generate Programming File Włączyć zasilanie płytki z układem FPGA. W oknie Processes for: rozwinąć podmenu Configure Target Device i dwukrotnie kliknąć Manage Configuration Project (impact) (lub Generate Programming File Configure Device (impact) w ISE v. 9.2) W automatycznie otwartym oknie programu impact kliknąć Finish Wybrać plik dzielnik_top.bit i kliknąć Open Kliknąć kolejno Bypass i OK dla pamięci xcf02s Kliknąć prawym klawiszem myszki na symbolu układu FPGA i wybrać opcję Program i układ FPGA zostanie zaprogramowany (proces programowania jest sygnalizowany jednoczesnym załączeniem diod LD0-LD7) 7
Poprawność przygotowanego projektu i prawidłowe zaprogramowanie układu FPGA jest sygnalizowane przez ciągłe świecenie diody LD7 (synchronizacja DCM) i mruganie diody LD6 z częstotliwością 2 Hz. W celu wyzerowania układu DCM należy użyć przycisku BTN3 na płytce testowej. Po przyciśnięciu tego przycisku dioda LD7 zostaje wygaszona i załącza się po ponownej synchronizacji układu DCM. 8. Modyfikacja projektu Projekt należy zmodyfikować w taki sposób, aby dostępne były trzy częstotliwości załączania diody LD6, tj. oprócz już otrzymanych 2 Hz także 1 Hz i 0.5 Hz. Zmiana częstotliwości powinna odbywać się z użyciem przełączników BTN0 i BTN1, dołączonych do wyprowadzeń odpowiednio M13 i M14 układu FPGA. ZADANIA ZASADNICZE Przystąpienie do realizacji indywidualnych zadań projektowych następuje po uzyskaniu poprawnych wyników testów układu realizującego zadanie wstępne. Zasadnicze zadania projektowe obejmują użycie bloków funkcjonalnych DCM w różnego rodzaju układach cyfrowych, w których istotna jest zmiana częstotliwości i/lub współczynnika wypełnienia sygnału zegarowego albo jego relacji czasowych względem innego sygnału zegarowego. Do każdego zadania projektowego studenci przygotowują rozwiązania w postaci schematu ideowego układu lub pliku źródłowego w języku VHDL. Rozwiązania powinny być umieszczone w protokole, który jest podstawą do wykonania sprawozdania. OPRACOWANIE WYNIKÓW 1. Sprawozdanie z ćwiczenia laboratoryjnego powinno zawierać zwięzłe opisy postawionych zadań projektowych wraz z rozwiązaniami, a w szczególności z opisem w języku VHDL i schematami zaprojektowanych układów. 2. Do sprawozdania należy dołączyć wydruki z wynikami przeprowadzonych symulacji (ew. wybranych fragmentów wyników symulacji, o ile kompletna symulacja nie jest możliwa na przykład ze względu na zbyt długi czas trwania). 3. Ponadto w sprawozdaniu należy zawrzeć rozwiązania dodatkowych problemów projektowych postawionych przez prowadzącego. ZALICZENIE ĆWICZENIA 1. Zaliczenie kolokwium wstępnego oraz poprawne wykonanie zadań laboratoryjnych postawionych przez osobę prowadzącą ćwiczenie. 2. Złożenie sprawozdania, zawierającego zwięzły opis wykonanych zadań, wnioski i poprawne odpowiedzi na postawione pytania. Wzór sprawozdania jest dostępny na stronie internetowej Zakładu Techniki Cyfrowej 8
PRZYKŁADOWE ZADANIA PROJEKTOWE We wszystkich zadaniach do realizacji projektowanych układów należy zastosować blok(i) funkcjonalny(e) DCM. 1. Zaprojektować generator przebiegu prostokątnego o programowanej częstotliwości i współczynniku wypełnienia. 2. Zaprojektować generator sygnału czterofazowego z możliwością regulacji opóźnień międzyfazowych. 3. inne zadania ZAGADNIENIA DO OPRACOWANIA PRZED PRZYSTĄPIENIEM DO ĆWICZENIA 1. Proces projektowania układów cyfrowych z użyciem programowalnych matryc bramkowych FPGA [p1, u1]. 2. Architektura, zasoby logiczne i parametry układów serii Spartan (Xilinx) [p4]. 3. Budowa i parametry bloków funkcjonalnych DCM [p5]. 4. Zapoznanie się z opisem płytki testowej - Instrukcja obsługi systemu WebPack oraz zestawu z układem XC3S200. LITERATURA podstawowa: 1. J. Kalisz, Podstawy elektroniki cyfrowej, 5 wydanie, WKŁ, 2008 2. J. Kalisz, Język VHDL w praktyce, WKŁ, 2002 3. K. Skahill, Język VHDL. Projektowanie programowalnych układów logicznych, WNT, 2001 4. Spartan-3 FPGA Family (http://www.xilinx.com/support/documentation/data_sheets/ds099.pdf) 5. Using Digital Clock Managers (DCMs) in Spartan-3 FPGAs (http://www.xilinx.com/support/documentation/application_notes/xapp462.pdf) uzupełniająca: 1. J. Pasierbiński, P. Zbysiński, Układy programowalne w praktyce, WKŁ, 2002 2. J. Pasierbiński, P. Zbysiński, Układy programowalne: pierwsze kroki, BTC, 2004 3. ISE In-Depth, Tutorial (http://download.xilinx.com/direct/ise9_tutorials/ise9tut.pdf) 9