Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010....

27
89 Elektronika Praktyczna 10/2006 KURS Wielokrotnie już na łamach EP podejmowaliśmy próby przybliże- nia Czytelnikom układów PLD. Po- czątkowo (był to rok 1993), przede wszystkim ze względu na łatwą do- stępność, skupialiśmy się na ukła- dach niskiej skali integracji (PAL i GAL), następnie przeszliśmy przez układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj- rzała do zajęcia się „na poważnie” układami FPGA. Układy FPGA w przykładach, część 1 Duże układy PLD tanieją w tempie zbliżonym do popularnych mikrokontrolerów, co spowodowało, że układy FPGA o dużych zasobach logicznych nie tylko są już tańsze od stosunkowo prostych układów CPLD, ale stały się dostępne dla szerokich rzesz użytkowników. Wiedza na temat ich możliwości i sposobów przygotowywania projektów nie jest jednak powszechna, czego dowiodła sierpniowa ankieta publikowana na naszej stronie internetowe: ponad 95% spośród 4779 głosujących poparło pomysł rozpoczęcia kursu projektowania na układach FPGA na łamach EP. Oto i on… Co, czym i jak Przygotowany przez nas kurs jest maksymalnie zorientowany na prakty- kę, co oznacza, że skupimy się przede wszystkim na przykładowych projek- tach. Nie obędzie się jednak bez nie- zbędnego krótkiego wstępu, w którym przedstawimy architekturę układów Spartan 3 (które zostały wybrane jako kursowa platforma sprzętowa), możli- wości oferowane przez zasoby sprzę- towe tych układów, poznamy wybrane sposoby konfiguracji i sposoby progra- mowania tych układów, aż – w końcu – dojdziemy do serii przykładowych projektów. Wszystkie projekty będą przystosowane do łatwej implementa- cji w dalej opisanym zestawie PLD. Planowane przez autorów etapy kursu (zapraszamy Czytelników do przekazywania sugestii!) przedstawio- no na str. 90. Kursowa platforma sprzętowa Ze względu na to, że zarów- no wybrane przez nas układy FPGA jak i ich konfiguratory są dostarczane w obudowach niezbyt „sympatycz- nych” podczas samodzielnego monta- żu (jakkolwiek jest on możliwy nawet w warunkach amatorskich), zrezygno- waliśmy z przygotowy- wania specjalnego zesta- wu uruchomieniowego. Zamiast tego w ofercie handlowej AVT znaj- dzie się uniwersalny zestaw składający się z płyty bazowej ZL9PLD o sporych możliwo- ściach oraz montowane- go w jej gnieździe mo- dułu dipPLD (ZL10PLD) z zamontowanym ukła- dem XC3S200, konfigu- ratorem XCF01S (1 Mb Flash), zestawem stabi- lizatorów LDO, genera- torem taktującym, złączem JTAG oraz przyciskiem umożliwiającym ręczne wymuszenie rekonfiguracji układu FPGA. Na fot. 1 pokazano wygląd płyty bazowej ZL9PLD przygotowa- nej do zainstalowania modułu dipPLD z układem XC3S200 oraz wyświetla- cza LCD o organizacji 2x16 znaków. Na fot. 2 pokazano moduł ZL10PLD (dipPLD) z układem XC2S200 i pozo- stałymi peryferiami. Schemat elektryczny płyty bazowej pokazano na rys. 3. Standardowym wyposażeniem płyty bazowej jest: – gniazdo VGA (sposób sterowania monitora umożliwia wyświetlenie maksymalnie 8 kolorów), – 4 przyciski do wykorzystania w aplikacji użytkownika, – złącze kart MMC, – 8 diod LED, – konwerter napięciowy interfejsu RS232 z gniazdem DB9F, – złącze konwertera USB<–>RS232 (np. ZL1USB, także dostępny Jak najtaniej: Spartan 3 + WebPack ISE Projekty przedstawione w kolejnych odcinkach kursu będą przygotowywane w taki sposób, aby można je był (w większości przypadków) zaimplementować na dowolną platformę sprzętową. Niektóre projekty będą wykorzystywały specyficzne cechy docelowych układów, co pozwoli zilustrować ich możliwości. Ponieważ obecnie, w sprzedaży detalicznej w naszym kraju są dostępne wyłącznie układy firmy Xilinx, jako platformę sprzętową wybrano układ XC3S200 z rodziny Spartan 3. Okazja dla Czytelników EP zainteresowanych układami FPGA Zestaw sprzętowy wykorzystywany w kursie jest do dostępny do 31.12.2006 na zasadach promocyjnych. Zakup zestawu składającego się z modułów ZL9PLD (uniwersalna płytka bazowa) oraz ZL10PLD (modułu DIP z układem XC3S200 z rodziny Spartan 3 firmy Xilinx) jest premiowany programatorem ZL4PRG (odpowiednik DLC III), za pomocą którego można programować i konfigurować w systemie układy CPLD i FPGA firmy Xilinx. www.sklep.avt.pl www.sklep.avt.pl www.sklep.avt.pl www.sklep.avt.pl www.sklep.avt.pl Biblioteki dla Protela 99SE/DXP Producent modułów ZL10PLD udostępnił na swojej stronie internetowej biblioteki do edytorów PCB i SCH (w formacie Protel/Altium), dzięki którym moduł ten można wygodnie „wprojektowywać” we własne aplikacje. Fot. 1. Widok zestawu ZL9PLD

Transcript of Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010....

Page 1: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

89Elektronika Praktyczna 10/2006

K U R S

Wielokrotnie już na łamach EP podejmowaliśmy próby przybliże-nia Czytelnikom układów PLD. Po-czątkowo (był to rok 1993), przede wszystkim ze względu na łatwą do-stępność, skupialiśmy się na ukła-dach niskiej skali integracji (PAL i GAL), następnie przeszliśmy przez układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała do zajęcia się „na poważnie” układami FPGA.

Układy FPGA w przykładach, część 1

Duże układy PLD tanieją w tempie zbliżonym do

popularnych mikrokontrolerów, co spowodowało, że układy

FPGA o dużych zasobach logicznych nie tylko są już

tańsze od stosunkowo prostych układów CPLD, ale stały się dostępne dla szerokich rzesz

użytkowników. Wiedza na temat ich możliwości i sposobów

przygotowywania projektów nie jest jednak powszechna, czego

dowiodła sierpniowa ankieta publikowana na naszej stronie

internetowe: ponad 95% spośród 4779 głosujących poparło pomysł rozpoczęcia kursu projektowania

na układach FPGA na łamach EP. Oto i on…

Co, czym i jakPrzygotowany przez nas kurs jest

maksymalnie zorientowany na prakty-kę, co oznacza, że skupimy się przede wszystkim na przykładowych projek-tach. Nie obędzie się jednak bez nie-zbędnego krótkiego wstępu, w którym przedstawimy architekturę układów Spartan 3 (które zostały wybrane jako kursowa platforma sprzętowa), możli-wości oferowane przez zasoby sprzę-towe tych układów, poznamy wybrane sposoby konfiguracji i sposoby progra-mowania tych układów, aż – w końcu – dojdziemy do serii przykładowych projektów. Wszystkie projekty będą przystosowane do łatwej implementa-cji w dalej opisanym zestawie PLD.

Planowane przez autorów etapy kursu (zapraszamy Czytelników do przekazywania sugestii!) przedstawio-no na str. 90.

Kursowa platforma sprzętowa

Ze względu na to, że zarów-no wybrane przez nas układy FPGA jak i ich konfiguratory są dostarczanew obudowach niezbyt „sympatycz-nych” podczas samodzielnego monta-żu (jakkolwiek jest on możliwy nawet w warunkach amatorskich), zrezygno-waliśmy z przygotowy-wania specjalnego zesta-wu uruchomieniowego. Zamiast tego w ofercie handlowej AVT znaj-dzie się uniwersalny zestaw składający się z płyty bazowej ZL9PLD o sporych możliwo-ściach oraz montowane-go w jej gnieździe mo-dułu dipPLD (ZL10PLD) z zamontowanym ukła-dem XC3S200, konfigu-ratorem XCF01S (1 Mb Flash), zestawem stabi-lizatorów LDO, genera-

torem taktującym, złączem JTAG oraz przyciskiem umożliwiającym ręczne wymuszenie rekonfiguracji układuFPGA. Na fot. 1 pokazano wygląd płyty bazowej ZL9PLD przygotowa-nej do zainstalowania modułu dipPLD z układem XC3S200 oraz wyświetla-cza LCD o organizacji 2x16 znaków. Na fot. 2 pokazano moduł ZL10PLD (dipPLD) z układem XC2S200 i pozo-stałymi peryferiami.

Schemat elektryczny płyty bazowej pokazano na rys. 3. Standardowym wyposażeniem płyty bazowej jest:

– gniazdo VGA (sposób sterowania monitora umożliwia wyświetlenie maksymalnie 8 kolorów),

– 4 przyciski do wykorzystania w aplikacji użytkownika,

– złącze kart MMC, – 8 diod LED, – konwerter napięciowy interfejsu

RS232 z gniazdem DB9F, – złącze konwertera USB<–>RS232

(np. ZL1USB, także dostępny

Jak najtaniej: Spartan 3 + WebPack ISEProjekty przedstawione w kolejnych odcinkach

kursu będą przygotowywane w taki sposób, aby można je był (w większości

przypadków) zaimplementować na dowolną platformę sprzętową. Niektóre projekty będą

wykorzystywały specyficzne cechy docelowychukładów, co pozwoli zilustrować ich możliwości.

Ponieważ obecnie, w sprzedaży detalicznej w naszym kraju są dostępne wyłącznie układy firmy Xilinx, jako platformę sprzętową wybrano

układ XC3S200 z rodziny Spartan 3.

Okazja dla Czytelników EP zainteresowanych układami FPGAZestaw sprzętowy wykorzystywany w kursie jest do dostępny do 31.12.2006 na zasadach promocyjnych. Zakup zestawu składającego się z modułów

ZL9PLD (uniwersalna płytka bazowa) oraz ZL10PLD (modułu DIP z układem XC3S200 z rodziny Spartan 3 firmy Xilinx) jest premiowany programatoremZL4PRG (odpowiednik DLC III), za pomocą którego można programować i konfigurować w systemie układy CPLD i FPGA firmy Xilinx.

www.sklep.avt.pl • www.sklep.avt.pl • www.sklep.avt.pl • www.sklep.avt.pl • www.sklep.avt.pl

Biblioteki dla Protela 99SE/DXPProducent modułów ZL10PLD udostępnił

na swojej stronie internetowej biblioteki do edytorów PCB i SCH (w formacie Protel/Altium),

dzięki którym moduł ten można wygodnie „wprojektowywać” we własne aplikacje.

Fot. 1. Widok zestawu ZL9PLD

Page 2: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

Elektronika Praktyczna 10/200690

K U R S

w ofercie handlowej AVT), – głośnik piezoelektryczny,– gniazdo USB, które służy do zasi-

lania (alternatywnie do zewnętrz-nego zasilacza sieciowego),

– zasilacz stabilizowany zapewniają-cy napięcia 5 V i 3,3 V,

– niewielkie pole uniwersalne (9x7 punktów),

– wyprowadzenia napięć zasilających 5 V i 3,3 V, dzięki którym można zasilić zewnętrzne układy logicz-ne,

– złącza szpilkowe gold–pin, na któ-re wyprowadzono linie I/O układu FPGA zamontowanego na module

dipPLD.Na rys. 4 znajduje się schemat

elektryczny modułu dipPLD o ozna-czeniu ZL10PLD. Zastosowano w nim układ XC3S200, którego zasoby lo-giczne odpowiadają ok. 200000 bra-mek logicznych, zwanych często prze-liczeniowymi. Jak wykażą przykłady, są to zasoby trudne do nadwyrężenia w średniozaawansowanych projektach. Poważniejszym ograniczeniem prak-tycznym jest stosunkowo niewiel-ka liczba wyprowadzeń dostępnych w obudowie (jest ich 100), ale da się ono odczuć dopiero przy zaawanso-wanych projektach. Żeby uzmysłowić sobie możliwości dostępne współcze-snym elektronikom warto wiedzieć, że XC3S200 jest jednym z najmniej-szych układów w rodzinie Spartan 3, a największy układ spośród obecnie dostępnych jest odpowiednikiem 5 mln bramek przeliczeniowych!

Standardowym wyposażeniem modułu ZL10PLD, poza układem XC3S200, jest:

– konfigurator Flash o pojemno-ści 1 Mb (wyspecjalizowana pa-

mięć firmy Xilinx o oznaczeniuXCF01S), zapewniający automa-tyczną konfigurację FPGA po włą-czeniu zasilania lub ręcznym wy-muszeniu rekonfiguracji,

– stabilizatory zapewniające prawi-dłowe napięcia zasilające o war-tościach: 1,2, 2,5 (FPGA) i 3,3 V (FPGA i konfigurator),

Plan kursu1. Wprowadzenie

• Budowa zestawu uruchomie-niowego

• Programowanie i konfiguracjaukładu XC3S200

• Tryby konfiguracji układu XC3S200

• Zasilanie układu XC3S200• Linie I/O w układzie

XC3S200• JTAG jako uniwersalny

interfejs do programowania i konfigurowania

2. Budowa, cechy funkcjonalne i parametry układów FPGA z rodziny Spartan 3

3. Projekty przykładowe

Fot. 2. Wygląd modułu dip PLD z układem XC3S200

Rys. 3. Schemat elektryczny płyty bazowej (ZL9PLD)

Page 3: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

91Elektronika Praktyczna 10/2006

K U R S

– podstawkę pod generator kwarco-wy (standardowo 3,6864 MHz),

– diodę LED sygnalizującą poprawne skonfigurowanie układu FPGA,

– przycisk umożliwiający wymusze-nie rekonfiguracji FPGA w dowol-nie wybranym przez użytkownika momencie,

– dwa złącza szpilkowe (po 32 sty-ki gold–pin każdy) umożliwiające wygodne zainstalowanie modułu w podstawce,

– zespół 5 inwerterów o charaktery-

styce przejściowej Schmitta (z hi-sterezą) z serii 74LVC lub 74LCX, które spełniają rolę układów do-pasowujących napięcia pomiędzy FPGA i zewnętrznymi układami cyfrowymi zasilanymi napięciami o wartości większej niż 3,6 V.

Programowanie i konfigurowanie FPGA

Część z informacji prezentowanych w tej części artykułu publikowaliśmy już w EP. Powtarzamy je, żeby zapew-

nić komplet informacji Czytelnikom zaczynającym z nami kurs.

Programowanie i konfiguracja FPGAjest tematem z kategorii „podstawo-wych” dla użytkowników FPGA, bo-wiem bez jego zrozumienia i opano-wania nie jest możliwe sprawdzenie działania „w krzemie” nawet najlepiej przygotowanego projektu.

Zaczniemy od rozróżnienia progra-mowania i konfigurowania, bowiem –wbrew popularnemu poglądowi – nie

Rys. 4. Schemat elektryczny modułu ZL10PLD

FPGA – co trzeba o nich wiedzieć – tip #1Pamięć konfiguracji

W większości przypadków układy FPGA są wyposażone w pamięć konfiguracji typuSRAM, z założenia ulotną (jej zawartość

zanika po odłączeniu zasilania). W związku z czym, każdorazowo po włączeniu zasilania konieczne jest skonfigurowanie układu FPGA,co pozwoli układowi normalnie funkcjonować.

Z tego powodu elementem standardowego systemu z FPGA jest wyspecjalizowana pamięć Flash, w której jest przechowywana startowa konfiguracja układu. Odtworzenie konfiguracji

układu po włączeniu zasilania może przebiegać automatycznie i trwa od kilkunastu do kilkuset

milisekund.

FPGA – co trzeba o nich wiedzieć – tip #2Napięcia na liniach I/O

Układy Spartan 3 (podobnie do większości rozwiązań konkurencyjnych) nie są

przystosowane do współpracy z układami cyfrowymi zasilanymi napięciem wyższym niż 3,3 V (niektóre nawet 2,5 V). Ograniczenie

to dotyczy obydwu konfiguracji linii I/O: jakowejściowej i wyjściowej.

Użytkownicy zamierzający łączyć ze sobą układy Spartan 3 z układami zasilanymi

napięciem 5 V powinni stosować konwertery poziomów (choćby układy TTL z rodziny

LVC/LCX) lub (nie zawsze jest to wskazane) rezystory włączone w szereg z linią I/O

ograniczające natężenie prądu wpływającego/wypływającego do/z linii I/O.

oznaczają tego samego. Konfigurować można wyłącznie układ FPGA poprzez wprowadzenie do jego pamięci konfi-guracji (SRAM) odpowiednich danych, które uzyskuje się w końcowych eta-pach kompilacji projektu. Wprowadze-nie tych danych można (w przypadku modułu ZL10PLD) uzyskać na jeden z dwóch sposobów:

– za pośrednictwem interfejsu JTAG,– za pośrednictwem wybranego in-

terfejsu konfiguracyjnego FPGA,z zewnętrznej pamięci nieulotnej. Zazwyczaj, ze względu na niewiel-ką liczbę linii I/O zaangażowanych do konfiguracji, wykorzystywane sąwyspecjalizowane konfiguratory, jakto pokazano na rys. 5.Z kolei programować można pa-

Page 4: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

Elektronika Praktyczna 10/200692

K U R S

mięć Flash, zintegrowaną w konfigu-ratorze. W przypadku układu XCF01S jest ona dostępna (co oznacza, że można ją programować, odczyty-wać i kasować) za pomocą interfejsu JTAG.

Ponieważ zarówno konfiguratorjak i FPGA zastosowane w module ZL10PLD są wyposażone w interfejs JTAG, układy te połączono w łań-cuch JTAG, którego budowę pokazano na rys. 5. Jako pierwszy w łańcuchu (czyli „najbliżej” sygnału TDI progra-matora) ulokowano układ XC3S200, drugim (i ostatnim w łańcuchu) ukła-dem jest XCF01S. Takie rozwiązanie, przy jednoczesnym podłączeniu kon-figuratora do interfejsu konfiguracyj-nego FPGA powoduje, że użytkownik może:

– modyfikować (w tym programować)i odczytywać zawartość pamięci Flash konfiguratora (via JTAG),

– konfigurować FPGA (via JTAG),– wymusić automatyczną konfigu-

rację FPGA po włączeniu zasila-nia (via interfejs konfiguracyjnyFPGA). Początek konfiguracji jestwyznaczany przez układ monito-rujący napięcie zasilania, dzięki czemu ryzyko rozpoczęcia konfi-guracji przed ustabilizowaniem się napięcia zasilającego jest zminima-lizowane.Na schemacie z rys. 5 pogrubioną

linią zaznaczono ścieżkę przesyłania

danych w łańcuchu JTAG. Należy pa-miętać, że wszystkie układy wchodzą-ce w skład łańcucha mają równolegle połączone (sterowane z programatora) linie: TCK i TMS, które służą od-powiednio do: taktowania i ustalania trybu pracy interfejsu JTAG. Przycisk służy do ręcznego wymuszania rekon-figuracji układu FPGA – jego naciśnię-cie wymusza skopiowanie zawartości pamięci Flash do pamięci konfigurują-cej SRAM wbudowanej w FPGA.

Sporo kłopotów może sprawić początkującym użytkownikom ko-nieczność stosowania „dziwnych” rozwiązań w ścieżkach sygnało-wych interfejsu JTAG. Wynika to z faktu, że napięcie o wartości 2,5 V jest traktowane jako maksymalne do-puszczalne (zgodnie z wymogami standar-du napięciowego LVC-MOS25) dla wszyst-kich wyspecjalizowa-nych linii I/O wyko-rzystywanych podczas konfiguracji układu( s ą t o : P R O G _ B , T D I , T M S , T C K , TDO, CCLK, DONE, M0, M1, M2 oraz H S W A P _ E N – tab. 1).

Uwaga ta dotyczy także linii I/O stosowanych podczas konfiguracjiza pomocą pamięci równoległych. Ponieważ większość dostępnych na rynku programatorów ISP jest przy-stosowana do pracy z napięciami z zakresu 3,3….5 V, konieczne jest zastosowanie rezystorów ogranicza-jących prądy wejściowe w liniach I/O zasilanych napięciem o wartości wyższej od 2,5 V (R5, R6, R7, R8 na rys. 4). Rezygnacja z tych rezy-storów może spowodować (przez przepływ prądu o zbyt dużym na-tężeniu, zazwyczaj powyżej 10 mA) uszkodzenie diod znajdujących się w strukturze układu pomiędzy linią I/O i linią zasilania (rys. 6), może także spowodować uszkodzenie lub niepoprawną pracę stabilizatora na-pięcia zasilającego, który – z natury rzeczy – nie jest przystosowany do przyjmowania prądu wpływającego od strony wejścia. Z tego powodu, oprócz rezystorów ograniczających prąd wejściowy, konieczne jest za-stosowanie rezystora odbierającego

prąd zwrotny (IREV na rys. 6) z linii zasilającej VCCAUX.

Poważną (w stosunku do niektó-rych rozwiązań oferowanych przez firmy konkurencyjne) zaletą układówSpartan 3 jest możliwość dołączania napięć zasilających w dowolnej ko-lejności. Można więc stosować stan-dardowe stabilizatory pozbawione sekwencerów zasilania – ma to po-ważny wpływ na ograniczenie kosztu (i tak niełatwych do zdobycia) pod-zespołów zastosowanych w obwodach zasilania.

Rys. 5. Konfiguracja łańcucha JTAG w ZL10PLD

Rys. 6. Konfiguracja zabezpieczeń na liniach I/O FPGA może wymusić konieczność stosowania dodat-kowych rezystorów

Page 5: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

93Elektronika Praktyczna 10/2006

K U R S

Możliwe sposoby konfiguracjiukładów FPGA z rodziny Spartan 3

Układy z rodziny Spartan 3 są przystosowane do obsługi 5 spo-sobów konfigurowania, z którychw praktyce najczęściej korzystam z dwóch: JTAG oraz Master Serial (z wykorzystaniem konfiguratora).Dość popularnym trybem konfigura-cji jest także Slave Serial, w którym konfigurowany układ FPGA jest źró-dłem sygnału zegarowego synchro-

nizującego transmisję danych z ze-wnętrznej pamięci nielotnej. Oby-dwa tryby Serial umożliwiają łącze-nie konfigurowanych układów w ka-skady, dzięki czemu w niektórych przypadkach można wykorzystać jeden konfigurator (o odpowiedniodużej pojemności) do współpracy z kilkoma układami FPGA.

Wybór trybu konfiguracji odby-wa się za pomocą trzech dedyko-wanych wejść oznaczonych M0…2, zgodnie z opisem z tab. 2. Zmiana trybu konfigurowania jest możliwapoprzez zmianę stanów logicznych na wejściach M0…2 i wymuszenie rekonfiguracji układu (np. poprzezwyłączenie i włączenie zasilania lub zainicjowanie interfejsu JTAG).

Na rys. 4 pokazano przykłado-wy schemat elektryczny połączeń (taki jak zastosowano w module ZL10PLD) pomiędzy konfigurato-rem XCF01S oraz układem z ro-dziny Spartan 3. Takie połączenie układów umożliwia automatyczne konfigurowanie FPGA po włączeniuzasilania oraz (alternatywnie) kon-figurowanie FPGA za pomocą pro-

FPGA – co trzeba o nich wiedzieć – tip #3Współcześnie produkowane, „duże” pod względem zasobów, układy FPGA są zasilane w kłopotliwy sposób, wymagają bowiem zazwyczaj dwóch lub trzech (m.in. układy z rodziny Spartan 3) napięć

zasilających o różnych wartościach. Jedną z najpoważniejszych przyczyn takich rozwiązań są nowoczesne technologie produkcji struktur krzemowych, wykorzystywane do produkcji układów FPGA.

Z jednej strony zapewniają one duża gęstość upakowania struktur i w związku z tym ich relatywnie niską cenę, z drugiej występuje konieczność zasilania „rdzenia” układu napięciem o niewielkiej

wartości, a linii I/O współpracujących

z otoczeniem, napięciem o wartości co najmniej

3,3 V.Tego, że zasilanie

i sposoby dołączania elementów peryferyjnych

do układów z rodziny Spartan 3 wywołują

wiele problemów, dowodzi specjalna nota

aplikacyjna przygotowana w lutym 2006 firmę

Xilinx (jej oznaczenie: XAPP453). Polecamy jej przestudiowanie

wszystkim Czytelnikom zainteresowanym tymi

układami.

FPGA – co trzeba o nich wiedzieć – tip #4Wejścia M0…2 są przystosowane do

sterowania poziomami logicznymi zgodnymi ze standardem LVCMOS25 co oznacza, że

maksymalna, bezpieczna wartość napięcia na tym wejściu nie może być większa niż 2,5 V.

Tab. 1. Maksymalne napięcia wejściowe wybranych linii specjalnych oraz wielofunkcyjnych

Nazwa linii

Maksymalne napięcie

wejściowe[V]

Odnośny biegun

zasilania I/O

PROG_B 2,5 –HSWAP_EN 2,5 –

TDI 2,5 –TMS 2,5 –TCK 2,5 –TDO 2,5 –

CCLK 2,5 –DONE 2,5 –M0…2 2,5 –INIT_B = VCCO_4 VCCO_4DOUT = VCCO_4 VCCO_4BUSY = VCCO_4 VCCO_4DIN = VCCO_4 VCCO_4

D0…3 = VCCO_4 VCCO_4D4…7 = VCCO_4 VCCO_5

RDWR_B = VCCO_4 VCCO_5CS_B = VCCO_4 VCCO_5

gramatora dołączonego do interfejsu JTAG. Wybór aktywnego kanału ko-munikacyjnego jest możliwy za po-mocą zworki JP2 – układ FPGA jest konfigurowany w jednym z dwóchtrybów zaznaczonych w tab. 2 za pomocą szarego tła: Master Serial lub JTAG.

Linie I/O układu FPGA podczas konfiguracji

Kolejnym zagadnieniem, wartym do wzięcia pod uwagę w związku z konfigurowaniem FPGA, jest za-chowanie się linii I/O podczas włą-czania zasilania i konfigurowaniaFPGA. Wbudowany w układy Spar-tan 3 układ POR (Power On Reset) powoduje, że linie I/O są utrzymy-wane w stanie wysokiej impedancji do chwili osiągnięcia prawidłowych wartości przez napięcia VCCINT, VCCO_4, VCCAUX i następnie skonfigurowaniaukładu. Po ustaleniu się napięć za-silających, stany linii I/O zależą od konfiguracji układu – jeśli FPGA niezostał skonfigurowany, na liniach I/O jest utrzymywany stan wysokiej impedancji. Nie ma więc ryzyka, że konfiguracja lub rekonfiguracjaukładu FPGA w systemie cyfrowym, którego praca jest inicjowana (np. poprzez zerowanie) może zostać za-burzona przez przypadkowe sygnały występujące na jego liniach I/O.

W przypadku takiej konieczności jest możliwe dołączenie do linii I/O rezystorów podciągających, które są aktywowane podczas konfiguracjiukładu. Wymaga to zwarcia wypro-wadzenia HSWAP_EN do masy za-silania (domyślnie jest ono podcią-gnięte do plusa).Jacek [email protected] Zbysiński, [email protected]

Tab. 2. Możliwe tryby konfiguracji układów Spartan 3

Nazwa trybu konfiguracji M0 M1 M2 Sygnał

synchronizujący

Szerokość magistrali

danychMaster Serial 0 0 0 CCLK (wy) 1Slave Serial 1 1 1 CCLK (we) 1

Master Parallel 1 1 0 CCLK (wy) 8Slave Parallel 0 1 1 CCLK (we) 8

JTAG 1 0 1 TCK (we) 1

Page 6: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

Elektronika Praktyczna 11/200692

K U R S

Układy FPGA w przykładach, część 2

Już najprostsze układy FPGA z rodziny Spartan 3 oferują użyt-kownikom duże zasoby logiczne i bardzo bogate wyposażenie do-datkowe, charakteryzujące się dużą elastycznością i uniwersalnością. Podstawowe informacje na temat zasobów dostępnych w tych ukła-dach zebrano w tab. 3.

To właśnie dzięki bogatemu wy-posażeniu wewnętrznemu układy FPGA są coraz częściej stosowane jako platformy System–on–a–Chip, w których są implementowane kom-pletne systemy cyfrowe łącznie z „miękkimi” rdzeniami mikroproce-sorowymi. A to właśnie układy typu SoC są przyszłością elektroniki.

W drugiej części artykułu zajmiemy się omówieniem

wyposażenia (po „mikrokontrolerowemu”: peryferiów)

układów FPGA z rodziny Spartan 3, co ułatwi ich wykorzystywanie

w praktyce. To właśnie wewnętrzne zespoły konfigurowalnych pamięci, uniwersalne porty I/O, wbudowane

syntezery sygnałów zegarowych, sprzętowe zespoły mnożące

i pozostałe – mniej spektakularne elementy – tworzą potęgę

możliwości współczesnych FPGA.

Budowa układów Spartan 3

U k ł a d y F P G A (Field Programmable Gate Array) to jeden z dwóch (drugi to układy mniejszej ska-li integracji – CPLD, czyli Complex Pro-g r a m m a b l e L o g i c Devices ) , produko-wanych obecnie, ro-dzajów układów PLD (Programmable Logic Devices). Układy te charakteryzują s ię regularną budową, opartą (w przypadku

firmy Xilinx) na zespołach wielu identycznych lub bardzo do siebie podobnych bloków CLB (Configu-rable Logic Block). Schemat blo-

Rys. 7. Schemat blokowy ilustrujący budowę układów Spartan 3

FPGA – co trzeba o nich wiedzieć – tip 5Bezpieczeństwo projektów w FPGA

Układy Spartan 3 nie są wyposażone w zaawansowane mechanizmy ochrony konfiguracji, co powoduje, że projekty

zagrożone przez „piratów” powinny być implementowane na bardziej zaawansowanych pod tym względem układach FPGA. Pamięć

konfigurująca Flash XCF01S (i inne z serii xxS)jest zabezpieczona przed nieuprawnionym

odczytem przez JTAG, ale w żaden sposób nie są chronione dane przesyłane

interfejsem szeregowym wykorzystywanym do konfigurowania FPGA.

Rys. 8. Budowa komórki logicznej CLB w układach Spartan 3

Page 7: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

93Elektronika Praktyczna 11/2006

K U R S

kowy układu z rodziny Spartan 3 pokazano na rys. 7. Na schemacie – poza CLB – widać także pamięci BlockRAM, sprzętowe multiplikato-ry, syntezery przebiegów zegaro-wych DCM (Digital Clock Manager) oraz komórki I/O o nazwie IOB (In-put–Output Block). Kolejno je omó-wimy.

CLBBloki CLB (w układach Spar-

tan 3 jest ich od 1728 do 74880 sztuk) są zbudowane z 4 bloków logicznych nazwanych przez fir-mę Xilinx mianem slice. Schemat ilustrujący rozmieszczenie slice’ów w CLB pokazano na rys. 8. Jak widać, od jednej strony slice’y są

List. 1. Opis VHDL dwuportowej pamięci 16 x N (na bazie XAPP464)–––– Module: XC3S_RAM16XN_D–––– Description: Distributed SelectRAM example–– Dual Port 16 x N–bit–– Use template „RAM_16D.vhd”–– and registered outputs (optional)–––– Device: Spartan–3 Family––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––library IEEE;use IEEE.std_logic_1164.all;–––– pragma translate_offlibrary UNISIM;use UNISIM.VCOMPONENTS.ALL;–– pragma translate_on––entity XC3S_RAM16XN_D is generic ( data_width : integer := 8 –– Replace by the data width ); port ( DATA_IN : in std_logic_vector(data_width–1 downto 0); ADDRESS : in std_logic_vector(3 downto 0); ADDRESS_DP : in std_logic_vector(3 downto 0); WRITE_EN : in std_logic; CLK : in std_logic; O_DATA_OUT : out std_logic_vector(data_width–1 downto 0); O_DATA_OUT_DP : out std_logic_vector(data_width–1 downto 0) ); end XC3S_RAM16XN_D;––architecture XC3S_RAM16XN_D_arch of XC3S_RAM16XN_D is–––– Components Declarations:–– component RAM16X1D –– See initialization example in the reference templates port ( D : in std_logic; WE : in std_logic; WCLK : in std_logic; A0 : in std_logic; A1 : in std_logic; A2 : in std_logic; A3 : in std_logic; DPRA0 : in std_logic; DPRA1 : in std_logic; DPRA2 : in std_logic; DPRA3 : in std_logic; SPO : out std_logic; DPO : out std_logic ); end component;–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– Signal Declarations:signal DATA_OUT : std_logic_vector(data_width–1 downto 0);signal DATA_OUT_DP : std_logic_vector(data_width–1 downto 0);––begin–––– Registered outputs / Synchronous readREGISTERED_OUT: process (CLK)begin if (CLK’event and CLK = ‚1’) then O_DATA_OUT <= DATA_OUT; O_DATA_OUT_DP <= DATA_OUT_DP; end if;end process REGISTERED_OUT;–– –– Distributed SelectRAM InstantiationRAM16X1D_X: for i in 0 to data_width–1 generateU_RAM16X1D: RAM16X1D port map ( D => DATA_IN(i), –– insert input signal WE => WRITE_EN, –– insert Write Enable signal WCLK => CLK, –– insert Write Clock signal A0 => ADDRESS(0), –– insert Address 0 signal port SPO A1 => ADDRESS(1), –– insert Address 1 signal port SPO A2 => ADDRESS(2), –– insert Address 2 signal port SPO A3 => ADDRESS(3), –– insert Address 3 signal port SPO DPRA0 => ADDRESS_DP(0), –– insert Address 0 signal port DPO DPRA1 => ADDRESS_DP(1), –– insert Address 1 signal port DPO DPRA2 => ADDRESS_DP(2), –– insert Address 2 signal port DPO DPRA3 => ADDRESS_DP(3), –– insert Address 3 signal port DPO SPO => DATA_OUT(i), –– insert output signal SPO DPO => DATA_OUT_DP(i) –– insert output signal DPO );end generate;––end XC3S_RAM16XN_D_arch;––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Plan kursu1. Wprowadzenie

• Budowa zestawu uruchomie-niowego

• Programowanie i konfiguracjaukładu XC3S200

• Tryby konfiguracji układuXC3S200

• Zasilanie układu XC3S200• Linie I/O w układzie

XC3S200• JTAG jako uniwersalny

interfejs do programowania i konfigurowania

2. Budowa, cechy funkcjonalne i parametry układów FPGA z rodziny Spartan 3• CLB• IOB• Globalne sygnały zegarowe• DCM• Sprzętowe multiplikatory• Pamięć BlockRAM

3. Projekty przykładowe

Rys. 9. Każde ulokowane wewnątrz matrycy CLB może bezpośrednio komunikować się z 8 sąsiadującymi CLB

Page 8: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

Elektronika Praktyczna 11/200694

K U R S

FPGA – co trzeba o nich wiedzieć – tip 6Alternatywne możliwości CLB

Bloki CLB, będące podstawowym konfigurowalnym elementem logicznym

w układach Spartan 3, mogą spełniać także dodatkowe funkcje: rejestrów przesuwnych o regulowanej długości oraz pamięci ROM,

SRAM i DualPort SRAM. Pojemności tej pamięci w układach Spartan 3 mieszczą się

w przedziale 12…520 kb.

Jak działa FPGA?Klasycznym elementem

architektury układów FPGA są tablice LUT, często zwane

generatorami funkcji logicznych. Realizują one ustaloną przez

użytkownika funkcję logiczną kilku (zazwyczaj 3...5) zmiennych. Za

konfigurację – czyli sposób działania– LUT odpowiada pamięć konfiguracji

SRAM, której zawartość trzeba odtwarzać po włączeniu zasilania

układu. Do tego celu niezbędna jest zewnętrzna pamięć nielotna, często

nazywana konfiguratorem.

Tab. 3. Zestawienie najważniejszych parametrów układów z rodziny Spartan–3

ParametrTyp układu

XC3S50 XC3S200 XC3S400 XC3S1000 XC3S1500 XC3S2000 XC3S4000 XC3S5000Liczba bramek

przeliczeniowych 50000 200000 400000 1000000 1500000 2000000 4000000 5000000

Liczba komórek logicznych 1728 4320 8064 17280 29952 46080 62208 74880

Sprzętowe multiplikatory 4 12 16 24 32 40 96 104

Pojemność pamięci Block

RAM72 kb 216 kb 288 kb 432 kb 576 kb 720 kb 1728 kb 1872 kb

Pojemność pamięci

rozproszonej Distributed RAM

12 kb 30 kb 56 kb 120 kb 208 kb 320 kb 432 kb 520 kb

Liczba DCM 2 4 4 4 4 4 4 4Maksymalna liczba różnicowych linii

I/O56 76 116 175 221 270 312 344

Maksymalna liczba asymetrycznych

linii I/O124 173 264 391 487 565 712 784

dołączone do magistral zapewnia-jących komunikację w obrębie ca-łego układu FPGA (tzw. połącze-nia globalne o różnym zasięgu), od drugiej strony – do magistral

zapewniających komunikację lokal-ną z sąsiednimi CLB. Każdy slice ma własny adres w obrębie CLB (np. X1Y0), który projektant może wykorzystać wraz z numerem CLB

w przypadku konieczności ręcznego (rzadko się to obecnie zdarza) roz-mieszczania bloków funkcjonalnych w obrębie FPGA. Slice pogrupowa-no je po dwa (w kolumny) z wy-dzielonymi szybkimi łańcuchami propagacji sygnału CARRY, dzięki czemu możliwe są implementacje szybko działających bloków logicz-nych wykorzystujących kaskadowe przeniesienia (liczniki, arytmometry itp.). Jak wspomniano, każdy CLB ulokowany wewnątrz grupy ma możliwość bezpośredniej komuni-kacji z sąsiadującymi CLB, jest ich zazwyczaj 8 (rys. 9). Wymiana da-nych z dalej położonymi CLB od-bywa się za pomocą dodatkowych zasobów połączeniowych (rys. 10):

– linii długich (Long Lines, do-łączonych do – kolejno – co szóstego CLB), które są najszyb-szym traktem komunikacyjnym wewnątrz FPGA, często wyko-rzystywanym zamiennie z glo-balnymi liniami zegarowymi,

– linii 8–krotnych (Hex Lines), które rozprowadzają sygnały na mniejsze odległości, oferując większe (niż Long Lines) moż-

Rys. 10. Wymianę sygnałów w układach Spartan 3 zapewniają rozbudowa-ne zasoby połączeniowe o różnych cechach

Page 9: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

95Elektronika Praktyczna 11/2006

K U R S

Rys. 11. Budowa slice’a

Okazja dla Czytelników EP zainteresowanych układami FPGAZestaw sprzętowy wykorzystywany w kursie jest do dostępny do 31.12.2006 na zasadach promocyj-nych. Zakup zestawu składającego się z modułów ZL9PLD (uniwersalna płytka bazowa) oraz ZL10PLD

(modułu DIP z układem XC3S200 z rodziny Spartan 3 firmy Xilinx) jest premiowany programatoremZL4PRG (odpowiednik DLC III), za pomocą którego można programować i konfigurować w systemie

układy CPLD i FPGA firmy Xilinx.

www.sklep.avt.pl • www.sklep.avt.pl • www.sklep.avt.pl • www.sklep.avt.pl • www.sklep.avt.pl

www.sklep.avt.pl • www.sklep.avt.pl • www.sklep.avt.pl • www.sklep.avt.pl • www.sklep.avt.pl

Page 10: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

Elektronika Praktyczna 11/200696

K U R S

List. 2. Opis VHDL dwuportowej pamięci 16 x N (na bazie XAPP464)–––– Module: XC3S_RAM16XN_S–––– Description: Distributed SelectRAM example–– Single Port 16 x N–bit–– Use template „RAM_16S.vhd”–– and registered outputs (optional)–––– Device: Spartan–3 Family––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––library IEEE;use IEEE.std_logic_1164.all;–––– pragma translate_offlibrary UNISIM;use UNISIM.VCOMPONENTS.ALL;–– pragma translate_on––entity XC3S_RAM16XN_S is generic ( data_width : integer := 8 –– Replace by the data width ); port ( DATA_IN : in std_logic_vector(data_width–1 downto 0); ADDRESS : in std_logic_vector(3 downto 0); WRITE_EN : in std_logic; CLK : in std_logic; O_DATA_OUT : out std_logic_vector(data_width–1 downto 0) ); end XC3S_RAM16XN_S;––architecture XC3S_RAM16XN_S_arch of XC3S_RAM16XN_S is–––– Components Declarations:–– component RAM16X1S –– See initialization example in the reference templates port ( D : in std_logic; WE : in std_logic; WCLK : in std_logic; A0 : in std_logic; A1 : in std_logic; A2 : in std_logic; A3 : in std_logic; O : out std_logic ); end component;–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– Signal Declarations:signal DATA_OUT : std_logic_vector(data_width–1 downto 0);––begin–––– Registered outputs / Synchronous readREGISTERED_OUT: process (CLK)begin if (CLK’event and CLK = ‚1’) then O_DATA_OUT <= DATA_OUT; end if;end process REGISTERED_OUT;–– –– Distributed SelectRAM InstantiationRAM16X1S_X: for i in 0 to data_width–1 generateU_RAM16X1S: RAM16X1S port map ( D => DATA_IN(i), –– insert input signal WE => WRITE_EN, –– insert Write Enable signal WCLK => CLK, –– insert Write Clock signal A0 => ADDRESS(0), –– insert Address 0 signal A1 => ADDRESS(1), –– insert Address 1 signal A2 => ADDRESS(2), –– insert Address 2 signal A3 => ADDRESS(3), –– insert Address 3 signal O => DATA_OUT(i) –– insert output signal );end generate;––end XC3S_RAM16XN_S_arch;––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

liwości połączeniowe i są dołą-czone do co trzeciego CLB,

– linii podwójnych (Double Lines), które zapewniają bezpośrednią komunikację pomiędzy pozosta-łymi CLB.W slice’ach tworzących CLB ulo-

kowano zasoby logiczne, których nawet pobieżna analiza (choćby na schemacie pokazanym na rys. 11) pokazuje ogrom możliwości i ela-styczność tych komórek, których – ogólnie rzecz ujmując – budowa jest taka sama jak w pierwszych

układach FPGA. Każdy slice wy-posażono w dwie konfigurowalnetablice LUT (F–LUT i G–LUT), na wejścia których są podawane 4 sygnały (zmienne). Tablice te speł-niają rolę konfigurowalnych, kom-binacyjnych funktorów logicznych (często są nazywane generatorami funkcji), które umożliwiają wyko-nanie dowolnej funkcji logicznej do 4 zmiennych wejściowych. Na wyjściu LUT ulokowano przerzut-nik, którego sposób działania (czyli jego typ) można także skonfiguro-wać. Na schemacie pokazanym na rys. 11 zilustrowano budowę slice’y X0Y1 i X0Y0 (rys. 8), które wy-posażono w sprzętowe rozszerzenia (zaznaczone na rys. 11 linią prze-rywaną) pozwalające skonfigurować je jako rejestry przesuwne lub ze-społy rozproszonej pamięci (tzw. Distributed RAM). Slice’y X1Y0 i X1Y1 mają nieco prostszą budo-wę (bez fragmentów oznaczonych liniami przerywanymi na rys. 11), co ogranicza ich funkcjonalność do znanej z klasycznych wersji FPGA. O ile – w większości przypadków – możliwość wygodnej implemen-tacji rejestrów przesuwających nie budzi specjalnych emocji, to moż-liwość uzyskania dodatkowych za-sobów pamięciowych w LUT bywa atutem nie do pogardzenia. W każ-dym CLB można zaimplemento-wać pamięć ROM o pojemności do 128x1 bitów, pamięć SRAM o po-jemności do 64x1 bitów (co ozna-cza, że możliwe są także warianty 2x32x1 lub 4x16x1) lub pamięć DualPortRAM o pojemności 2x16x1 bit. Pamięci te – dzięki rejestrom na wyjściach CLB – można wypo-sażyć w mechanizmy synchronizacji odczytu danych.

Na list. 1 przedstawiono opis w języku VHDL dwuportowej pa-mięci SRAM implementowanej w zasobach Distributed RAM, a na list. 2 opis pamięci jednoporto-wej (obydwie o organizacji 16xN, w obydwu zastosowano synchro-niczny odczyt danych). Prezento-wane przykłady pochodzą z przy-kładów przygotowanych przez in-żynierów firmy Xilinx do notyaplikacyjnej XAPP464 (publikujemy na CD–EP11/2006B).Jacek [email protected] Zbysiński, [email protected]

Page 11: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

Elektronika Praktyczna 12/2006100

K U R S

Układy FPGA w przykładach, część 3

Kontynuujemy prezentację zasobów dostępnych w układach FPGA z rodziny Spartan 3. W tej – przedostatniej „teoretycznej” – części

kursu omawiamy budowę komórek I/O oraz zasady dystrybucji sygnałów zegarowych w układach FPGA.

Rys. 12. Budowa komórki IOB

Komórki wejścia wyjścia – IOB

Budowa komórek I/O w układach Spartan 3 jest dość skomplikowana (rys. 12), ale możliwości oferowane przez nie przewyższają (pod wzglę-dem elastyczności i funkcjonalno-

ści) rozwiązania spotykane w mi-krokontrolerach i innych układach cyfrowych.

Zadaniem komórek IOB (Input––Output Block) jest zapewnienie dwukierunkowej wymiany danych pomiędzy komórkami CLB tworzą-

cymi strukturę logiczną zaprojek-towaną przez użytkownika (patrz EP11/2006) z otoczeniem.

Jak widać na rys. 12, komór-ka IOB składa się z trzech ścieżek przepływu danych: ścieżki stero-wania bufora HiZ (trójstanowego), ścieżki wyjściowej i ścieżki wej-ściowej. Podstawowym zadaniem ścieżki sterowania bufora HiZ jest wytwarzanie sygnałów sterujących pracą wyjściowego bufora trójstano-wego, który znajduje się w ścieżce wyjściowej. Jej zadaniem jest z kolei formowanie sygnałów wyjściowych, podawanych na fizyczne wyprowa-dzenie układu. Elementy zintegrowa-ne w ścieżce wejściowej odpowiada-ją między innymi za uformowanie sygnałów podawanych z zewnątrz do układu FPGA. Ponieważ linie I/O w układach z rodziny Spartan 3 są przystosowane do współpracy z różnymi standardami napięciowy-mi, mogą one pracować także jako wejścia różnicowe (symetryczne), to w torach wejściowych zastosowano analogowe komparatory napięcia. Je-den z nich porównuje napięcie na linii I/O z napięciem na linii VREF (linia wspólna dla grup I/O), dru-

gi jest wykorzystany do konwersji sygnału różni-cowego (symetrycznego) na asymetryczny, przy czym trzeba pamiętać, że w takim trybie pracy wykorzystywane są dwie linie I/O sąsiadujących ze sobą komórek IOB.

Wszystkie ścieżki ko-mórki IOB mają wbudo-wane po dwa konfiguro-walne przerzutniki, któ-re można wykorzystać m.in. podczas transmisji danych w trybie DDR (Double Data Rate), czy-li z taktowaniem oby-dwoma zboczami sygna-łu zegarowego.

K a ż d y b l o k I O B wyposażono w r ezy-

story podciągające pull–up i pull––down, które użytkownik może indywidualnie uaktywniać i odłą-

Page 12: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

101Elektronika Praktyczna 12/2006

K U R S

Plan kursu1. Wprowadzenie

• Budowa zestawu uruchomie-niowego

• Programowanie i konfiguracjaukładu XC3S200

• Tryby konfiguracji układuXC3S200

• Zasilanie układu XC3S200• Linie I/O w układzie

XC3S200• JTAG jako uniwersalny

interfejs do programowania i konfigurowania

2. Budowa, cechy funkcjonalne i parametry układów FPGA z rodziny Spartan 3• CLB• IOB• Globalne sygnały zegarowe• DCM• Sprzętowe multiplikatory• Pamięć BlockRAM

3. Projekty przykładowe

wyprowadzeń układu. Po-niżej pokazano jedną linię z pliku *.ucf, która opisuje parametry linii I/O wypro-wadzającej sygnał o nazwie na_probe. Sygnał ten jest dołączony do wyprowadze-nia numer 87, jest zgod-ny ze standardem napię-ciowym LVCMOS 3,3 V, wydajność prądowa linii I/O wynosi 16 mA, dołą-czony jest do niej pin–ke-eper. Dodatkowo ustalono, że prędkość zmian sygnału na wyjściu będzie miała maksymalną dopuszczalną wartość (dyrektywa SLE-W=FAST):NET „na_probe” LOC = „P87” | IOSTANDARD = LVCMOS33 | DRIVE = 16 | KEEPER | SLEW = FAST;

Edyc ję p l iku * .uc f można wykonać za pomo-cą edytora tekstowego lub – w wielu przypadkach jest to wy-godniejsze – za pomocą edytora wy-muszeń XilinxPACE, zintegrowanego w pakiecie WebPack ISE (rys. 13).

Jak widać na rys. 12, każda li-nia I/O została zabezpieczona przed uszkodzeniem ESD za pomocą diod włączonych szeregowo–zaporowo. Po-woduje to ograniczenie maksymalne-go napięcia na wejściu do wartości z przedziału ok. VCCO –0,5 V…VCCO + 0,5 V, nie ma więc moż-liwości bezpośredniej współpracy ze standardowymi układami TTL lub CMOS zasilanymi napięciem 5 V. Użytkownicy zamierzający łączyć ze sobą układy Spartan 3 z układami

Rys. 13. Konfigurację linii I/O umożliwia m.in. edytor wymu-szeń XilinxPACE

Rys. 14. Możliwe konfiguracje I/O z aktywnym modułem DCI

FPGA – co trzeba o nich wiedzieć – tip #7Sygnały globalne

Do dystrybucji sygnałów taktujących w układach FPGA jest zalecane

wykorzystywanie globalnych linii zegarowych. Należy do nich dołączać możliwie duże grupy elementów taktowanych tym samym sygnałem

zegarowym.

czać. Ponadto, każda linia I /O jest wyposażona w tzw. pin–keeper, czyli przerzutnik utrzymujący na linii ostatni wymuszony z zewnątrz stan logiczny, dzięki któremu nie ma ko-nieczności dołączania do zewnętrzne-go potencjału niewykorzystanych linii I/O. Można go stosować wymiennie z rezystorami pull–up i pull–down. Sterowanie dołączaniem rezystorów jest możliwe zarówno z poziomu opi-su HDL jak i (co jest zdecydowanie łatwiejsze do opanowania i wygod-niejsze w stosowaniu) z poziomu pli-ku wymuszeń UCF (User Constraints File), w którym znajdują się także przypisania sygnałów do konkretnych

zasilanymi napięciem wyższym niż 3,3 V powinni zastosować konwerte-ry poziomów (w konwerterach jedno-kierunkowych układy TTL z rodziny LVC/LCX) lub (zdecydowanie gor-sze rozwiązanie) rezystory włączone w szereg z linią I/O, ograniczające na-tężenie prądu wpływającego/wypływa-jącego do/z linii I/O.

Page 13: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

Elektronika Praktyczna 12/2006102

K U R S

List. 3. Sposób wykorzystania w projekcie globalnego bufora sygnału zegarowego BUFG (prede-finiowany przez producenta)BUFG_inst : BUFG port map ( O => moje_wyjscie, I => moje_wejscie );

Rys. 17. Atrybut globalności można nadać wybranej linii sygnałowej także w edytorze schematów

Interesującym wyposażeniem ko-mórek IOB jest także blok DCI (Dy-namically Controlled Impedance), któ-rego zadaniem jest dopasowanie falo-we (ma więc znaczenie dla sygnałów o dużej częstotliwości) linii I/O do ob-ciążenia. Impedancję wyjściową (sze-regową i równoległą) linii I/O dobiera się za pomocą zewnętrznych rezysto-rów (po dwa na każdy zespół DCI), dołączonych do linii VRN i VRP

(funkcje alternatywne wybranych linii I/O). Możliwe konfiguracje bufora wyj-ściowego z aktywnym DCI pokazano na rys. 14. Odpowiednia konfiguracjaDCI jest uaktywniana automatycznie po wybraniu trybu pracy I/O, co tak-że pokazano na rys. 14.

Globalne linie zegaroweSporo problemów sprawia począt-

kującym użytkownikom układów PLD zrozumienie koncepcji sygnałów glo-balnych, dlatego postaramy się ją tu nieco rozjaśnić.

W typowych projektach występu-ją trzy rodzaje sygnałów potrzebnych jednocześnie w wielu miejscach ukła-du FPGA (takie sygnały są nazywane globalnymi), są to sygnały: zegarowe, zerujący/ustawiający i sygnał zezwala-jący na pracę buforów trójstanowych (szczególnie istotny w systemach opie-rających się na komunikacji magistra-lowej). Ponieważ standardowe zasoby połączeniowe (pomiędzy CLB) w ukła-dach Spartan 3 – jak na układy FPGA przystało – są podzielone na krótkie segmenty, to dystrybucja nimi sygnałów potrzebnych w wielu miej-scach jednocześnie powoduje zajęcie znacznej ich części przez niewielką liczbę sygnałów (rys. 15). Dodatkową, negatywną konsekwencją „segmento-wych” tras przesyłania sygnałów jest znaczne ich rozmycie w funkcji cza-su: czasy przebiegu silnie zależą od

trasy, a te zależą zarówno od sposobu opisu HDL jak i algorytmów optymalizacyj-nych syntezera logicznego. Jakkolwiek dystrybucja sy-gnałów globalnych za po-mocą połączeń lokalnych jest możliwa, to nie jest w praktyce możliwe uzy-skanie stabilnej pracy tak zaprojektowanego układu z częstotliwościami taktowa-nia bliskimi częstotliwości maksymalnej, wynikającej z parametrów czasowych układu FPGA.

Generalna zasada Układy Spartan 3 wy-

posażono w 8 globalnych linii służących do dystry-bucji niezależnych sygna-łów zegarowych (rys. 16), które są dołączane do l ini i przesyłowych za pomocą multiplekserów 2/1 spełniających jedno-

cześnie rolę buforów separujących źródło sygnału zegarowego od tak-towanej logiki. Inne wymienione sygnały często traktowane w PLD jako globalne (tzn. zerujący/ustawia-jący i zezwalający dla buforów trój-stanowych) w układach Spartan 3 nie zostały wyprowadzone na ze-wnątrz układów.

Wykorzystanie w projekcie glo-balnych linii zegarowych jest moż-liwe na kilka sposobów, z których dwa są najbardziej popularne:

– przypisanie linii rozprowadzają-cej sygnały taktujące wewnątrz FPGA do wyprowadzenia GCLKx jest informacją dla syntezera, że użytkownik chce wykorzystać globalną linię zegarową,

– w opisie projektu (zarówno pi-sanego w HDL – list. 3, jak i w postaci schematu – rys. 17) można zastosować predefiniowa-ny bufor BUFG.Skuteczność obydwu przedsta-

wionych sposobów jest taka sama.Jacek [email protected] Zbysiński, [email protected]

Rys. 15. Dystrybucja sygnałów zega-rowych połączeniami segmentowa-nymi powoduje m.in. zmniejszenie maksymalnej częstotliwości taktowa-nia projektu

Rys. 16. Budowa systemu dystrybucji sygnałów zegarowych w układach Spartan 3

Page 14: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

97Elektronika Praktyczna 1/2007

K U R S

Układy FPGA w przykładach, część 4

wyprowadzenie FPGA.

Zastosowa-nie w projektach bloków DCM jest możliwe na dwa sposoby: za po-mocą „dołączenia” DCM z wyko-rzystaniem opisu HDL (przykład opisu w języku VHDL pokazano na list. 4), lub – w przypadku korzy-stania z opisu za pomocą schema-tu – dzięki wykorzystaniu elementu bibliotecznego o nazwie DCM, któ-ry znajduje się w kategorii Gene-ral (rys. 21). W przypadku opisu pokazanego na list. 4 parametry-zacja (konfiguracja) DCM odbywa się za pomocą wpisania odpowied-nich wartościach, których możliwe warianty zaznaczono pogrubioną czcionką w komentarzach. Nieco wygodniej przebiega konfiguracja DCM w edytorze schematów: dwu-krotne kliknięcie w symbol graficz-ny DCM otwiera okno edycyjne, które pokazano na rys. 22. Za jego pomocą można wygodnie, w „win-dowsowym” stylu sparametryzować i skonfigurować DCM, bez koniecz-ności modyfikowania opisu HDL.

Jest to ostatnia „teoretyczna” część kursu. Za miesiąc zaczynamy prezentację przykładów aplikacji na FPGA.

W tym odcinku cyklu skupiamy się na trzech istotnych zasobach układów Spartan 3: syntezerach DCM, sprzętowych multiplikatorach

i wbudowanej w struktury układów, konfigurowalnej pamięci SRAM.

Generatory wewnętrznych sygnałów zegarowych – DCM

Najpoważniejszym kłopotem dla konstruktorów stosujących w swo-ich projektach układy FPGA jest odpowiednie taktowanie wprojekto-wanych w nie obwodów. Budowa FPGA powoduje, że elementy lo-giczne rozmieszczone na powierzch-ni struktury półprzewodnikowej, pomimo taktowania sygnałem zega-rowym pochodzącym z jednego źró-dła, nie są taktowane jednocześnie (rys. 18), bowiem różny jest czas dystrybucji sygnału w zależności od trasy jaką pokonuje (czyli jakiego rodzaju zasoby połączeniowe wy-korzystano do jego transportu), od-ległości pomiędzy źródłem i celem, a także liczby wejść taktowanych jednocześnie w danym segmencie ścieżki połączeniowej.

Aby zminimalizować wpływ nie-doskonałości architektury FPGA na jakość projektów, firma Xilinx wy-posażyła układy Spartan 3 w bloki

DCM (ich liczba zale-ży zasobów logicznych FPGA, jak to przed-stawiono w tab. 3 na str. 94 w EP11/2006). Pozwalają one nie tyl-ko skompensować róż-nice faz (wynikające z opóźnień propagacji) sygnałów zegarowych w (fizycznie) różnych m i e j s c a c h u k ł a d u , można je także wyko-rzystać do syntezowa-nia (w tym podziału częstotliwości sygna-łu zewnętrznego) we-wnętrznych sygnałów zegarowych.

Na rys. 19 poka-zano schemat bloko-

wy DCM (Digital Clock Manager). Składa się on z 4 bloków: synte-zera częstotliwości DFS, pętli DLL, programowanego przesuwnika fazy (Phase Shifter) oraz zespołu logiki Status Logic.

W aplikacjach prostszych oraz w przypadku, gdy nie jest koniecz-ne „żyłowanie” pa-rametrów układów FPGA, korzystanie z D C M n i e j e s t kon ieczne i mo -ż e s i ę w p r o w a -dzić do wykorzy-stania tego bloku jako syntezera lub programowalnego dzielnika częstotli-wości. Na rys. 20 pokazano przykła-dowe konfiguracje DCM, w k tórych wykorzystano re-ferencyjny sygnał zegarowy podawa-ny z zewnątrz na

Rys. 18. Zbocza sygnałów zegarowych występują w różnych miejscach FPGA w różnym czasie, co może spowodować nieprawidłowe działanie układu

Rys. 19. Schemat blokowy DCM stosowanych w ukła-dach Spartan 3

FPGA – co trzeba o nich wiedzieć – tip #8Możliwości konfiguracji DCM są bardzo

duże i ich dokładne opisanie wychodzi poza ramy kursu. Czytelników zainteresowanych

poznaniem szczegółów zachęcamy do zapoznania się z notą katalogową XAPP462 firmy Xilinx, w której DCM opisano bardzo

szczegółowo.

Page 15: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

Elektronika Praktyczna 1/200798

K U R S

Możliwości bloków DCM są duże, co wiąże się z dużą liczbą dostępnych do konfigurowania opcji. Nieco więcej miejsca poświęcimy im w części kursu z przykładami.

Sprzętowe multiplikatory

Standardowym ele-mentem architektury układów Spartan 3 są sprzętowe multiplika-tory, pozwalające mno-żyć 2 liczby 18–bitowe. Mogą one pracować w trybie asynchronicz-nym (kombinacyjnym) lub synchronicznym, w którym wykonywanie obliczeń jest synchroni-zowane sygnałem zega-rowym, a wynik odbie-rany z wyjść 36–bitowe-go rejestru (rys. 23).

Korzystanie z moż-liwości multiplikatorów wygląda podobnie jak w przypadku DCM, to znaczy, że użytkownik ma do dyspozycji ręcz-nie modyfikowalny opis HDL (wykorzystujący konfigurowalny prymi-tyw MULT18X18SIO) lub może jego opis wy-generować za pomocą przyjaznego w obsłudze programu Xlinx CORE Generator (rys. 24), który wchodzi w skład bezpłatnego WebPacka ISE.

Pamięć BlockRAMWszystkie układy z rodziny Spar-

tan 3 wyposażono w wewnętrzną, konfigurowalną pamięć SRAM. Licz-ba niezależnych bloków BlockRAM wiążąca się z nią łączna pojemność pamięci jest zależna od typu układu (patrz tab. 3, str. 94 w EP11/2006). Ponieważ wszystkie przykłady będą

prezentowane na zestawie ZL9PLD (płytka bazowa) + ZL10PLD (dip-PLD z układem SX3S200), do naszej dyspozycji będzie 12 bloków konfi-gurowalnej pamięci o łącznej pojem-ności 216 kb.

Wbudowana w układy Spartan 3 pamięć SRAM jest dwuportowa, dzię-ki czemu użytkownik może wykony-wać niezależnie operacje zapisu i od-

Plan kursu1. Wprowadzenie

• Budowa zestawu uruchomie-niowego

• Programowanie i konfiguracja układu XC3S200

• Tryby konfiguracji układu XC3S200

• Zasilanie układu XC3S200• Linie I/O w układzie XC3S200• JTAG jako uniwersalny

interfejs do programowania i konfigurowania

2. Budowa, cechy funkcjonalne i parametry układów FPGA z rodziny Spartan 3• CLB• IOB• Globalne sygnały zegarowe• DCM• Sprzętowe multiplikatory• Pamięć BlockRAM

3. Projekty przykładowe

Rys. 20. Przykładowe konfiguracje DCM z wykorzy-staniem zewnętrznego sygnału

Rys. 21. Jednym ze sposobów skorzystania z możli-wości DCM jest zastosowanie elementu bibliotecz-nego DCM znajdującego się w kategorii General

Rys. 22. Konfiguracja DCM w edy-torze schematów jest łatwa dzięki specjalnemu oknu edycyjnemu Rys. 23. Możliwe konfiguracje pracy multiplikatorów

FPGA – co trzeba o nich wiedzieć – tip #9Możliwości multiplikatorów wbudowanych w układy Spartan 3 są duże. Czytelników zainteresowanych poznaniem szczegółów

zachęcamy do zapoznania się z notą katalogową XAPP467 firmy Xilinx, w której

opisano je bardzo szczegółowo.

FPGA – co trzeba o nich wiedzieć – tip #10Maksymalna częstotliwość taktowania pamięci

BlockRAM może dochodzić w układach Spartan 3 do 200 MHz.

czytu spod/do różnych adresów, może także transferować dane za pomocą rejestrów składających się na komór-ki pamięci (rys. 25). Pojemność poje-dynczego zespołu BlockRAM wynosi 16384 b (w przypadku wykorzysty-wania bitów parzystości – 18432 b), przy czym użytkownik może dobie-rać szerokość i głębokość pamięci do potrzeb projektu. Możliwe jest tak-że łączenie kilku bloków BlockRAM w zespoły pamięci o większej pojem-ności. Możliwe są więc następujące

Page 16: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

99Elektronika Praktyczna 1/2007

K U R S

konfiguracje pojedynczego bloku Bloc-kRAM: 16 k x 1, 8 k x 2, 4 k x 4, 2 k x 8, 2 k x 9, 1 k x 16, 1 k x 18, 512 x 32, 512 x 36, 256 x 72 (tylko w trybie single–port). Jak można zauważyć, oprócz typowych, „dwójko-

wych” szerokości słowa danych, pamięci ofe-rują także możliwość przechowywania bitów parzystości (po jednym na przechowywany bajt), przy czym jego generację i weryfikację musi zapewnić użyt-kownik.

Bloki pamięci moż-na skonfigurować jako jedno– i dwuportowe, jako FIFO, pamięci CAM (Content–Addres-sable Memory) oraz pa-mięci ROM. W każdym przypadku użytkownik może zdefiniować za-wartość pamięci po włączeniu zasilania, co umożliwia następujący zapis w języku VHDL

(dla kolejnych 16 komórek):INIT_00 => X"11001000110000110000110111101111"

Pamięć, której zawartość nie jest inicjowana przez użytkownika, po włączeniu zasilania zawiera same „0”.

Warto pamiętać, że w ukła-dach Spartan 3 użytkownicy mają do dyspozycji – poza zespołami BlockRAM – także małe zespoły pamięci rozpro-szone w blokach CLB (alter-

natywna funkcja LUT, tzw. Distri-butedRAM, nie-co więcej na ten temat pisaliśmy w EP11/2006), każ-dy o pojemności 16x1 b. Można je lokalnie łączyć w bloki do 64 bi-tów, a takie ze-społy można wy-korzystywać do budowy większych zespołów pamięci RAM/FIFO/DualPor-tRAM.

Korzystanie ze wszystkich rodza-jów pamięci do-stępnych w ukła-dach Spartan 3 jest równie wy-godne jak miało to miejsce w przy-padku DCM lub

sprzętowych multiplikatorów.

PodsumowanieNa tym kończymy – z konieczności

skrótowy – wstęp do „tajemniczego świata” nowoczesnych układów FPGA. Za miesiąc pokażemy pierwszy przy-kład, który – mamy nadzieję – zachę-ci wszystkich onieśmielonych Czytelni-ków do podjęcia samodzielnych prób.Jacek [email protected] Zbysiński, [email protected]

List. 4.DCM_inst : DCMgeneric map (–– Czesc opisu sluzaca do skonfigurowania DCMCLKDV_DIVIDE => 2.0, –– Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5 –– 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0CLKFX_DIVIDE => 1, –– Can be any interger from 1 to 32CLKFX_MULTIPLY => 4, –– Can be any integer from 1 to 32CLKIN_DIVIDE_BY_2 => FALSE, –– TRUE/FALSE to enable CLKIN divide by two featureCLKOUT_PHASE_SHIFT => "NONE", –– Specify phase shift of NONE, FIXED or VARIABLECLK_FEEDBACK => "1X", –– Specify clock feedback of NONE, 1X or 2XDESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", –– _SYNCHRONOUS, SYSTEM_SYNCHRONOUS or–– an integer from 0 to 15DFS_FREQUENCY_MODE => "LOW", –– HIGH or LOW frequency mode for frequency synthesisDLL_FREQUENCY_MODE => "LOW", –– HIGH or LOW frequency mode for DLLDUTY_CYCLE_CORRECTION => TRUE, –– Duty cycle correction, TRUE or FALSEPHASE_SHIFT => 0, –– Amount of fixed phase shift from –255 to 255STARTUP_WAIT => FALSE) –– Delay configuration DONE until DCM LOCK, TRUE/FALSE–– Czesc opisu umozliwiajaca podlaczenie DCM do reszty projektuport map (CLK0 => CLK0, –– 0 degree DCM CLK ouptputCLK180 => CLK180, –– 180 degree DCM CLK outputCLK270 => CLK270, –– 270 degree DCM CLK outputCLK2X => CLK2X, –– 2X DCM CLK outputCLK2X180 => CLK2X180, –– 2X, 180 degree DCM CLK outCLK90 => CLK90, –– 90 degree DCM CLK outputCLKDV => CLKDV, –– Divided DCM CLK out (CLKDV_DIVIDE)CLKFX => CLKFX, –– DCM CLK synthesis out (M/D)CLKFX180 => CLKFX180, –– 180 degree CLK synthesis outLOCKED => LOCKED, –– DCM LOCK status outputPSDONE => PSDONE, –– Dynamic phase adjust done outputSTATUS => STATUS, –– 8–bit DCM status bits outputCLKFB => CLKFB, –– DCM clock feedbackCLKIN => CLKIN, –– Clock input (from IBUFG, BUFG or DCM)PSCLK => PSCLK, –– Dynamic phase adjust clock inputPSEN => PSEN, –– Dynamic phase adjust enable inputPSINCDEC => PSINCDEC, –– Dynamic phase adjust increment/decrementRST => RST –– DCM asynchronous reset input);

Rys. 24. Wygodnym narzędziem, umożliwiającym wygenerowanie opisu HDL multiplikatora odpowia-dającego wymaganiom projektu, jest Xlinx CORE Generator

Rys. 25. Możliwe tryby pracy pamięci imple-mentowanych w BlockRAM

FPGA – co trzeba o nich wiedzieć – tip #11Możliwości konfiguracji pamięci BlockRAM

wbudowanych w układy Spartan 3 są bardzo duże. Czytelników zainteresowanych poznaniem

szczegółów zachęcamy do zapoznania się z notą katalogową XAPP463 firmy Xilinx,

w której opisano je wszystkie bardzo szczegółowo.

FPGA – co trzeba o nich wiedzieć – tip #12Większe zespoły pamięci utworzonych na bazie rozproszonych LUT (w CLB) mają gorsze parametry czasowe niż

pamięci BlockRAM. Należy pamiętać o tym w przypadku, gdy projekt zaimplementowany w FPGA jest taktowany sygnałem zegarowym

o częstotliwości bliskiej maksymalnej, dopuszczalnej dla danego układu.

Page 17: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

103Elektronika Praktyczna 2/2007

K U R S

Układy FPGA w przykładach, część 5Projekty przykładowe

Zaczynamy od projektu z gatunku podstawowych w większości typowych projektów cyfrowych m przedstawimy sposób wykonania debouncera, czyli układu likwidującego drgania styków mikroprzełączników dołączonych do wejść układu FPGA.

Problem likwidacji drań styków doskonale znają konstruktorzy, któ-rzy budowali jakiekolwiek układy reagujące na liczbę naciśnięć przyci-sków dołączonych do wejść mikro-kontrolerów lub dowolnych innych układów cyfrowych. Dobrym testem, dogłębnie pokazującym problem jaki

Okazja dla Czytelników EP zainteresowanych układami FPGAZestaw sprzętowy wykorzystywany w kursie jest do dostępny do 15.03.2007 na zasadach promocyj-nych. Zakup zestawu składającego się z modułów ZL9PLD (uniwersalna płytka bazowa) oraz ZL10PLD

(modułu DIP z układem XC3S200 z rodziny Spartan 3 firmy Xilinx) jest premiowany programatorem ZL4PRG (odpowiednik DLC III), za pomocą którego można programować i konfigurować w systemie

układy CPLD i FPGA firmy Xilinx.

www.sklep.avt.pl • www.sklep.avt.pl • www.sklep.avt.pl • www.sklep.avt.pl • www.sklep.avt.pl

www.sklep.avt.pl • www.sklep.avt.pl • www.sklep.avt.pl • www.sklep.avt.pl • www.sklep.avt.pl

Pierwsze cztery części kursu dały nam elementarne

wiadomości o architekturze układów FPGA z rodziny

Spartan 3, a teraz przechodzimy do przykładowych projektów

przygotowanych w języku VHDL. Pierwszy przykład wydaje się

być banalny, ale bez niego trudno nam będzie zagłębić się

w projekty bardziej efektowne.

mamy do rozwiązania, jest dołącze-nie do wejścia zegarowego kilku-bitowego licznika styków np. ty-powego mikroprzełącznika (rys. 1). Łatwo się można wtedy przekonać, że jedno naciśnięcie przycisku po-woduje zmianę stanu licznika o kil-ka a w skrajnych przypadkach kil-kanaście stanów. Na rys. 2 i rys. 3 pokazano dwa przykładowe przebie-gi napięcia na stykach mikroprze-łącznika włączonego jak pokazano na rys. 1, zdjęte za pomocą oscy-

loskopu cyfrowego. Liczba „prze-skoczonych” przez licznik stanów podczas zdejmowania przedstawio-nych przebiegów była w obydwu przypadkach większa niż wynika to z oscylogramów. Jest to wynik zbyt małej rozdzielczości poziomej oscyloskopu zastosowanego do po-miarów m znaczna część „śmieci” wynikających z drgań styków oscy-loskop po prostu zgubił. Nie zmie-nia to faktu, że przełączniki, także

LicznikkontrolnyCLK

Diody LED+V

Rys. 1. Schemat blokowy układu umożliwiającego wykrycie drgań styków przełączników

Rys. 2. Skutki drgań styków prze-łącznika (jeden z przykładowych wyników rejestracji)

Rys. 3. Skutki drgań styków prze-łącznika (inny przykładowy wynik rejestracji napięcia na stykach przełącznika)

Page 18: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

Elektronika Praktyczna 2/2007104

K U R S

Plan kursu1. Wprowadzenie

• Budowa zestawu uruchomie-niowego

• Programowanie i konfiguracja układu XC3S200

• Tryby konfiguracji układu XC3S200

• Zasilanie układu XC3S200• Linie I/O w układzie XC3S200• JTAG jako uniwersalny

interfejs do programowania i konfigurowania

2. Budowa, cechy funkcjonalne i parametry układów FPGA z rodziny Spartan 3• CLB• IOB• Globalne sygnały zegarowe• DCM• Sprzętowe multiplikatory• Pamięć BlockRAM

3. Projekty przykładowe• Debouncer• Klawiatura matrycowa• Obsługa wyświetlacza multi-

pleksowego LED• Obsługa wyświetlacza LCD• Sterownik LCD 2x16 (pro-

sty)• Sterownik LCD 2x16 (za-

awansowany)• Komunikacja via RS232

i USB• Sterownik VGA• Implementacja mikrokontrole-

ra PicoBlaze

pochodzące od renomowanych pro-ducentów, całkiem nieźle spełniają rolę generatorów impulsów quasim-losowych. Bez dodatkowych zabie-gów nie da się z nich korzystać do realizacji zadań, na wynik których chcielibyśmy mieć wpływ.

Rys. 4. Symbol graficzny debouncera

List. 1. Opis działania debouncera w języku VHDLprocess begin wait until (clock_100hz’event) and (clock_100hz = ‚1’); shift_pb(2 downto 0) <= shift_pb(3 downto 1); shift_pb(3) <= pb; case shift_pb is when „0000” => state <= ‚0’; when „1111” => state <= ‚1’; when others => state <= state; end case; pb_debounced <= state; end process;end;

Wy b r a n y p r z e z nas nie jest z ca-łą pewnością naj-bardziej oszczędny (jeśli chodzi o zaję-te zasoby sprzęto-we FPGA), ale ma wiele praktycznych z a l e t m j e d n ą z nich jest zacho-wanie czasu trwa-nia zwarcia sty-ków przycisku, co nie jest możliwe w wielu prostszych rozwiązaniach.

Przedstawione rozwiązanie jes t

VHDLmową adaptacją propozycji przedstawionej w pierwszym wyda-niu książki „Fundamentals of Digital Logic” autorstwa Stephena Browna i Zvonko Vranesica (Kluwer 1995).

Na rys. 4 pokazano symbol gra-ficzny debouncera, którego sposób

zakres 60…150 Hz zapewnia po-prawną obsługę także bardzo tanich (czyli niskiej jakości) mikroprzełącz-ników.

„Odkłócanie” styków przełączni-ka odbywa się w 4mbitowym reje-strze przesuwającym, który co każ-dy takt zegara clock_100hz wsuwa na bit MSB stan wejścia monito-rującego przełącznik (pb). Zmiana stanu na wyjściu pb_debounced, która oznacza wciśnięcie przycisku (niezależnie od tego, czy stanem „po wciśnięciu” jest logiczne 0 czy też 1), wymaga przesunięcia stanu odpowiadającego „wciśnięciu” przez cały rejestr (4 takty sygnału zegaro-wego), tak samo jak dzieje się po puszczeniu przycisku. Sposób dzia-łania układu powoduje, że odkłóco-ny sygnał wyjściowy jest opóźniony względem wejściowego o czas odpo-wiadający 4 taktom sygnału clock_100hz m rys. 5. W przypadku, gdy czas impulsu wejściowego (ważne: nieważna jest jego polaryzacja!) jest

Kompletny projekt dla WebPacka 8.2i wraz z plikami źródłowymi opublikujemy na

CDmEP3/2007B.

Rys. 5. Przykładowa reakcja wyj-ścia debouncera (przebieg dolny) na wciśnięcie przycisku (przebieg górny) Rys. 6. Nawet kilka krótkich impul-

sów na wejściu debouncera (prze-bieg górny) nie wywołuje zmiany stanu na jego wyjściu (przebieg dolny)

RealizacjaMożliwych sposobów sprzętowej

likwidacji drgań styków jest bardzo wiele, podobnie jak ma to miej-sce w rozwiązaniach programowych.

działania opisano w języku VHDL (list. 1). Wejście clock_100hz służy do podawania sygnału taktującego o częstotliwości ok. 100 Hz. Można ją oczywiście zmienić, dostosowu-jąc „czułość” debouncera do jako-ści współpracujących przełączników. Przeprowadzone próby wykazały, że

Page 19: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

105Elektronika Praktyczna 2/2007

K U R S

krótszy niż 4 takty sygnału wejścio-wego, stan wyjścia pb_debounced nie zmienia się, jak to pokazano na rys. 6 i rys. 7.

ImplementacjaZgodnie z zapowiedziami z po-

przednich części cyklu, rozwiązanie prezentowane w artykule zostało za-implementowane i przetestowane na

zestawie składającym się z płytki bazowej ZL9PLD oraz modułu dip-PLD ZL10PLD z układem XC3S200 z rodziny Spartan 3. Jego zasoby są tak duże, że pewna „rozrzutność” projektu (uzasadniona walorami praktycznymi!) jest praktycznie bez znaczenia.

Żeby zweryfikować faktyczne możliwości prezentowanego roz-wiązania, przygotowano opis zesta-wu testowego, który składa się z (rys. 8):

List. 2. Opis VHDL „łączący” w całość debouncer, 8mbitowy licznik kon-trolny oraz preskaler zapewniający sygnał taktujący dla debounceralibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;

entity debouncer_top is port ( clk : in std_logic;pbi : in std_logic; pbo, clk100hz_o : out std_logic; ledy : inout std_logic_vector(7 downto 0) );end debouncer_top;

architecture behavioral of debouncer_top iscomponent licznik port ( clk: in std_logic; q: inout std_logic_vector(7 downto 0) );end component licznik;

component debouncer port ( clock_100hz, pb: in std_logic; pb_debounced: inout std_logic );end component debouncer;

component preskaler port ( clk : in std_logic; q : inout std_logic_vector (20 downto 0) );end component preskaler;

signal clk_int : std_logic;signal q_presc_int : std_logic_vector(20 downto 0);

begincnt: licznik port map ( clk => clk_int, q => ledy );

kb_d: debouncer port map ( pb => pbi, clock_100hz => q_presc_int(15), mm ok. 120 hz pb_debounced => clk_int);

presc: preskaler port map ( clk => clk, q => q_presc_int);

pbo <= clk_int;clk100hz_o <= clk_int;end behavioral;

Opisy innych rozwiązań debouncerów w układach PLD można znaleźć między innymi:http://microsys6.engr.utk.edu/~hendrich/project/discussion/inputmswitch/inputmswitchmvhdl.htmlhttp://www.ecgf.uakron.edu/grover/web/ecs465/labs/pushButtonCounter.pdfhttp://www.codecomments.com/archive378m2005m3m427505.htmlhttp://www.alsemfr.com

Rys. 7. Debouncer nie reaguje na naciśnięcia przycisku krótsze niż 4 takty sygnału zegarowego

– debouncera,– preskalera, który zapewnia wła-

ściwą częstotliwość taktowania debouncera, która jest uzyski-wana z generatora kwarcowego 3,6864 MHz ulokowanego na płytce ZL10PLD,

– licznika pracującego w trybie NKB, który jest taktowany z wyj-ścia debouncera.

Wszystkie wymienione elementy opisano w języku VHDL i połą-czono w całość w sposób poka-zany na list. 2.

PodsumowaniePrzedstawiony projekt, jakkolwiek

niezbyt skomplikowany i z pew-nością mało efektowny, zapewnia nam komfortową obsługę klawia-tury (w ZL9PLD wykonanej na mi-kroprzełącznikach). Dobra jakość i stabilna praca tej części interfejsu użytkownika pozwoli nam w niedłu-gim czasie zilustrować obsługę jego drugiej części: różnego rodzaju wy-świetlaczy.Jacek [email protected] Zbysiński, [email protected]

CLK CLKPB

PB_DEBOUNCED3,6864 MHz

ok. 100 Hz

+V

Preskaler Debouncer LicznikkontrolnyCLK

Diody LED

Rys. 8. Schemat blokowy testera wersyfikującego poprawność działania debouncera

Page 20: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

Elektronika Praktyczna 3/2007104

K U R S

Układy FPGA w przykładach, Układy FPGA w przykładach, część 6część 6Projekty przykładowe

Sposób obsługi pojedynczych przycisków w układach FPGA pokaza-liśmy miesiąc temu. W przypadku ko-nieczności zastosowania w pro-jektowanym systemie większej liczby przycisków zazwyczaj stosuje się matrycowe łączenie ich styków. Dzięki temu liczba linii I/O konieczna do odczyta-nia ich stanów jest mniejsza niż niezbędna w przypadku dołączania pojedynczych przy-cisków bezpośrednio do linii I/O. W prezentowanym pro-jekcie zastosowano 16–przyci-skową klawiaturę telefoniczną, której schemat połączeń poka-zano na rys. 1. Jak widać, do jej obsługi wystarczy 8 linii.

Przedstawiamy kolejny projekt w języku opisu sprzętu VHDL,

tym razem jest to moduł obsługujący 16–stykową

klawiaturę matrycową o organizacji 4 wiersze x 4

kolumny. Klawiatury tego typu są chętnie stosowane

w systemach cyfrowych, ze względu na możliwość

odczytania stanu 16 przycisków za pomocą 8 linii FPGA:

czterech wejściowych i czterech wyjściowych.

RealizacjaSchemat blokowy proponowane-

go rozwiązania przedstawiono na rys. 2. Jest to rozwiązanie wręcz podręcznikowe, odpowiadające za-równo klasycznym (dyskretnym) rozwiązaniom sprzętowym jak i im-

plementacjom programowym w mi-krokontrolerach.

Układ działa następująco: 4–bito-wy licznik CNT zlicza impulsy ze-garowe podawane na wejście CLK, a jego wyjścia adresują: wyjścia 2–bi-towego (4–wyjściowego) dekodera (na

rys. 2 DEKODER, linie kb_cnt3i kb_cnt2) i 4–wejściowego mul-tipleksera (linie kb_cnt1 i kb_cnt0). Na wyjściach dekodera stanem aktywnym jest „0”, a wejścia multipleksera są pod-ciągnięte do plusa zasilania za pomocą zewnętrznych rezy-storów (wewnętrzne rezystory pull–up w układzie FPGA mają dużą rezystancję co powoduje, że bez zastosowania rezysto-rów zewnętrznych układ jest podatny na zakłócenia. Logicz-ne „0” pojawia się kolejno na kolumnach col0…col3. W przy-

Rys. 1. Schemat elektryczny połączeń klawiatury STD–HT44 (z oferty www.lcel.com.pl) wykorzystanej www.lcel.com.pl) wykorzystanej www.lcel.com.plw projekcie prezentowanym w artykule

Page 21: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

105Elektronika Praktyczna 3/2007

K U R S

Plan kursu1. Wprowadzenie

• Budowa zestawu uruchomie-niowego

• Programowanie i konfiguracja układu XC3S200

• Tryby konfiguracji układu XC3S200

• Zasilanie układu XC3S200• Linie I/O w układzie XC3S200• JTAG jako uniwersalny

interfejs do programowania i konfigurowania

2. Budowa, cechy funkcjonalne i parametry układów FPGA z rodziny Spartan 3• CLB• IOB• Globalne sygnały zegarowe• DCM• Sprzętowe multiplikatory• Pamięć BlockRAM

3. Projekty przykładowe• Debouncer• Klawiatura matrycowa• Obsługa wyświetlacza multi-

pleksowego LED• Obsługa wyświetlacza LCD• Sterownik LCD 2x16 (pro-

sty)• Sterownik LCD 2x16 (za-

awansowany)• Komunikacja via RS232

i USB• Sterownik VGA• Implementacja mikrokontrole-

ra PicoBlaze

padku zwarcia styków któ-regoś przycisku na linii od-powiadającego mu wiersza pojawia się „0” – rys. 3. Podczas analizowania pracy układu trzeba pamiętać, że po wybraniu kolumny ska-nowane są wszystkie wier-sze (do ich adresowania wykorzystano dwa młodsze bity licznika CNT). Wy-krycie wciśnięcia któregoś z klawiszy powoduje za-trzymanie licznika CNT w stanie, w którym wykryro wciśnięcie – czyli na jego wyjściach znajduje się ad-res wciśniętego przycisku. Sygnał zatrzymujący licznik (INT) można wykorzystać do zgłoszenia przerwania informującego o konieczno-ści obłużenia klawiatury przez współpracujący np. mikrokontroler, można go także wykorzystać – jak w prezentowanym przykła-dzie – do wpisania nume-ru wciśniętego klawisza do rejestru latch, na wyjściach którego jest on utrzymywa-ny do kolejnego wciśnięcia.

Jedynym nie zawsze potrzebnym fragmentem projektu jest pamięć ROM (jej opis w VHDL pokazano na list. 1), która spełnia rolę transkodera. Można ją wyko-rzystać do przypisania dowolnych (niekoniecznie 4–bitowych!) kodów poszczególnym przyciskom klawia-tury. Ponieważ w przykładowym projekcie numerom klawiszy przy-pisano kody odpowiadające ich ad-resom, obecność tej pamięci nie jest odczuwalna. Jej opisać można zmodyfikować na pzykład w sposób pokazany na list. 2 co spowoduje, że wciśnięcie przycisku o fizycznym

Rys. 2. Schemat blokowy interfejsu klawiatur matrycowej, który zaimplementowano w ukła-dzie FPGA (elementy znajdujące się w FPGA znajdują się w szarym obrysie)

Rys. 3. Ilustracja działania dekodera klawiatury matrycowej przy założe-niu, że wciśnięty jest przycisk o fi-zycznym adresie „1111” (dwójkowo)

adresie 0 (mapę adresów pokazano na rys. 1) będzie powodowało wy-generowanie kodu 1111b itd. Na list. 1 i list. 2 pogrubioną czcionką zaznaczono miejsca, w których są określane kody przypisywane po-szczególnym przyciskom.

ImplementacjaPrezentowany projekt, podobnie

do wszystkich pozostałych z naszego

List. 1. Zastosowany w projekcie przykładowym opis VHDL pamięci ROMcase kb_cnt is when “0000” => code_kb_int <= “0000”; when “0001” => code_kb_int <= “0001”; when “0010” => code_kb_int <= “0010”; when “0011” => code_kb_int <= “0011”; when “0100” => code_kb_int <= “0100”; when “0101” => code_kb_int <= “0101”; when “0110” => code_kb_int <= “0110”; when “0111” => code_kb_int <= “0111”; when “1000” => code_kb_int <= “1000”; when “1001” => code_kb_int <= “1001”; when “1010” => code_kb_int <= “1010”; when “1011” => code_kb_int <= “1011”; when “1100” => code_kb_int <= “1100”; when “1101” => code_kb_int <= “1101”; when “1110” => code_kb_int <= “1110”; when “1111” => code_kb_int <= “1111”; when others => code_kb_int <= “––––”;

List. 2. Zmodyfikowany opis VHDL pamięci ROM, który można zaimplementować w projekciecase kb_cnt is when “0000” => code_kb_int <= “1111”; when “0001” => code_kb_int <= “1110”; when “0010” => code_kb_int <= “1101”; when “0011” => code_kb_int <= “1100”; when “0100” => code_kb_int <= “1011”; when “0101” => code_kb_int <= “1010”; when “0110” => code_kb_int <= “1001”; when “0111” => code_kb_int <= “1000”; when “1000” => code_kb_int <= “0111”; when “1001” => code_kb_int <= “0110”; when “1010” => code_kb_int <= “0101”; when “1011” => code_kb_int <= “0100”; when “1100” => code_kb_int <= “0011”; when “1101” => code_kb_int <= “0010”; when “1110” => code_kb_int <= “0001”; when “1111” => code_kb_int <= “0000”; when others => code_kb_int <= “––––”;

Page 22: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

Elektronika Praktyczna 3/2007106

K U R S

cyklu, uruchomiono i przetestowa-no na zestawie ZL9PLD i ZL10PLD. Płytka ZL9PLD to uniwersalna baza, natomiast ZL10PLD to moduł DIP z układem XC3S200 z rodziny Spar-tan 3 firmy Xilinx (nieco więcej pi-saliśmy o tych płytkach w pierwszej części cyklu, w EP10/2006).

Sposób podłączenia klawiatu-ry STD–HT44 do płytki bazowej ZL9PLD pokazano na rys. 4. Sy-gnały col(3:0) i row(3:0) można oczywiście dołączyć do dowolnych innych, dostępnych wyprowadzeń

List. 3. Opis dekodera klawiatury matrycowej z pamię-cią ROM pełniącą rolę transkoderalibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity kb_mtx isport ( clk : in std_logic; res : in std_logic; int : inout std_logic; row : in std_logic_vector (3 downto 0); col : out std_logic_vector (3 downto 0); code_kb_ext : out std_logic_vector (3 downto 0) ); end kb_mtx;

architecture keys of kb_mtx is signal kb_cnt : std_logic_vector (3 downto 0); signal code_kb_int : std_logic_vector (3 downto 0); beginprocess (clk, int, res)begin if (res = ‘0’) then kb_cnt <= «0000»; elsif (clk’event and clk = ‘1’) then if (int = ‘1’) then kb_cnt <= kb_cnt + 1; end if; end if;end process;

col(0) <= ‘0’ when kb_cnt(3 downto 2) = «00» else ‘1’;col(1) <= ‘0’ when kb_cnt(3 downto 2) = «01» else ‘1’;col(2) <= ‘0’ when kb_cnt(3 downto 2) = «10» else ‘1’;col(3) <= ‘0’ when kb_cnt(3 downto 2) = «11» else ‘1’;

with kb_cnt(1 downto 0) selectint <= row(3) when «11»,row(2) when «10»,row(1) when «01»,row(0) when others;

process (kb_cnt) begin case kb_cnt is when «0000» => code_kb_int <= «0000»; when «0001» => code_kb_int <= «0001»; when «0010» => code_kb_int <= «0010»; when «0011» => code_kb_int <= «0011»; when «0100» => code_kb_int <= «0100»; when «0101» => code_kb_int <= «0101»; when «0110» => code_kb_int <= «0110»; when «0111» => code_kb_int <= «0111»; when «1000» => code_kb_int <= «1000»; when «1001» => code_kb_int <= «1001»; when «1010» => code_kb_int <= «1010»; when «1011» => code_kb_int <= «1011»; when «1100» => code_kb_int <= «1100»; when «1101» => code_kb_int <= «1101»; when «1110» => code_kb_int <= «1110»; when «1111» => code_kb_int <= «1111»; when others => code_kb_int <= «––––»; end case; end process;

process (clk, int, code_kb_int, res) begin if (res = ‘0’) then code_kb_ext <= «0000»; elsif (clk’event and clk = ‘1’ and int = ‘0’) then code_kb_ext <= code_kb_int; end if;end process;end;

List. 4. Opis w języku VHDL zawierający opis połączeń pomiędzy preskalerem i modułem obsługi klawiatury matrycowejlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;

entity kb_top is port ( clk : in std_logic; res : in std_logic; int : inout std_logic; q_p : out std_logic; row : in std_logic_vector (3 downto 0); col : out std_logic_vector (3 downto 0); code_kb_ext : out std_logic_vector (3 downto 0) );end kb_top;

architecture behavioral of kb_top is

signal q_presc : std_logic_vector (15 downto 0);

component kb_mtx port ( clk : in std_logic; res : in std_logic; int : out std_logic; row : in std_logic_vector (3 downto 0); col : out std_logic_vector (3 downto 0); code_kb_ext : out std_logic_vector (3 downto 0) );end component kb_mtx;

component preskaler port ( clk : in std_logic; q : inout std_logic_vector (15 downto 0) );end component preskaler;

beginpresc: preskaler port map ( clk => clk, q => q_presc);

kb_d: kb_mtx port map ( clk => q_presc(14), res => res, int => int, row => row, col => col, code_kb_ext => code_kb_ext);

q_p <= q_presc(14);end behavioral;

Rys. 4. Sposób dołączenia klawiatu-ry do płytki bazowej ZL9PLD

układu FPGA, ale w projekcie (bę-dzie dostępny na CD–EP4/2007B) zastosowano ta-kie właśnie przy-pisania sygnałów.

Implementacja p r e z e n t o w a n e -go projektu nie nadwyrężyła za-

sobów logicznych układu XC3S200, bowiem wraz z 15–bitowym preska-lerem projekt zajął poniżej 1% do-stępnych w nim zasobów. Opis w ję-zyku VHDL modułu obsługującego klawiaturę w konfiguracji pokazanej na rys. 2 znajduje się na list. 3.

Kompletny projekt, wykorzysta-ny do praktycznego testowania jest nieco bardziej skomplikowany, bo-wiem zawiera preskaler, który dzie-li częstotliwość generatora kwarco-wego 3,6864 MHz (taki jest stan-dardowo instalowany na module

Page 23: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

107Elektronika Praktyczna 3/2007

K U R S

Rys. 5. Funkcje LED na płytce ZL9PLD po zaimple-mentowaniu projektu opisanego w artykule

Rys. 6. Sygnał INT (na dole) po-jawia się z opóźnieniem, zależnym od chwili naciśnięcia przycisku (na górze linia col3)

Rys. 7. Przykładowe zależności czasowe pomiędzy sygnałem INT (na górze) i odpowiedzią na wyjściu rejestru latch

Kompletny projekt dla WebPacka 8.2i wraz z plikami źródłowymi opublikujemy na

CD–EP4/2007B.

ZL10PLD) do wartości ok. 112 Hz (3686400 : 215). Preskaler także opi-sano w VHDL, a obydwa moduły połączono w całość za pomocą opi-su pokazanego na list. 4. W celach diagnostycznych, poza niezbędnymi sygnałami wynikającymi ze schema-tu pokazanego na rys. 1, w projek-cie dodano wejście asynchronicz-nego zerowania res oraz wyjście sygnału zegarowego (wyjście preska-lera), oznaczone jako q_p. Wyjścia rejestru latch, w którym jest zatrza-skiwany numer (z wyjścia pamięci ROM) wciśniętego klawisza, dołą-czono do diod LED (rys. 5). Diody LED monitorują także sygnał taktu-jący moduł obsługi klawiatury oraz sygnał zgłoszenia przerwania INT.INT.INT

Uważni Czytelnicy, zwrócą za-pewne uwagę na niezbyt czytelny – na pierwszy rzut oka – spoóśb taktowania rejestru wyjściowego latch. Ponieważ rejestr jest – co jest najbardziej logiczne – takto-wany sygnałem INT, najprostszym sposobem opisania źródła sygnału taktującego byłoby:….elsif (int’event and int = ‘0’) then….

natomiast na list. 3 widać:

…elsif (clk’event and clk = ‘1’ and int = ‘0’) then…

Zastosowano bowiem synchroni-int = ‘0’) then…

Zastosowano bowiem synchroni-int = ‘0’) then…

zację sygnałem zegarowym clk, któ-ry zapobiega asynchronizacji sygnału INT, wytwarzanego w układzie kom-binacyjnym, co wynika z opisu:with kb_cnt(1 downto 0) selectint <= row(3) when „11”, row(2) when „10”, row(1) when „01”, row(0) when others;

Taki sposób synchronizacji ma szczególny sens w przypadkach, kiedy układ FPGA pracuje na skra-ju swoich możliwości czasowych (czyli z całą pewnością nie w tym projekcie). Ta drobna komplikacja ma na celu pokazanie Czytelnikom poprawnego stylu opisu, przy czym obydwie przedstawione wersje będą działały, przy tak niskiej częstotli-wości taktowania, prawidłowo.

Na rys. 6 i rys. 7 pokazano przykładowe przebiegi na wyjściach układu FPGA po zaimplementowa-niu w nim projektu.

PodsumowaniePrzedstawiony w artykule projekt

– jak większość przygotowanych w językach HDL – jest podatny na różne modyfikacje. Jak wspo-

mniano wcześniej, można zmodyfi-kować zawartość transkodującej pa-mięci ROM, spo-sób adresowania styków klawiatury czy przypisanie sygnałów do wy-prowadzeń układu FPGA, można tak-że dodać sygnali-zację akustyczną wciśnięcia przyci-sku (brzęczyk pie-

zoelektryczny znajduje się na płyt-ce ZL9PLD).

Wszystkich Czytelników, którzy podejmą samodzielne próby mody-fikacji udostępnionego projektu lub przygotują własne – zapraszamy do podzielenia się z nami swoimi opracowaniami.Jacek [email protected] Zbysiński, [email protected]

Serdecznie zapraszamy naszych Czytelnikówdo odwiedzenia naszego stoiska E6

na targach Automaticon 2007 w warszawskimCentrum EXPO XXI znajdującym się przy

ul. Prądzyńskiego 12/ 14 (Wola, wjazd ul. Bemaod ul. Kasprzaka) w dniach 13...16 marcaw godz. 9.00 – 17.00, piatek 9.00 – 15.00.

Wstęp wolny

Page 24: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

97Elektronika Praktyczna 4/2007

K U R S

Układy FPGA w przykładach, część 7Projekty przykładowe

Idea multipleksowego sterowania wyświetlaczy jest stosunkowo stara, bowiem tego typu sposoby sterowania stosowano już w latach ’60 ubiegłego wieku w systemach z wyświetlaczami Nixie. Podstawową zaletą takiego sys-temu sterowania wyświetlaczy jest mi-nimalizacja liczby wyprowadzeń ukła-du sterującego. Przykładowo, w przy-padku pola 4–cyfrowego sterowanego w sposób standardowy, konieczne jest co najmniej 28 linii sterujących (4 cyfry x 7 segmentów). W prezentowa-nym przykładzie sterownika multiplek-sowego wystarczy 11 linii sterujących (7 do sterowania segmentami + 4 do sterowania elektrodami wspólnymi), a jeszcze lepsze są osiągane przy ze-społach wyświetlaczy o większej licz-bie cyfr.

Ideę wyświetlania multipleksowego zilustrowano na rys. 1 (pokazany spo-sób sterowania jest charakterystyczny dla wyświetlaczy ze wspólną anodą). Jak widać, konieczne jest zsynchro-nizowanie „włączania” anod z poda-niem odpowiedniej dla wyświetlanego znaku kombinacji stanów na kato-dy diod podświetlających segmenty. Sekwencyjne zapalanie każdej cyfry z odpowiednio dużą częstotliwością (w przykładzie ok. 100 Hz) wywołuje wrażenie ciągłego świecenia wszyst-kich znaków.

W tym odcinku kursu pokażemy przykładowy projekt sterownika

4–cyfrowego, 7–segmentowego wyświetlacza LED. Jest to

kolejny typowy element systemu cyfrowego, często wykorzystywany

w praktycznych aplikacjach, w których często stanowi istotny element interfejsu użytkownika.

Rys. 1. Schemat ilustrujący zasadę działania sterownika multipleksowego

Rys. 2. Schemat blokowy projektu zaimplementowanego w FPGA

Zapraszamy do współpracy!Wszystkich Czytelników interesujących się

układami FPGA zachęcamy do prezentacji na łamach EP własnych rozwiązań. Odpowiemy

także na wszelkie pytania związane z kursem, językiem VHDL i układami FPGA.

Page 25: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

Elektronika Praktyczna 4/200798

K U R S

Przygotowywanie plików do konfiguracji układu FPGA i programowania konfiguratora Flash

Z listów otrzymanych od Czytelników wyni-ka, że wielu z nich ma spore problemy z pra-widłowym skonfigurowaniem układu FPGA i za-programowaniem pamięci Flash spełniającej w zestawie ZL10PLD rolę konfiguratora.

Pokażemy zatem krok po kroku jak sobie poradzić z podstawowymi problemami występu-jącymi na tym etapie implementacji projektów, które w większości przypadków wynikają ze stosunkowo mało zrozumiałego (przynajmniej na początku pracy z FPGA) rozdzielenia programo-wania (konfiguratora Flash) od konfigurowania (układu FPGA).

Krótko od podstawJak wspomnieliśmy w pierwszym odcin-

ku kursu (EP10/2006), układy FPGA z rodziny Spartan 3 mają wewnętrzną pamięć konfiguracji typu SRAM, co wymaga każdorazowo po włą-czeniu zasilania układu odtworzenia jej zawarto-ści z zewnętrznej pamięci nieulotnej (zazwyczaj, także w przypadku kursowego zestawu ZL10PLD – jest to pamięć Flash).

Konieczne jest więc zapewnienie możliwości:– bezpośredniego modyfikowania zawar tości

pamięci konfiguracji FPGA (SRAM),– programowania pamięci Flash po zainstalo-

waniu jej w systemie,– skopiowania zawar tości pamięci

Flash do SRAM (pamięci konfigura-cji FPGA).Firma Xilinx w układach Spar tan 3

problem rozwiązała w sposób pokazany

na poniższym rysunku:Konfigurator XCF01S jest wyposa-

żony w dwa inter fejsy umożliwiające wymianę danych z otoczeniem:

– 5–liniowy, służący do przesyłania przechowywanych do FPGA po włączeniu zasilania,

– JTAG, który służy do programowania pa-mięci Flash za pomocą zewnętrznego pro-gramatora.Także w układzie XC3S200 (FPGA z rodziny

Spar tan 3, zastosowany w module ZL10PLD) występuje inter fejs umożliwiający współpracę z konfiguratorem oraz interfejs JTAG, za pomo-cą którego jest konfigurowana pamięć SRAM w FPGA.

Inter fejsy JTAG obydwu układów są po-łączone w szereg, tworząc tzw. łańcuch JTAG. Dzięki temu dostęp do tych układów jest moż-liwy za pomocą jednego programatora, do-łączonego do pojedynczego złącza JTAG. Na

poniższym rysunku pokazano sposób połączenia układu XC3S200 z pamięcią XCF01S, który au-tomatycznie ustalił program iMPACT obsługujący

programator.Pozostaje do omówienia ostatni problem:

skąd FPGA ma wiedzieć, z jakiego źródła zosta-ną przesłane dane konfiguracyjne? Otóż do tego celu służą w układzie FPGA specjalne wejścia M2…M0, które na płytce ZL10PLD połączono w taki sposób, że za pomocą jednego jumpera JP4 (rysunek poniżej) można wybrać jeden z dwóch trybów pracy:

– automatycznego (po włączeniu zasilania) kopiowania zawartości Flash do FPGA,

– oczekiwania na dane konfigurujące z JTAG–a.

Na zdjęciu poniżej pokazano lokalizację jumpera JP4 na płytce zestawu ZL10PLD wraz z opisami pozycji, w których konfiguracja FPGA odbywa się poprzez interfejs JTAG (JTAG) i au-tomatycznie po włączeniu zasilania z konfigura-tora (Flash).

Konfigurowanie układu FPGAKonfigurowanie układu FPGA za pomocą

interfejsu JTAG jest zalecane przede wszystkim podczas prac projektowych, bowiem liczba konfiguracji (czyli wpisów do pamięci konfigu-racji typu SRAM) nie jest niczym ograniczona (w przeciwieństwie do pamięci Flash, którą można kasować i programować skończoną, choć niemałą, liczbę razy).

Do skonfigurowania układu FPGA jest ko-nieczny plik o rozszerzeniu *.isc, który jest ge-nerowany przez proces Generate Programming File pakietu WebPack ISE. Ponieważ ustawie-nia domyślne nie powodują utworzenia takie-go pliku, trzeba we właściwościach (Process Properties>General Options) procesu Generate Programming File uaktywnić opcję Create IEEE1532 Configuration File (jak na rysunku poniżej).

Żeby konfigurowany za pomocą inter fejsu JTAG układ FPGA poprawnie rozpoczął swoją pracę (po zakończeniu konfigurowania), trzeba zmienić domyślne ustawienie w oknie Process Proper ties>Star tup Options w polu FPGA Start–up Clock (jak na rysunku po-niżej) z CCLK na JTAG Clock. Zaniechanie tej czynności przed skompilowaniem projektu spo-woduje występujące losowo „zawieszanie” się FPGA.

Konfigurowanie FPGA i programowanie konfiguratora Flash

Sposób połączenia układu FPGA i konfiguratora Flash w zestawie

ZL10PLD

Automatycznie wykryta przez program iMPACT konfiguracja

łańcucha JTAG w zestawie ZL10PLD

Na fragmencie schematu płytki ZL10PLD zaznaczono na szaro dołączenie zworki JP4, która umożliwia wybranie sposobu konfiguracji FPGA. Pokazano także sposób dołączenia konfiguratora U2 do układu FPGA, przycisku S1 służącego do ręcznego wymuszania rekonfiguracji

oraz diody świecącej D1, która służy do sygnalizacji poprawnego zakończenia konfiguracji FPGA

Zworka JP4 umożliwia wybór trybu konfiguracji FPGA (poprzez JTAG lub automatyczne

odtworzenie konfiguracji z pamięci Flash)

W zakładce General Options okna Process Properties (dla procesu Generate

Programming File) trzeba uaktywnić generację pliku

*.isc, który posłuży nam do konfigurowania FPGA

W przypadku konfigurowania FPGA za pomocą interfejsu JTAG trzeba zmienić ustawienie

FPGA Start–up Lock na JTAG Clock, w przeciwnym przypadku układ może nie

rozpocząć pracy po zakończeniu konfiguracji

>>

Page 26: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

99Elektronika Praktyczna 4/2007

K U R S

Plan kursu1. Wprowadzenie

• Budowa zestawu uruchomie-niowego

• Programowanie i konfiguracja układu XC3S200

• Tryby konfiguracji układu XC3S200

• Zasilanie układu XC3S200• Linie I/O w układzie XC3S200• JTAG jako uniwersalny

interfejs do programowania i konfigurowania

2. Budowa, cechy funkcjonalne i parametry układów FPGA z rodziny Spartan 3• CLB• IOB• Globalne sygnały zegarowe• DCM• Sprzętowe multiplikatory• Pamięć BlockRAM

3. Projekty przykładowe• Debouncer• Klawiatura matrycowa• Obsługa wyświetlacza multi-

pleksowego LED• Obsługa wyświetlacza LCD• Sterownik LCD 2x16 (pro-

sty)• Sterownik LCD 2x16 (za-

awansowany)• Komunikacja via RS232

i USB• Sterownik VGA• Implementacja mikrokontrole-

ra PicoBlaze

Programowanie konfiguratora (Flash)Jak już wielokrotnie wspominaliśmy, kon-

figurator (czyli pamięć Flash z interfejsem sze-regowym i – w przypadku układu XCF01S – także JTAG) służy do przechowywania da-nych opisujących konfigurację FPGA. Do jego zaprogramowania niezbędny jest plik *.mcs, który trzeba „ręcznie” utworzyć za pomocą programu iMPACT, wchodzącego w skład stan-dardowej instalacji pakietu WebPack ISE. iM-PACT musi być uruchomiony w trybie Prepare a PROM File (rysunek poniżej), kolejne kroki narzuca użytkownikowi kreator.

Żeby zapewnić poprawny restar t układu FPGA po jego skonfigurowaniu z pamięci Flash, ustawienie FPGA Star t–up Lock musi być CCLK. Jeżeli ostatnia kompilacja została prze-prowadzona z innym ustawieniem, program iM-PACT „zauważy” błąd użytkownika, ostrzeże go (rysunek poniżej) i samoczynnie zmieni frag-ment pliku *.mcs w taki sposób, żeby układ FPGA po skonfigurowaniu działał poprawnie.

Utworzenie pliku *.mcs umożliwia program iMPACT, który należy uruchomić w trybie

Prepare a PROM File

Ostrzeżenie o nieprawidłowo wybranym źródle sygnału zegarowego inicjującego start FPGA

po konfiguracji

Okno programu iMPACT po wygenerowaniu pliku *.mcs służącego do programowania

pamięci Flash konfiguratora

RealizacjaSchemat blokowy proponowane-

go rozwiązania pokazano na rys. 2. Jest to typowe rozwiązanie sterow-nika multipleksowego, w którym rozdzielono (opisano w osobnych plikach *.vhd) dekodery wyjściowe (cyfr i segmentów) od sterownika, w którym zintegrowano (rys. 3):

– 16–bitowy rejestr latch, który służy do przechowywania ko-dów 4 liczb BCD wyświetla-nych na wyświetlaczu,

– 2–bitowy licznik numeru wy-świetlanej cyfry,

– multiplekser 16–>4, który poda-je na zewnętrzny dekoder (ste-rujący segmentami wyświetla-czy) 4–bitowe słowo odpowia-dające wyświetlanej pozycji.Tak więc, budowa prezentowa-

nego sterownika jest bardzo po-dobna do klasycznych realizacji, wykonywanych na układach TTL/CMOS. Wykorzystanie opisu HDL zwiększa elastyczność projektu, bo-wiem jakiekolwiek jego modyfikacje (zmiana polaryzacji wyświetlaczy z WA na WK, zmiana liczby ob-sługiwanych wyświetlaczy, zmiana kształtów wyświetlanych znaków

Rys. 3. Funkcje spełniane przez fragmenty opisu w pliku sterownik.vhd

Page 27: Układy FPGA w przykładach, część 1perek.pop.e-wro.pl/FPGA/Uk%B3ady%20fpga%20w%20... · 2010. 10. 22. · układy CPLD, teraz sytuacja (przede wszystkim rynkowa) mocno już doj-rzała

Elektronika Praktyczna 4/2007100

K U R S

3…3,2 V, co przy zasilaniu segmentów napięciem ok. 3,3 V zapewnia przepływ prądu o natężeniu nie przekraczającym (w egzemplarzu mo-delowym) 3,5 mA. Elektrody wyświe-tlaczy (anody i ka-tody) są sterowane bezpośrednio z wyjść FPGA (bez jakich-ko l w i e k b u f o r ó w, rys. 4), co upraszcza budowę urządzenia i minimalizuje liczbę niezbędnych elemen-tów.

ImplementacjaProjekt zaimple-

mentowany w testo-wym zestawie, poza s terownikiem wy-świetlaczy, zawiera także 4–dekadowy licznik BCD (zlicza-jący impulsy z wyjścia preskalera, jego stany wyjściowe podglądamy na wyświetlaczach) oraz 20–bitowy preskaler (w projekcie wykorzystano 18 bitów), który służy do wytwo-rzenia sygnałów zegarowych dla zespołu liczników i sterownika wy-świetlacza.

Strukturę projektu (w plikach) pokazano na rys. 5. Widoczny na tym rysunku plik projekt7.ucf zawie-ra przypisania sygnałów do fizycz-nych wyprowadzeń układu FPGA.

PodsumowanieWielokrotnie podkreślana duża

elastyczność opisów HDL doty-czy także tego projektu. Na list. 1 pokazano modyfikację dekodera 7–segmentowego, który w wersji pokazanej po lewej stronie wy-świetla znaki wyłącznie z zakresu 0…9 (dla wartości 10…15 wyświe-tlacz jest wygaszony), po prawej stronie pokazano zmodyfikowana wersję wyświetlającą także znaki A...F (w formie możliwej na wy-świetlaczu 7–segmentowym). Inną możliwą modyfikacją jest dostoso-wanie sterownika do współpracy z wyświetlaczami ze wspólną kato-dą, co wymaga zanegowania wyjść dekodera znaków i segmentów, np. (odnosi się do pliku dek_znaku.vhd) opis:

Rys. 4. Sposób dołączenia wyświe-tlacza do układu FPGA

Zastosowany w projekcie wyświetlacz LED (TOF–5462DB–B) jest przystosowany do pracy w systemach ze sterowaniem multipleksowym, niezbędne połączenia segmentów są wykonane w jego wnętrzu. Na rysunku poniżej pokazano

schemat połączeń wewnętrznych.

Dodatkowe informacje: http://www.artronic.com.pl/o_produkcie.php?id=656?, dystrybutor

oferuje wersje świecące na różne kolory.

with nr_znaku select dig <= „0001” when „00”, –– cyfra 0 (jedn.)………………

można zastąpić opisem:with nr_znaku select dig <= „1110” when „00”, –– cyfra 0 (jedn.)………………

można także zanegować stany wyjściowe za pomocą operacji not.

Podobnych modyfikacji można wykonać wiele: jeżeli któryś z Czy-telników chciałby pochwalić się własnymi rozwiązaniami – zapra-szamy!Jacek [email protected] Zbysiński, [email protected]

Rys. 5. Budowa prezentowanego projektu z podziałem na pliki z opi-sami VHDL

List. 1. Modyfikacja dekodera sterującego wyświe-tlacz LED (ze wspólną anodą): po lewej stronie pokazano opis dekodera znaków 0…9, po prawej 0…FLEWA STRONAwith bcd select–– g f e d c b a segm <= „1000000” when „0000”, –– 0 „1111001” when „0001”, –– 1 „0100100” when „0010”, –– 2 „0110000” when „0011”, –– 3 „0011001” when „0100”, –– 4 „0010010” when „0101”, –– 5 „0000010” when „0110”, –– 6 „1111000” when „0111”, –– 7 „0000000” when „1000”, –– 8 „0010000” when „1001”, –– 9 „1111111” when others; –– wygaszenie

PRAWA STRONAwith bcd select–– g f e d c b a segm <= „1000000” when „0000”, –– 0 „1111001” when „0001”, –– 1 „0100100” when „0010”, –– 2 „0110000” when „0011”, –– 3 „0011001” when „0100”, –– 4 „0010010” when „0101”, –– 5 „0000010” when „0110”, –– 6 „1111000” when „0111”, –– 7 „0000000” when „1000”, –– 8 „0010000” when „1001”, –– 9 „0001000” when „1001”, –– 10 “A” „0000011” when „1001”, –– 11 “B” „0000110” when „1001”, –– 12 “C” „0100001” when „1001”, –– 13 “D” „0000110” when „1001”, –– 14 “E” „0001110” when „1001”, –– 15 “F” „1111111” when others; –– wygaszenie

itp.) wiąże się z wprowadzeniem niewielkich modyfikacji w opisie (przykład pokażemy w dalszej czę-ści artykułu). Możliwe jest także przygotowanie uniwersalnego opisu z parametryzacją, co – jeśli Czytel-nicy wykażą zainteresowanie tema-tem – pokażemy w jednym z kolej-nych odcinków kursu.

W przykładowym projekcie wy-korzystano bardzo wygodny w prak-tyce wyświetlacz TOF–5462DB–B, który jest przystosowany do ste-rowania multipleksowego, bowiem segmenty poszczególnych znaków są ze sobą wewnętrznie połączone. Zastosowano wyświetlacz świecący na kolor niebieski, bowiem pozwo-liło to uniknąć konieczności stoso-wania rezystorów ograniczających prąd segmentów. Wynika to z faktu, że napięcie progowe struktur świe-cących na niebiesko wynosi ok.