LABORATORIUM UKŁADÓW PROGRAMOWALNYCH Wydział Elektroniki Mikrosystemów i Fotoniki Politechnika Wrocławska Prowadzący: dr inż. Daniel Kopiec email: daniel.kopiec@pwr.edu.pl Konfiguracja układu DCM Digital Clock Manager 1. Celem ćwiczenia jest zapoznanie z układem DCM oraz sposobem konfigurowania za pomocą pakietu Core Generator ISE WebPack Xilinx. Budowa i zasada działania układu DCM Układ zarządzania sygnałem zegarowym DCM (ang. Digital Clock Manager) jest jednym z ważniejszych układów zawartym w strukturze układów programowalnych. Umożliwia on między innymi: kondycjonowanie sygnału zegarowego czyli: o kompensowanie różnicy faz sygnału zegarowego wynikającej z propagacji sygnałów zegarowych w różnych miejscach układu, o generacja zegara o współczynniku wypełnienia 50 % na podstawie zegara niespełniającego tego warunku, o buforowanie lub przesunięcie sygnału zegarowego o zadaną fazę, zwielokrotnienia lub podział częstotliwości podstawowego źródła sygnału zegarowego [1]. Rys. 1 Możliwe drogi prowadzenia sygnału zegarowego w strukturze układu programowalnego. W zależności od liczby układów zaimplementowanych w strukturze czasy propagacji t1 t6 mogą być różne. Czasy przebiegu silnie zależą od trasy, a te zależą zarówno od sposobu opisu HDL jak i algorytmów optymalizacyjnych syntezera logicznego
Mimo iż poszczególne elementy syntezowanego układu rozmieszczone są w obrębie jednej struktury i taktowane tym samym sygnałem zegarowym to trasa jaką pokonuje sygnał może być różna schematycznie przedstawione to zostało na rysunku 1. Zależy to przede wszystkim od użytych zasobów sprzętowych i połączeniowych, a także od liczby taktowanych układów. W celu ograniczenia niekorzystnych zjawisk związanych z sygnałem zegarowym, układy programowalne FPGA często wyposażone zostają w syntezery DCM. W zależności od rodziny i serii układu programowalnego liczba DCM-ów może się różnić. Układy SPARTAN 3E posiadają 4 układy DCM, zgodnie z przedstawionym rys. 2 znajdują się one w narożach struktury układu programowalnego i łączą z globalnymi liniami, traktami połączeniowymi [2]. Rys. 2 Rozmieszczenie układów DCM w strukturze układu FPGA rodziny SPARTAN 3 [2] Schemat blokowy układu DCM przedstawiony został na rys. 3. Zgodnie z nim blok DCM składa się z [3]: cyfrowego syntezera częstotliwości DFS (z ang. Digital Frequency Synthesizer), sygnał generowany jest w oparciu o atrybuty CLKDV_DIVIDE i CLKFX_MULTIPLY. pętli opóźniającej DLL (z ang. Delay-Locked Loops),
programowalnego przesuwnika fazy PS (z ang. Phase Shifter), umożliwiającego statyczne i dynamiczne przesunięcie fazy z precyzją 15 35 ps, oraz zespołu logiki SL (z ang. Status Logic), która sygnalizuje stan pracy DCM poprzez sygnały LOCKED i STATUS[7:0]. Rys. 3 Schemat blokowy układu DCM [3] [5] Sygnał zegarowy z generatora kwarcowego o częstotliwości 50 MHz (np. CFPS-39-50M) poprzez pin wejściowy C9 układu FPGA trafia na wejście układu DCM, gdzie w zależności od konfiguracji dokonywane jest kondycjonowanie lub powielenie/podział częstotliwości sygnału zegarowego. Odpowiednio ukształtowany sygnał z linii: CLK0 lub CLK90, CLK180, CLK180, CLK270, CLK2x, CLK2x180, CLKOV dołączony zostaje do linii dystrybucyjnych układu programowalnego. Na wejście CLKFB trafia sygnał wyjściowy układu DCM, stanowi on sygnał sprzężenia zwrotnego, na podstawie którego ustalana jest zależność pomiędzy wartością zadaną a uzyskaną. O aktualnym statusie działania układu DCM informują sygnały LOCKED i STATUS[7:0]. Przykładowe przebiegi generowane przez układ DCM przedstawione zostały na rys. 4. Niewątpliwą zaletą układu DCM jest możliwość wygenerowana sygnału o częstotliwości wynikającej z podziału i multiplikowania sygnału zegarowego wg. zależności: CLKFX CLKFX _ MULTIPLY CLKIN CLKFX _ DIVIDE gdzie: CLKFX częstotliwość sygnały wyjściowego, CLKIN częstotliwość sygnału wejściowego, CLKFX_MULTIPLY współczynnik zwielokrotnienia, multiplikacji sygnału zegarowego, zawarty w przedziale 2 32, domyślnie 4. CLKFX_DIVIDE współczynnik podziału sygnału zegarowego, zawarty w przedziale 1 32, domyślnie 1. Daje to możliwość wygenerowania sygnału zegarowego o częstotliwości w znacznie szerszym przedziale niż wynikałoby to z samego tylko podziału lub zwielokrotnienia.
Należy mieć jednak świadomość, że maksymalna częstotliwość pracy układów programowalnych również jest ograniczona, dla układu SPARTAN 3E ograniczenie to wynosi 240 MHz (speed grade -4) lub 270 MHz (speed grade -5). Rys. 4 Poglądowe przebiegi wyjściowe z układu DCM [4] Sposób użycia DCM w projekcie Użycie modułu DCM w projekcie jest możliwe na kilka sposobów: za pomocą języka opisu sprzętu VHDL, z wykorzystaniem Core Generatora, z wykorzystaniem schematu i elementu bibliotecznego DCM. Implementacja w VHDL Implementacja modułu DCM w projekcie polega na stworzeniu komponentu odnoszącego się do modułu sprzętowego. Przykład użycia przedstawiony został poniżej: component DCM port( CLKFX : out std_logic; CLKIN : in std_logic); end component; Ważnym elementem obsługi modułu DCM jest również lista atrybutów definiująca tak naprawdę podstawowe parametry działania układu. Listę definiuje się tuż po zadeklarowaniu komponentu a ich nazwy ściśle odpowiadają sygnałom modułu DCM.
attribute CLKFX_MULTIPLY: integer; attribute CLKFX_DIVIDE: integer; attribute CLK_FEEDBACK: string; attribute CLKIN_PERIOD: integer; attribute CLK_FEEDBACK of VGA_clock: label is "NONE"; attribute CLKFX_MULTIPLY of VGA_clock: label is 2; attribute CLKFX_DIVIDE of VGA_clock: label is 4; attribute CLKIN_PERIOD of VGA_clock: label is 20; Znaczenie poszczególnych atrybutów wyjaśniono w tabeli: Atrybut Wartość Opis CLKFX_MULTIPLY 2-32, domyślnie 4 współczynnik powielenia CLKFX_DIVIDE 1-32, domyślnie 1 współczynnik podziału CLKIN_PERIOD ns okres zegara na wejściu CLKIN, parametr ważny tylko dla analizy DRC Określa częstotliwość wyjściową względem CLK_FEEDBACK NONE, 1X, 2X wejściowej. Wartości: NONE jeżeli tylko wyjścia CLKFX są używane, 1X - zegar wykorzystuje wyjście CLK 0, 2X - podwojona częstotliwość wejściowa jest dostępna na wyjściach CLK2X Pełną listę atrybutów można zobaczyć w nocie aplikacyjnej firmy Xilinx, XAPP462 [3]. Kolejnym krokiem konfiguracji modułu DCM jest mapowanie portów i połączenie odpowiednich sygnałów. new_clock : DCM port map( CLKIN => clk_50mhz, CLKFX => clk_25mhz); Należy pamiętać, że komponent dodajemy po słowie kluczowym architecture a mapowanie portów musi zostać umieszczone po słowie kluczowym begin [4].
Implementacja za pomocą Core Generator Core Generator należy do pakietu Xilinx ISE WebPack, uruchamiany jest z paska narzędzi środowiska z zakładki Tools: Po wybraniu Core Generator wywołane zostanie główne okno podprogramu: 1. W zakładce File należy wybrać - nowy projekt, 2. Potwierdzić zapis w katalogu ipcore_dir, plik zapisany zostanie jako: coregen.cgp
3. W kolejnym kroku pojawi się okno opcji projektu, w którym należy wybrać parametry układu dla którego ma zostać wygenerowany moduł DCM: W wypadku zestawu SPARTAN 3E Starter Board wybieramy: Spartan3E, xc3s500e, fg320, -4 4. W zakładce Generation należy wybrać język opisu sprzętu VHDL inne możliwości to Verilog lub schemat. Zgodnie z wybraną opcją wygenerowany zostanie odpowiedni fragment kodu. Wybór zatwierdzić Apply i OK.
5. W oknie programu Core Generator, należy następnie wybrać: FPGA Features and Design -> Clocking -> Spartan-3E, Spartan-3A -> Single DCM_SP 6. Po dwukrotnym kliknięciu Single_DCM_SP środowisko poprosi o wpisanie nazwy modułu. Nazwa może być dowolna jednak zaleca się wpisywanie nazw związanych z danym modułem, nie należy jednak stosować słów kluczowych języka VHDL. 7. Po zatwierdzeniu powyższego okna, przedstawione zostanie okno konfiguratora układu DCM. 8. Po zaznaczeniu niektórych opcji poszczególne wyprowadzenie zostają wyłączone z działania np. ustawiając opcję Feedback Source na None wyprowadzenie CLK0 CLK2X180 są nieaktywne. Poszczególne opcje i dostępne tryby pracy szczegółowo opisane zostały w nocie aplikacyjnej XAPP462 [2] (strona 20). Główne opcje, które należy zaznaczyć to zewnętrzne źródło sygnału zegarowego typu single (sygnał typu single ended) oraz jego częstotliwość lub okres. Opcję Feedback Source należy pozostawić w trybie None, jest ona potrzebna w momencie korekcji fazy sygnału zegarowego.
9. W kolejnym kroku należy wybrać globalne linie do dystrybucji sygnału zegarowego, sygnałem zegara od tego momentu jest linia CLKFX. Dla bardziej specyficznych zastosowań można samodzielnie zdefiniować linie sygnału zegarowego. 10. Następnym krokiem konfiguracji DCM jest określenie wartości CLKFX_MULTIPLY i CLKFX_DIVIDE oznaczone w poniższym oknie jako M i D. Po wpisaniu odpowiednich wartości od razu można określić jaka będzie częstotliwość sygnału zegarowego i jego parametry.
11. Po przejściu przez krok konfiguracji nastąpi podsumowanie projektu modułu DCM. W wyświetlonym oknie raz jeszcze można sprawdzić opcje i atrybuty przekazywane do modułu DCM. Po zakończeniu działania konfiguratora (Finish) w katalogu projektu wygenerowane zostaną pliki obsługi modułu DCM.
Dodanie plików DCM z Core Generator do projektu w ISE Pliki wygenerowane przez Core Generator to nic innego jak fragment kodu VHDL opisujący działanie modułu DCM. Poprawne użycie modułu wymaga jego dodania w głównym pliku projektu element dodaje się jak komponent. Ważne jest aby do projektu dodać plik znajdujące się w folderze ipcore_dir, pliki projektu dla przedstawionego projektu to: DCM.vhd - opis działania modułu DCM w VHDL, DCM.xaw - przepis dołączenia komponentu do projektu, dokładny przepis w jaki sposób użyć/dodać komponent do projektu. Po wybraniu plików kolejnym etapem jest zatwierdzenie elementów dodanych do projektu zgodnie z poniższym oknem. *.vhd *.xaw
Po zaznaczeniu pliku DCM.xaw pojawi się dodatkowe okno: klikając View HDL Instantion Template, zobaczymy dokładny przepis na dodanie komponentu do projektu. Należy pamiętać, że komponent dodajemy po słowie kluczowym architecture a mapowanie portów musi zostać umieszczone po słowie kluczowym begin [4]. Po przypisaniu fizycznych wyprowadzeń układu FPGA w pliku *.ucf lub za pomocą PlanAhead możliwa jest obserwacja sygnału na wyjściu układu FPGA. library IEEE; use IEEE.STD_LOGIC_1164.ALL; ------------------------------------------- entity DCM_Example is port( CLK_IN_50MHz : in std_logic; CLK_IN_OUT : out std_logic; RESET : in std_logic; CLK_DCM_OUT : out std_logic; DCM_STATUS : out std_logic ); end DCM_Example; ------------------------------------------- architecture Behavioral of DCM_Example is COMPONENT DCM_SPARTAN PORT( CLKIN_IN : IN std_logic; RST_IN : IN std_logic; CLKFX_OUT : OUT std_logic; CLKIN_IBUFG_OUT : OUT std_logic; LOCKED_OUT : OUT std_logic ); END COMPONENT; ------------------------------------------- begin ------------------------------------------- Inst_DCM_SPARTAN: DCM_SPARTAN PORT MAP( CLKIN_IN => CLK_IN_50MHz, RST_IN => RESET, CLKFX_OUT => CLK_DCM_OUT, CLKIN_IBUFG_OUT => CLK_IN_OUT, LOCKED_OUT => DCM_STATUS ); end Behavioral; -------------------------------------------
W opcjach syntezy możliwy jest również podgląd schematu wygenerowanego modułu DCM zaimplementowanego w głównym pliku projektu. Tak wygenerowany element można dodać do biblioteki. Daje to przede wszystkim możliwość tworzenia projektów na podstawie schematu blokowego. Podgląd elementu na poziomie RTL (z ang. Register Transfer Level ) daje również możliwość podglądania połączeń wewnętrznych utworzonej struktury układu. Na kolejnych dwóch rysunkach przedstawiono kolejne poziomy analizy układu. Podstawową jednostką układu DCM jest w tym wypadku moduł DCM_SP wygenerowany za pomocą Core Generator. Pozostałe połączenia powstały w wyniku opisu sprzętu, połączeń wewnętrznych oraz zewnętrznych.
Literatura: [1] http://w12.pwr.wroc.pl/mikro/wyklad/w3-pul-2016.pdf [2] http://www.xilinx.com/support/documentation/application_notes/xapp462.pdf [3] http://www.xilinx.com/support/documentation/user_guides/ug331.pdf [4] http://www.xilinx.com/support/documentation/application_notes/xapp174.pdf [5] http://ep.com.pl/files/3260.pdf [6] http://www.xilinx.com/support/documentation/data_sheets/ds312.pdf