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.

Deska S3AN01B, pohled shora

Acrobat PDF verze

Technické parametry

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.

Popis konstrukce

Úvodem

Š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í modulu

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.

Napájení

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!

Schéma napájecí části

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.

Konfigurace 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.

JTAG programovací konektor

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).

Konfigurace (mode) Konfigurace (SPI režim)

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.

Oscilátor

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í.

Řada LED indikátorů

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.

Schéma LED indikátorů

Display LED

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ů.

Schéma LED displeje

Vstupní tlačítka a přepínače

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.

Schéma tlačítek Schéma DIP přepínačů

Rozhraní PS/2 a I²C

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í.

Schéma ochrannýcj obvodů pro PS/2 port Schéma ochranných obvodů pro I2C port

VGA port

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.

Schéma VGA portu

Diferenciální signály

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.

Konektory pro diferenciální signály Hřebínek pro diferenciální signály

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.

5V tolerantní vstupy

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ě.

Schéma převodníku 5V signálů - první část

Schéma převodníku 5V signálů - druhá část

Analogové obvody

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.

Schéma A/D a D/A analogových obvodů

Mechanická konstrukce

Vývojová deska má standardní rozměry a upevňovací šrouby v rozích jako ostatní desky stavebnice MLAB.

Osazení a oživení

Osazení

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.

Osazovací plán, horní strana

Osazení - strana součástek

Osazovací plán, spodní strana

Osazení - strana spojů

Seznam součástek

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á      

Oživení

První zapnutí

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.

Testovací obsah

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.