Instrukcja konfiguracji środowiska, przykładowy projekt
Transkrypt
Instrukcja konfiguracji środowiska, przykładowy projekt
MMfpga01 MMfpga11 Instrukcja konfiguracji środowiska, przykładowy projekt oraz programowanie układu 1 Spis treści 1. Instalacja aplikacji QUARTUS II Web Edition................................................................................3 2. Instalacja programu QUARTUS II Web Edition..............................................................................5 3. Instalacja programatora USB-Blaster...............................................................................................7 4. Tworzenie nowego projektu.............................................................................................................8 5. Projekt schematu blokowego..........................................................................................................11 6. Tworzenie modułu w VHDL'u........................................................................................................15 7. Przypisanie pinów..........................................................................................................................17 8. Kompilacja.....................................................................................................................................19 9. Programowanie układu ..................................................................................................................19 Programowanie za pomocą interfejsu JTAG.................................................................................20 Programowanie pamięci konfiguracyjnej – tryb AS Programming...............................................21 10. Pomoc techniczna.........................................................................................................................24 2 1. Instalacja aplikacji QUARTUS II Web Edition W pierwszej kolejności należy pobrać aplikację ze strony producenta wchodząc pod poniższy adres https://www.altera.com/download/dnl-index.jsp Po wybraniu najnowszej wersji klikamy przycisk GO. • • Na stronie mamy do wyboru dwa warianty pobrania aplikacji. Ściągnięcie całej spakowanej wersji Instalacja bezpośrednio z serwera 3 Bez względu na wybór wariantu na kolejnej stronie, musimy się zarejestrować lub wybrać opcję jednorazowego dostępu. W przypadku opcji z jednorazowym dostępem należy zaznaczyć „radio button” Get One-time Access, podać swój email, a następnie przycisnąć przycisk „Get One-time Access”. Jeśli mamy zablokowane automatyczne wyskakiwanie okien należy wejść w link Download your file now. 4 Producent zaleca instalację/pobieranie Quartus'a za pomocą Altera Download Menager. Po ściągnięciu należy wypakować program w dowolne miejsce. Po tej czynności instalator uruchamia się automatycznie. Możliwe jest również, przerwanie instalacji i uruchomienie jej w późniejszym czasie. 2. Instalacja programu QUARTUS II Web Edition Instalacja uruchamia się automatycznie po wypakowaniu lub można wywołać ją później uruchamiając plik setup.exe znajdujący się w miejscu, w którym wypakowaliśmy Quartus'a. Sam proces instalacji przebiega w bardzo intuicyjny sposób. W pierwszym oknie instalatora klikamy NEXT. 5 W polu Destination Directory podajemy ścieżkę, pod którą zostanie zainstalowany Quartus. Warta zaznaczania jest możliwość nie instalowania komponentów obsługujących inne rodziny układów programowalnych niż Cyclone co pozwala nam zaoszczędzić niemal 2GB pamięci. Po zainstalowaniu można usunąć pliki instalacyjne oraz rozpakowany instalator Quartus'a. 6 3. Instalacja programatora USB-Blaster Podłącz swój programator do wybranego gniazda USB. Windows automatycznie powinien wykryć nowy sprzęt. Wybieramy drugi wariant „Zainstaluj z listy lub określonej lokalizacji (zaawansowane)”. Klikamy przeglądaj i wskazujemy lokalizację sterowników programatora USB-Blaster. Znajdują się one w folderze gdzie zainstalowaliśmy Quartus'a - \Quartus\drivers\usb-blaster. Po zainstalowaniu programatora środowisko jest w pełni gotowe do pracy. 7 4. Tworzenie nowego projektu. Uruchamiamy Quartus'a i wchodzimy w menu File->New Project Wizard... • W pierwszym polu wskazujemy lokalizację pod którą zostanie zapisany nasz projekt. • W drugim polu podajemy nazwę projektu. • W trzecim polu podjemy nazwę głównej jednostki. Przechodzimy do następnego okna klikając Next. 8 W poniższym oknie możemy dodać pliki projektowe utworzone w innych projektach np. Pliki VHDL, biblioteki itp. W naszym projekcie pomijamy to i przechodzimy dalej klikając Next. 9 W kolejnym oknie dokonujemy wyboru rodziny układów (Device family) – Cyclone oraz z listy Available devices wybieramy układy w zależności od posiadanego modułu. • MMfpga01 EP1C3T100C8 • MMfpga11 EP1C3T144C8 Po wybraniu układu Finish nasz projekt zostaje utworzony. 10 5. Projekt schematu blokowego W celu stworzenia nowego schematu blokowego wchodzi w menu File->New... Wybieramy „Block Diagram/Schematic File” i klikamy OK. 11 Pojawia się nam okno z siatką na której możemy tworzyć nasz schemat logiczny/blokowy. W naszym przykładowym projekcie będziemy wykorzystywać podstawowe narzędzia. Symbol Tool Narzędzia, elementy logiczne, piny itp. Othogonal Node Tool Przewód łączący elementy Othogonal Bus Tool Magistrala Powiększenie Lewy/Prawy klawisz myszy Pełen ekran Wybieramy Symbol Tool 12 W liście library mamy do wyboru podstawowe elementy z których najważniejsze to: 1. Primitivies • Pin (input-wejściowe,output-wyjściowe,inout_wejściowo/wyjściowe) • Logic (podstawowe elementy logiczne – bramki AND, NOR, NOT itp) • Others (inne, GND wymuszenie stanu niskiego,VCC wymuszenie stanu wysokiego) • Storage (przerzutniki) 2. Others • maxplus2 (podstawowe elementy logiczne np. 74245 itp) 3. Megafunctions • IO • Gates • Storage • Arithmetic W naszym projekcie wykorzystamy gotowy licznik, którego wyjście Carry – przepełnienia wykorzystamy do podziału zegara przez 50 000 000 tak, aby na jego wyjściu uzyskać częstotliwość 1Hz. W tym celu w oknie „Symbol” na liście Libraries rozwijamy Megafunctions->Arithmetic->lpm_counter i klikamy OK. Powinien pojawić się MegaWizard – kreator umożliwiający konfigurację licznika. Zaznaczamy VHDL i klikamy Next. 13 W kolejnym oknie dokonujemy konfiguracji licznika, dla podziału przez 50 000 000 konieczne jest ustawienie 26 bitowego wyjścia licznika. Kierunek zliczania licznika tylko do góry. Po konfiguracji przechodzimy dalej klikając NEXT. W kolejnym oknie wybieramy opcję zliczania modulo 50 000 000 oraz zaznaczamy dodatkową opcję Carry-out informującą o przepełnieniu licznika. Nasz licznik jest już skonfigurowany, aby wyjść z kreatora i umieścić moduł na schemacie klikamy Finish. 14 Po tej czynności blok licznika zostanie umieszczony na schemacie. 6. Tworzenie modułu w VHDL'u Do naszego projektu dodamy licznik „1 z 8”, którego kod zostanie napisany w VHDL'u. W tym celu wchodzimy File->New... i wybieramy VHDL file. library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity Licznik is port( Q: out std_logic_vector(7 downto 0); CLK: in std_logic ); end entity; architecture behave of Licznik is signal licz: std_logic_vector(2 downto 0):=(others=>'0'); begin process(CLK) begin if CLK'event and CLK='1' then licz<=licz+1; end if; end process; Q <= "10000000" when licz="000" else "01000000" when licz="001" else "00100000" when licz="010" else "00010000" when licz="011" else "00001000" when licz="100" else "00000100" when licz="101" else "00000010" when licz="110" else "00000001" when licz="111" else unaffected; end behave; 15 Teraz utworzymy symbol blokowy z kodu napisanego w VHDL'u. Teraz możemy wstawić nasz Symbol do schematu i połączyć z modułem LPM_COUNTER. Wybieramy ikonę Symbol Tool 16 Nasz schemat jest już prawie gotowy. Wystarczy dodać parę brakujących elementów jak na rysunku i przypisać symboliczne nazwy odpowiednim wyprowadzeniom. Do schematu należy dodać: • jedno wejście INPUT (znajdujące się w Symbol Tool->Primitivies->Pin) i przypisujemy nazwę CLOCK_50 • jedno wyjście OUTPUT (znajdujące się w Symbol Tool->Primitivies->Pin) i przypisujemy nazwę LED[7..0] • połączyć wyjście count LPM_COUNTER z wejściem Licznika CLK za pomocą • diody na płytce EVBfpga zapalają się przy podaniu stanu niskiego dlatego na wyjście licznika Q[7..0] podłączamy negację i za pomocą magistrali łączymy z wyjściem OUTPUT LED[7..0]. Można również połączyć bezpośrednio jak na poniższym schemacie. 7. Przypisanie pinów W projekcie pozostało jeszcze przypisanie symbolicznych nazw użytych w schemacie do pinów w rzeczywistym układzie. Wchodzimy w menu Assignments->Pin Planer 17 W tabeli jako Node Name podajemy symboliczną nazwę użytą w schemacie, a jako Location wybieramy, które wyprowadzenie układu chcemy jej przypisać. Symboliczna nazwa Mmfpga01 MMfpga11 LED[7] PIN_23(J1_21) lub dowolny inny PIN_98 LED[6] PIN_26 PIN_104 LED[5] PIN_25 PIN_103 LED[4] PIN_24 PIN_100 LED[3] PIN_22 PIN_99 LED[2] PIN_21 PIN_122(J1_16) lub dowolny inny LED[1] PIN_20 PIN_97 LED[0] PIN_17 PIN_96 CLOCK_50 PIN_10(CLK0) PIN_16(CLK0) Uwaga!! W układzie MMfpga01 diodę LED[7] nie można połączyć z płytką EVBfpga za pomocą zworki LED7 - J1_17 na złączu J5. Diodę LED[7] zaleca połączyć przewodem z dowolnym pinem np. PIN_23 lub dowolnym innym wybranym i nie używanym wyprowadzeniem. W układzie MMfpga11 diodę LED[2] nie można połączyć z płytką EVBfpga za pomocą zworki LED2 - J1_23 na złączu J5. Diodę LED[2] zaleca połączyć przewodem z dowolnym pinem np. PIN_122 lub dowolnym innym wybranym i nie używanym wyprowadzeniem. Przypisane piny można eksportować do pliku by później wykorzystać je w innym projekcie. Assignments->Import Assignments - przywrócenie przypisanych pinów Assignments->Export Assignments – eksport przypisanych pinów do pliku 18 8. Kompilacja Nasz projekt jest ukończony, teraz możemy przejść do kompilacji wybierając z menu Processing->Start Compilation. Jeśli w trakcie tworzenia projektu nie popełniliśmy żadnego błędu powinniśmy uzyskać jednakowe okno. Po kompilacji mamy możliwość zobaczenia jaki procent zasobów układu programowalnego został wykorzystany, W naszym przypadku nie trzeba przejmować się „Warning'ami”, w bardziej złożonych projektach nie można jednak ich ignorować! 9. Programowanie układu Interfejs JTAG nie programuje pamięci konfiguracyjnej, wgrany program „znika” po wyłączeniu zasilania, ma to jednak zaletę ponieważ nie zużywa to pamięci EPCS4, której żywotność wynosi 10 tysięcy cykli programowania. Ta opcja jest zalecana w trakcie testów. Active Serial Programming – specjalny tryb do programowania pamięci nieulotnej. Nasze moduły można programować w sposób: MMfpga01 • • JTAG AS Programming (EPCS conf) MMfpga11 • • JTAG nie jest wyprowadzony na oddzielnym złączu, aby korzystać z tego interfejsu koniczne jest podłączenie się programatorem do odpowiednich wyprowadzeń. Zaleca się wyprowadzenie przewodami interfejsu JTAG'a na złącze uniwersalne J27 i podłączanie programatora do złącza J28 AS Programming (EPCS conf) 19 Programowanie za pomocą interfejsu JTAG Uwaga! Po zaprogramowaniu program znika po wyłączeniu zasilania! Aby przejść do okna programowania należy wejść Tools->Programmer lub kliknąć ikonkę • Wykrywamy programator za pomocą przycisku Hardware Setup • Ustawiamy tryb JTAG w polu wyboru „Mode” Używany przez nas programator powinien być widoczny na liście Available hardware items. W oknie Hardware Setup w polu wyboru „Currently selected hardware” wybieramy USB-Blaster (lub inny jeśli takiego używamy) i klikamy Close. Programowanie układu dokonujemy przyciskiem 20 Programowanie pamięci konfiguracyjnej – tryb AS Programming Pamięć konfiguracyjna według danych producenta można programować około 10 tysięcy razy. Program jest pamiętany i przywracany do układu programowalnego po przywróceniu zasilania. Na początku konieczne jest wybranie typu pamięci wbudowanej na moduł EPCS4. Wchodzimy do menu Assignments->Device Następnie klikamy przycisk Device and Pin Options 21 Przechodzimy do zakładki Configuration W polu wyboru Configuration scheme wybieramy „Active Serial (can use Configuration Device)” Zaznaczamy „Use configuration device” i z pola wyboru wybieramy EPCS4. Zatwierdzamy ustawienia klikając OK. 22 Przechodzimy do okna programowania i z pola wyboru wybieramy tryb Active Serial Programming Wykrycie programatora dokonujemy identycznie jak w przypadku JTAG'a. Powinien pojawić się komunikat, aby zaprogramować pamięć konfiguracyjną konieczne wybranie jest „Yes” 23 Kolejnym krokiem jest dodanie pliku przeznaczonego do programowania pamięci konfiguracyjnej. Klikamy Add File i wybieramy plik z folderu z naszego projektu z rozszerzeniem *.pof Konieczne jest zaznaczenie Program/Configure. Programowania układu dokonujemy za pomocą przycisku Uwaga! Po za programowaniu układu konieczne jest odłączanie programatora. 10. Pomoc techniczna W pytaniu prosimy umieścić szczegółową informację dotyczącą problemu oraz nazwę modułu. [email protected] Poradnik opracował Piotr Banach. [email protected] 24