Vývojová deska s obvodem FPGA XILINX Spartan 3AN
Milan Horkel
Před časem mne kluci na kroužku ukecali, abych udělal jednoduchou vývojovou desku s nějakým programovatelným obvodem. Nakonec jsem zvolil obvod FPGA od firmy XILINX z řady Spartan3AN, protože poskytuje rozumné možnosti za rozumnou cenu. Deska je osazena obvodem XC3S50AN v pouzdru TQFP 144.
Tento dokument popisuje hardware desky, její testování a použití naleznete v dalších dokumentech.
Parametr | Hodnota | Poznámka |
---|---|---|
Použitý obvod | XC3S50AN, TQFP144 | XILINX FPGA Spartan 3AN |
Napájení desky | +5V | Cca. 250mA (závisí na funkci) |
Vnitřní napájení | +3.3V (napájení logiky) | Vlastní stabilizátor |
+1.2V (napájení jádra FPGA) | Vlastní stabilizátor | |
Periferie na desce | LED displej 8 míst | Zapojený multiplexně |
LED indikátory 8 bitů | Zapojené na samostatné výstupy | |
DIP spínače 8 bitů | Zapojené na samostatné vstupy | |
Tlačítka 4 bity | Zapojené na samostatné vstupy | |
VGA výstup | 2 bity na barvu | |
PS/2 rozhraní 2 kusy | 5V tolerantní | |
I2C rozhraní | 5V tolerantní | |
Obvod 5V tolerantních vstupů | Celkem 32 vstupů | |
Jednoduchý A/D a D/A | Pomocí PWM | |
Konfigurace | Interní paměť obvodu FPGA | Platí pro obvody řady AN |
Volitelně paměť SPI FLASH | Pro obvody řady A i AN | |
Rozměry | Cca 112x122x20mm | Výška nad základnou |
Důrazně připomínám hned na začátku, že obvod FPGA není 5V tolerantní! Znamená to, že se na jeho vstupy smí připojit pouze signály do velikosti +3.3V (absolutní maximum je +4.6V).
Stejně důrazně musím upozornit na to, že na vstupech obvodu nejsou ochranné diody mezi vstupem a kladným napájecím napětím! To je zásadní rozdíl od většiny jednočipových mikroprocesorů. Nelze se tedy spoléhat na to, že když budeme vstupy budit přes velký sériový odpor, že se nic nestane. Stane! Při zvýšeném napětí na vstupech může být životnost vstupních tranzistorů v řádu minut nebo hodin.
Školní deska pro práci s obvody FPGA XILINX řady Spartan 3AN vznikla na popud kluků v kroužku radiotechniky. Protože s obvody FPGA firmy XILINX pracuji, ujal jsem se tohoto úkolu. Nejdřív jsem uvažoval, že bychom začali s deskou s některým obvodem CPLD, ale po prozkoumání ceníku, jsem se přiklonil k obvodu FPGA řady Spartan3AN.
Obvody FPGA mají mnohem propracovanější vnitřní architekturu a obsahují mnohem víc logiky než obvody CPLD. Obvod samotný stojí pouhých 210Kč včetně DPH (podzim 2010).
Je to vlastně nejpokročilejší obvod FPGA v pouzdru TQFP, tedy v pouzdru, které si dokážeme sami připájet a v nouzi si dokonce dokážeme sami vyrobit i plošný spoj. Viz dokumentace od první verze této desky na adrese http://www.mlab.cz/PermaLink/S3AN01A
Snad by měl existovat i obvod z řady Spartan6 v pouzdru TQFP, ale nikde jsem ho neviděl na skladě. Až ho uvidím, tak z něj možná taky něco udělám, pokud čas dovolí.
Zapojení desky odpovídá účelu desky. Jako vývojová a školní deska je vybavena obvody pro snadnou práci s obvodem FPGA. Na desce nalezneme LED displej, skupinu LED diod, několik tlačítek a DIP přepínačů. Vstupy a výstupy jsou vyvedeny na propojovací hřebínky.
Celá deska se napájí napětím +5V přivedeným na konektor J1. Opět důrazně připomínám, že použitý obvod FPGA vydrží na vývodech napětí 3.3V, ale ne 5V!
Z napětí +5V se lineárním stabilizátorem U2 vytváří napětí +3.3V pro napájení vstupů a výstupů obvodu FPGA. Přítomnost napětí +3.3V indikuje dioda D10 umístěná v rohu desky. Napětí +3.3V je vyvedeno na konektor J2 k dalšímu použití. Pozor, nezapojit sem napájení +5V, došlo by ke zničení obvodu FPGA! Abych na tento konektor omylem nepřipojil +5V, dávám si ta prostřední vývody zkratovací propojku. Dioda D9 slouží jako ochrana před přepólováním napájení.
Z napětí +3.3V se lineárním stabilizátorem vytváří napětí +1.2V pro napájení jádra obvodu FPGA.
Po zapnutí napájení je obvod FPGA potřeba naplnit obsahem, tedy definovat, jak bude uvnitř zapojen. Toto vnitřní zapojení se nahrává do vnitřní konfigurační paměti RAM a lze to udělat několika způsoby:
Při úspěšném nahrání konfigurace obvodu FPGA se rozsvítí LED D8 s nápisem DONE. Při vypnutí napájení se samozřejmě obsah vnitřní konfigurační paměti RAM ztratí.
Pro JTAG programování slouží konektor J3, který je zapojen obvyklým způsobem (jako například na programátoru XILINX Parallel Cable III). Jeho prostřednictví lze nahrát obsah do konfigurační paměti RAM obvodu FPGA, naprogramovat vnitřní paměť FLASH obvodu FPGA (jen obvod AN), nebo provádět další činnosti, které tento port umožňuje (pokud k tomu máte příslušné nástroje). JTAG rozhraní lze použít vždy.
Další způsoby načítání konfigurace se volí prostřednictvím signálů M0 M1 a M2 dle tabulky na schématu. Pro defaultní způsob konfigurace z interní FLASH paměti FPGA musí být zkratován signál M0 na zem prostřednictvím propojky mezi vývody J4.1 a J4.2. V takovém případě, pokud je nahraný platný obsah interní FLASH paměti obvodu FPGA dojde k automatické konfiguraci součástky při každém zapnutí napájení (konfigurace trvá řádově milisekundy).
Při načítání konfigurace z vnější SPI paměti FLASH je třeba podle použitého typu paměti nastavit propojky na konektoru J5 aby se použil správný příkaz pro čtení dat. Externí paměť SPI osazujeme samozřejmě jen jednu podle zapojení osazované paměti a velikosti jejího pouzdra. Tuto možnost využijeme zejména pokud osadíme obvod Spartan3A (nemá interní FLASH paměť) místo obvodu Spartan3AN (má interní FLASH paměť).
V případě potřeby lze konfigurovat obvod FPGA i z nadřazeného systému, ale jen v režimu sériového přenosu (režim slave serial). K tomu slouží konektory J33 až J38.
Jako zdroj hodinového signálu je na desce osazen obvod U4, oscilátor s kmitočtem 100MHz. Pokud potřebuje aplikace jiný kmitočet, lze osadit oscilátor s odlišným kmitočtem, nebo využít vnitřních programovatelných obvodů (blok DCM) pro generování potřebného kmitočtu. Vnitřními obvody lze generovat kmitočty odvozené od externích hodin v dosti širokém rozmezí.
Asi první školní aplikací je blikání LED indikátory. Proto tu je osazeno 8 LED diod s příslušnými rezistory. Výstupy jsou dále vyvedeny na konektor J26.
Pro sofistikovanější výpisy je zde umístěn osmimístný LED displej, který je zapojený v multiplexním režimu, abychom nespotřebovali zbytečně mnoho vývodů.
Pro jednoduché vstupy jsou na desce umístěna 4 tlačítka a jeden osminásobný DIP přepínač. Vstupy jsou dále opatřeny hřebínky pro další využití vývodů. Protože se jedná o školní desku, jsou zde osazeny ochranné sériové rezistory. Použití tlačítek a přepínačů předpokládá, že jsou vstupy nakonfigurovány s pull-down odpory.
Deska je osazena dvěma porty PS/2 a jedním portem I²C.
Rozhraní PS/2 se používá pro připojení klávesnice a/nebo myši. Obě tyto periferie se liší pouze protokolem. Rozhraní I²C je určeno pro připojení periferií pro toto rozhraní.
Obě rozhraní jsou po hardwarové stránce triviální, neboť se jedná vždy o dva vodiče (hodiny a data) buzené výstupy s otevřeným kolektorem. Komunikace je obousměrná. Protože signalizační napětí těchto rozhraní může být větší, než je +3.3V, je zde osazen omezovací obvod s tranzistorem FET, který zajistí, že napětí na vstupu FPGA nikdy nepřekročí napájecí napětí.
Pro připojení VGA monitoru k desce je zde realizováno triviální VGA rozhraní. Využívá se jen 4 úrovní (2 bity) pro každou základní barvu (tedy celkem 64 barev). Převod na analogové úrovně je realizován pomocí rezistorové sítě. Deska je osazena standardním VGA konektorem DB15.
Protože obvod FPGA řady Spartan3A/3AN podporuje diferenciální signály, je několik těchto signálů vyvedeno na konektor. Hledal jsem vhodný konektor a na konec jsem použil konektor SATA, protože jej lze snadno získat ze šrotu. Standardně se tyto konektory neosazují. Signály z těchto konektorů jsou připojeny na vývody obvodu FPGA, které mohou sloužit i jako hodinové vstupy.
Další diferenciální signály jsou vyvedeny na hřebínek J7 k volnému použití.
Protože jsou pro diferenciální signály využity banky 0 a 2, mohou být použity jako vstupní i výstupní. Banky 1 a 3 mají naproti tomu silnější výstupní budiče ale nepodporují diferenciální výstupy. Něco za něco.
Protože obvod FPGA samotný (stejně jako všechny novější a rychlejší obvody) nesnese na svých vstupech 5V signály, použili jsme na desce vstupní budiče SN74LVC16244, které poskytují 2x16 vstupů. Jsou to obvody U11 a U12 a prvních 22 signálů je připojeno rovnou na vstupy FPGA (zbývajících 10 signálů je vyvedeno na hřebínky). Kdo nepotřebuje 5V tolerantní vstupy, nemusí tyto obvody vůbec osazovat.
Vstupní budiče je možné po čtveřicích (nibble) aktivovat propojkami J13 až J20. Zkratovací propojka povoluje příslušnou čtveřici budičů (otevírá třístavový výstup obvodu SN74LVC16244).
Použité budiče nemají na vstupu ochranné diody do plusu! Nesmějí se tedy budit signály většími než 5V a to ani přes velký sériová rezistor.
Aby byla definována logická úroveň na vstupu budičů, jsou na všech vstupech rezistory 100KΩ do země.
Pro pokusy s analogovými obvody je na desce osazen zesilovač s dolní propustí a komparátor. Lze tak realizovat jednoduchý D/A i A/D převodník. Viz aplikační poznámky XILINX XAPP154 a XAPP155. Nicméně neočekávejte zázraky, poctivý převodník tím nenhradíte.
Vývojová deska má standardní rozměry a upevňovací šrouby v rozích jako ostatní desky stavebnice MLAB.
Pro osazování je vhodné použít mikropáječku a postupovat obezřetně z hlediska elektrostatického náboje. Dále je potřeba jemná pinzeta a další obvyklé nářadí.
Při osazování je vhodné nejprve osadit obvody napájecích zdrojů U2 a U3 a SMD součástky okolo nich. Poté je vhodné připojit +5V na vstup a zkontrolovat výstupní napětí +3.3V a +1.2V dokud nemáme osazeny další obvody.
Poté osadíme obvod FPGA U1 a obvody budičů U11 a U12. Tyto obvody osazujeme s velkou pečlivostí, protože mají hodně vývodů s malou roztečí. Používáme minimální množství pájky a vhodné pastovité tavidlo. Obvod vždy nejprve připájíme za 2 protilehlé nožičky a teprve poté, co se ujistíme, že jsou obvody umístěny na všech stranách správně postupně zapájíme všechny vývody. Po osazení zkontrolujeme pod lupou kvalitu pájení a zda nejsou zkraty mezi vývody.
Pak osadíme zbývající SMD součástky podle schématu a osazovacího plánu. Pak následují klasické součástky. Začínáme LED displejem, všemi hřebínky a nakonec konektory pro PS/2 a VGA port.
Na závěr desku opticky zkontrolujeme (orientace součástek, zkraty, zapomenuté spoje a podobně) a přišroubujeme rohové šrouby se sloupky. Poslední operací je umytí zbytků tavidla, vysušení a finální optická kontrola.
Počet | Reference | Hodnota | Pouzdro | Poznámka |
---|---|---|---|---|
Rezistory | ||||
1 | R28 | 0R | ||
20 | R1-R10, R66, R67, R81-R88 | 100 | R0805 | |
3 | R59, R62, R65 | 120 | R0805 | |
3 | R58, R61, R64 | 270 | R0805 | |
22 | R12, R14, R29, R30-R40, R49-R56 | 390 | R0805 | |
3 | R57, R60, R63 | 510 | R0805 | |
9 | R11, R41-R48 | 820 | R0805 | |
1 | R80 | 1k2 | R0805 | |
4 | R16, R17, R18, R19 | 3k3 | R0805 | |
21 | R13, R15, R20-R27, R68, R70, R72-R79, R89 | 4k7 | R0805 | |
2 | R69, R71 | #4k7 | R0805 | Neosazuje se |
32 | R100-R131 | 100k | R0603 | |
Kondenzátory keramické | ||||
3 | C20-C22 | 4n7 | C0805 | |
1 | C34 | 10nF | C0805 | |
27 | C4-C19, C23-C33 | 100nF | C0805 | |
Kondenzátory tantalové | ||||
3 | C1, C2, C3 | 22uF/6.3V | ELYTB | |
Diody | ||||
1 | D9 | 1N5820 | DO201 | |
Diody LED a displeje LED | ||||
10 | D0-D8, D10 | LED3mm_RED | LED3 | |
2 | LD0, LD1 | FT-M514RD | 4LED7_12PIN_14_2 | |
Tranzistory | ||||
8 | Q0-Q7 | BC856 | SOT23 | |
6 | Q8-Q13 | BS170SMD | SOT23 | |
Integrované obvody | ||||
1 | U1 | XC3S50AN-4TQG144C | TQFP144 | |
1 | U2 | AP1086K33G-13 | TO263 | |
1 | U3 | TS1117BCP12R0 | TO252 | |
1 | U4 | CFPS-73-100M | SG8002 | |
1 | U5 | AT45DB011D-SSH-B | SO8_150 | Volitelné |
1 | U6 | AT45DB011D-SH-B | SO8_210 | Volitelné |
1 | U7 | AT25DF0xxA-SSH | SO8_150 | Volitelné |
1 | U8 | SST24LF040A-33-4C-S2AE | SO8_210 | Volitelné |
1 | U9 | MCP6001T-I/OT | SOT23-5 | |
1 | U10 | MCP6546T-E/OT | SOT23-5 | |
2 | U11, U12 | SN74LVC16244ADL | SSOIII_48_300 | |
Mechanické součástky | ||||
4 | SW0-SW3 | PUSH050x050 | PUSH050x050 | |
1 | SW4 | DIPSW8 | DIPSW8 | |
12 | Propojka | |||
Konektory | ||||
1 | J27 | DB15F_3L_90 | DB15F_3L_90 | |
2 | J31, J32 | MINIDIN6_PS2 | MINIDIN6 | |
2 | J28, J29 | #SATA_DATA | SATA_DATA | Neosazuje se |
Jednořadé hřebínky | ||||
1 | J33+J34+J35+J36+J37+J38 | JUMP9 | JUMP9 | Nalámat |
1 | J22 | #JUMP1 | JUMP1 | Neosazuje se |
9 | J6, J13, J14, J15, J16, J17, J18, J19, J20 | JUMP2 | JUMP2 | Nalámat |
1 | J30 | JUMP4 | JUMP4 | Nalámat |
3 | J12, J21, J100 | JUMP10 | JUMP10 | Nalámat |
1 | J10 | JUMP22 | JUMP22 | Nalámat |
1 | J3 | JUMP9_X3_X5_X8 | JUMP9_X3_X5_X8 | Nalámat |
Douřadé hřebínky | ||||
1 | J24 | JUMP2X2 | JUMP2X2 | Nalámat |
5 | J1, J2, J4, J5, J8 | JUMP2X3 | JUMP2X3 | Nalámat |
1 | J7 | JUMP2X4 | JUMP2X4 | Nalámat |
2 | J25, J26 | JUMP2X8 | JUMP2X8 | Nalámat |
1 | J11 | JUMP2X10 | JUMP2X10 | Nalámat |
2 | J9, J23 | JUMP2X22 | JUMP2X22 | Nalámat |
Konstrukční součástky | ||||
1 | Plošný spoj | PCB S3AN01B | ||
4 | Šroub M3x12mm křížový, válcová hlava, pozinkovaný | |||
4 | Matice M3, pozinkovaná | /td> | ||
4 | Podložka M3, pozinkovaná |
Prvním krokem je připojení k laboratornímu zdroji a kontrola funkčnosti napájecích zdrojů. Postupně zvyšujeme napájecí napětí až k hranici +5V a měříme spotřebu (orientačně) a napětí na vnitřních stabilizátorech U2 a U3. Vnitřní napájecí napětí jsou +3.3V a +1.2V (mohou se lišit řekněme o desítky milivoltů). Spotřeba desky bez nahrané konfigurace je cca 50-60mA.
Nyní je třeba ověřit, zda pracují ochranné obvody na PS/2 portech. Měříme napětí na Q10.D, které má být cca +5V a Q10.S, které má být o něco menší, než +3.3V. Toto měření opakujeme pro všechny 4 tranzistory, tedy pro Q10 až Q13.
Podobně zkontrolujeme i ochranné obvody I²C portu. Jen je třeba z vnějšku připojit +4V na hřebínek J30.2 a J30.3 a měřit na tranzistorech Q8 a Q9. Opět se nesmí směrem k FPGA dostávat napětí větší, než je napájení +3.3V.
Protože samotný obvod FPGA bez nahrané konfigurace je „mrtvým broukem“ je pro další oživování a testování potřeba použít nějaký vhodný obsah, aby bylo možno otestovat celou funkčnost desky. Testování desky je popsáno v dokumentu S3AN01B_HW_Test.