PROGRAMOVATELNÁ LOGICKÁ POLE Programovatelné součástky a zejména hradlová pole jsou velmi důležité prvky dnešní elektroniky. Díky nim si každý může vyrobit vlastní zákaznický integrovaný obvod šitý přesně na míru dané aplikaci s minimálními náklady. V současnosti existuje celá řada programovatelných logických obvodů - od pamětí PROM přes součástky typu PAL až po programovatelná hradlová pole (FPGA - Field Programmable Gate Arrays), která jsou nejvyšším stupněm v úsilí o levné zákaznické obvody.
Všechny programovatelné součástky se souhrnně (obecně) označují PLD, což znamená Programmable Logic Device. Nejběžnější dělení programovatelných obvodů v
PLD (Programmable Logic Devices) a FPGA (Field Programmable Gate Arrays). Obvody PLD se dále dělí na obvody SPLD (Simple PLD) – dnes to jsou zejména obvody GAL16V8, GAL20V8 a GAL22V10 a jsou charakteristické tím, že obsahují jedno programovatelné pole, a obvody CPLD (Complex PLD – mnoho výrobců i různých typů) se strukturou odpovídající několika obvodům SPLD současné době je na obvody
na společném čipu.
Programovatelná hradlová pole byla představena v polovině osmdesátých let. FPGA v sobě slučují výhody vysoké integrace VLSI obvodů (velká hustota logiky, rychlost, výkonnost) s výhodami snadného návrhu, levné produkce a rychlého nasazení. Logické funkce, dříve realizované mnoha pouzdry TTL apod., lze integrovat do jediného pouzdra. V současnosti vyrábí různé varianty programovatelných hradlových polí několik výrobců. Mezi nimi od počátku zaujímá vedoucí pozici americká firma XILINX s obvody registrovanými pod obchodní značkou LCA (Logic Cell Array). Základem architektury LCA je matice konfigurovatelných logických bloků realizujících prostřednictvím programovatelného propojení požadovanou logickou funkci. Komunikaci s okolím zajišťují programovatelné vstupně-výstupní bloky. Rozdíly mezi programovatelnými logickými obvody vycházející z architektury PAL a LCA: - Propojení má u LCA aditivní charakter, t.j. propojovací vodiče mohou být připojovány tak, aby vytvořily cestu mezi libovolnými dvěma uzly. - Programovatelné propojení součástek typu PAL, GAL, EPLD apod. je subtraktivní naprogramování požadovaného propojení spočívá v odstranění předdefinovaných spojů, aby nadbytečná logika byla eliminována. Počet propojovacích cest mezi dvěma uzly je předem definován, a jakmile je nějaký spoj odstraněn, není už odpojená část logiky použitelná. Základní logické bloky jsou u LCA programovatelné a mohou být nakonfigurovány pro použití v širokém spektru kombinačních a sekvenčních funkcí. Naproti tomu u programovatelných logických obvodů vycházejících z architektury PAL bývají funkce makrobuňek konfigurovatelné jen v omezeném rozsahu. K dispozici je velký výběr LCA vzájemně se lišících architekturou (v několika typových řadách), množstvím logiky (s odstupňovanými hustotami od několika stovek až do stovek tisíc ekvivalentních hradel), rychlostí, počtem pinů, pouzdry atd. Uživatel si může zvolit, jaký
typ jeho aplikaci nejlépe vyhovuje. V každém případě už i nejmenší LCA může nahradit až několik desítek SSI/MSI integrovaných obvodů. LCA jsou vyráběna pokročilou technologií CMOS (stejnou jako pro SRAM) s nízkou cenou, velmi nízkou spotřebou, vysokou dosažitelnou rychlostí, hustotou logiky, výtěžností, spolehlivostí a testovatelností. Podobně jako u programovatelných mikroprocesorových periferních obvodů jsou i u LCA uložena konfigurační data ve vnitřní statické paměti RAM.
Obvody PLD jsou založeny na vyjadřování kombinačních logických funkcí ve tvaru součtu součinů (Sum Of Products – SOP), podobně jako
známější paměti PROM. Na rozdíl od těchto pamětí, které mají pevně zapojenou součinovou část a programovatelné součtové pole, je u obvodů PLD programovatelné součinové pole a pevná součtová část (struktura PAL) nebo jsou programovatelné obě části (struktura PLA). V nejjednodušším případě odpovídá každé realizované logické funkci v obvodu PLD jedna makrobuňka, takže počet makrobuněk obsažených v těchto obvodech dává představu o tom, jak složité zapojení se do nich "vejde".
Obvody SPLD obsahují 8 až 10 makrobuněk Obvody CPLD jich obsahují až několik stovek. Obvody PLD se v současnosti vyrábějí s rozsahem až do zhruba 10 000 ekvivalentních hradel (pro GAL16V8 se udává ekvivalent 300 hradel).
Obvody FPGA obsahují pole malých programovatelných buněk, které se pro vytvoření logické funkce musí vhodně propojit. Úloha najít optimální propojení je zde mnohem složitější => používá se návrhový systém, který toto propojení vytvoří automaticky. Rozsah logiky v obvodech FPGA se pohybuje o dva až o tři řády výše než u obvodů PLD (milióny i více ekvivalentních hradel).
Vývojové prostředky Návrhové systémy jsou v současnosti nezbytným nástrojem pro práci s programovatelnými obvody. Vstupní údaje (popis vyvíjené konstrukce) je nutné zapsat ve formě, kterou je systém schopen převést na model této konstrukce. Ten je pak možno zpracovávat simulátorem k ověření jeho správnosti, časových parametrů a podobně, a dále jej syntetizérem a implementačním programem vložit (implementovat) do cílového
programovatelného obvodu.
Zápis vstupních údajů bývá nejčastěji textový – pomocí jazyků HDL (Hardware Description Language) nebo grafický – editory schémat, stavových diagramů a podobně. Grafické systémy vstupu bývají obvykle nepřenositelné na jiný systém, než je ten, v němž byl popis vytvořen. Z tohoto hlediska jsou výhodnější systémy textového vstupu,
které jsou ve výrazně větší míře standardizovány. K nejznámějším jazykům HDL patří jazyk ABEL a jazyk VHDL. Jazyk ABEL je poměrně jednoduchý, a jeho syntaxe vychází ze struktury obvodů PLD, pro něž je určen. Jazyk VHDL má výrazně vyšší stupeň abstrakce (a také složitosti), což dovoluje i syntézu zaměřenou na obvody FPGA.
Pro vývoj aplikací s FPGA existuje několik návrhových systémů. Pro vývoj je nutné použít minimálně dvou nástrojů. Prvním je nástroj pro syntézu, který převede většinou textový popis návrhu v některém HDL jazyce na netlist využívající obecné logické bloky. Druhý nástroj zajistí konverzi obecného netlistu na netlist využívající prostředky konkrétního FPGA a zajistí jejich "optimální" rozmístění a propojení. Pokud chce člověk začít pracovat s obvody FPGA musí si tedy obstarat základní programové vybavení od výrobce obvodů. Kromě nástrojů pro syntézu je velmi výhodné používat ještě simulátor, čímž se může předejít chybám již v průběhu návrhu. Ceny vývojových prostředků jsou však velmi vysoké (ceny licencí na jeden rok se obvykle pohybují od 1000 do 2000 dolarů). Firma Xilinx nabízí pro FPGA s menší hustotou logiky mnohem levnější alternativu. Vývojový systém ISE WebPACK je totiž zadarmo. Tento vývojový systém pro FPGA firmy Xilinx je omezenou verzí jejich kompletního systému. Kromě vlastního prostředí WebPACK je možné zdarma získat i omezenou verzi HDL simulátoru ModelSim XE, což je verze s předkompilovanými knihovnami primitiv pro FPGA Xilinx. Omezení simulátoru spočívá ve zpomalení jeho funkce pro velké návrhy,
Vývojové prostředí ISE WebPACK včetně simulátoru ModelSim XE je možno stáhnout zde. Jedinou podmínkou pro stažení je nutnost zaregistrovat se. Tím si vytvoříte uživatelský účet a získáte přístup ke stáhnutelným souborům. Systém WebPACK umožňuje zadání návrhu v některém z HDL jazyků Verilog nebo VHDL, případně i pomocí schématu. Prostředí podporuje následující obvody Xilinx:
• • • • • • •
FPGA Spartan-II FPGA Spartan-IIE FPGA Virtex-E (max. XV300E) FPGA Virtex-II (max. X2V250) CPLD CoolRunner2 CPLD XC9500/XL/XV CPLD CoolRunner XPLA3
Součástí systému je i nástroj pro konfiguraci FPGA a CPLD z počítače přes JTAG rozhraní, editor stavových diagramů a FloorPlanner pro manuální úpravy fyzického rozmístění bloků v FPGA.
Hardware Pro bližší seznámení s programovatelnými hradlovými poli je výhodné použít již hotovou vývojovou desku. Na trhu jich je několik a jejich ceny se pohybují řádově od $200.
FPGA-evb-S2 Jedná se o open-source vývojovou desku pro FPGA Xilinx Spartan-II. Umožňuje použít libovolný obvod z této řady v pouzdru PQFP-208. Díky použitému typu obvodu lze pro vývoj aplikací využít prostředí ISE WebPACK, takže odpadají další finanční náklady na vývojový systém.
Plně osazená deska obsahuje: • • • • • • • • • •
FPGA Xilinx Spartan-II XC2S200-6PQ208 Patici pro konfigurační PROM XC17S200A Programovatelný krystalový oscilátor 20-120 MHz Dva 80-pinové konektory pro rozšíření Rozhraní PS/2 pro klávesnici nebo myš Výstup na VGA monitor Čtyřnásobný DIP přepínač Čtyři tlačítka Osm LED Konfigurační konektor
Deska může být napájena stejnosměrným nebo střídavým napětím v rozsahu 7-15 V. Karta byla vyvíjena s ohledem na co nejnižší cenu, takže základem je pouze dvouvrstvá deska plošných spojů. Dalším kritériem při vývoji byla snadná rozšiřitelnost, takže vlastní karta obsahuje pouze základní periferie. Libovolné periferie mohou být připojeny pomocí dvou 80-pinových konektorů.
Zde je fotografie modulu,který budeme používat
POPIS PLD
Klasické PLD Obvody této kategorie jsou charakteristické vnitřní strukturou podle následujícího obrázku.
Každá vodorovná čára v programovatelné matici AND představuje vždy jedno součinové hradlo. Na vstupy každého hradla lze připojit "libovolnou" kombinaci vstupních signálů, zpětných vazeb a jejich negací. Počet vstupů každého součinového hradla je však omezen. Zapojení jednoho součinového hradla je znázorněno na následujícím obrázku.
Vlnovky na tomto obrázku představují programovatelné spínače. Jejich realizace závisí na výrobní technologii obvodu. Například u bipolárních obvodů se jednalo o jakousi pojistku, která se při programování obvodu "přepálila" proudovým impulsem. V technologii CMOS jsou spínače realizovány stejnými principy jako u pamětí PROM, EPROM nebo EEPROM. Složitější obvody z kategorie FPGA mívají často spínače řízeny statickou pamětí RAM. Do kategorie klasických PLD je možné zařadit obvody následujících typů:
Obvody typu PAL (Programmable Array Logic) mají strukturu podle výše uvedených obrázků. Některé starší typy neměly například výstupní registry, takže PAL byly vhodné spíše pro kombinační logiku. Zástupci této kategorie jsou obvody PAL, GAL a PALCE. Obvody typu PLA (Programmable Logic Array) mají obecnější strukturu než PAL PLA na horním obrázku. Mají totiž programovatelnou nejenom matici logických součinů, ale i následující matici logických součtů.
Komplexní PLD Klasické obvody PLD mají velmi omezené prostředky, takže umožňují realizovat pouze jednodušší funkce. Proto výrobci začali sdružovat více takovýchto obvodů na jednom čipu spolu s nutnými prostředky pro propojení. Takovéto obvody se většinou označují jako CPLD což znamená Complex Programmable Logic Device. Typická struktura obvodu CPLD je znázorněna na následujícím obrázku.
Každý výrobce CPLD používá trochu jinou interní strukturu obvodů, ale většinou vychází z tohoto schématu. CPLD od různých výrobců se obvykle liší v provedení bloků vlastní programovatelné logiky i když většinou vychází z klasické struktury PAL.
Obvody FPGA Obvody typu FPGA (Field Programmable Gate Array) mají z programovatelných obvodů nejobecnější strukturu a obsahují nejvíce logiky. Současné největší obvody FPGA obsahují až 6 milionů ekvivalentních hradel (typické dvouvstupové hradlo NAND). Typickou strukturu obvodu FPGA znázorňuje následující obrázek.
Bloky označené IOB (Input/Output Block) představují vstupně-výstupní obvody pro každý v-v pin FPGA. Tyto bloky obvykle obsahují registr, budič, multiplexer a ochranné obvody. Bloky LB (Logic Block) představují vlastní programovatelné logické bloky. Všechny bloky mohou být různě propojeny globální propojovací maticí. Nejpoužívanější struktura konfigurovatelného logického bloku je znázorněna na následujícím obrázku.
FPGA obvykle umožňují propojit některé signály logických bloků přímo se sousedním bez nutnosti využívat globální propojovací matici. Takovéto spoje mají mnohem menší zpoždění a umožňují tak realizovat například rychlé obvody šíření přenosu, což je nezbytné pro sčítačky nebo násobičky. Kromě bloků znázorněných na předchozích obrázcích integrují výrobci do FPGA další prvky. Většina moderních FPGA obsahuje několik bloků rychlé synchronní statické paměti RAM. Velmi často obvody FPGA obsahují PLL (Phase Locked Loop) nebo DLL (Delay Locked Loop) pro obnovení charakteristik hodinového signálu, případně pro násobení nebo dělení jeho frekvence.
FPGA Xilinx
Jednotlivé typové řady programovatelných hradlových polí Xilinx jsou porovnány v následující tabulce. Tabulka neobsahuje typy, které se již v dnešní době nevyrábí. Syst. Distrib. Bloková Počet Vccio hradel RAM RAM Pouzdra logických [V] [tis.] [kbit] [kbit] [V] buněk
Vccint Typ
XC4000XL/XLA 3,3 3,3 XC4000XV
2,5 3,3
Podpora v systému WebPACK
Pozn.
466 7448
10 200
6 - 98
-
PLCC QFP BGA
NE
-
12312 -
100 -
162 -
-
QFP
NE
-
20102
500
265
BGA
Spartan-XL
3,3 3,3
238 1862
5 - 40
3 - 25
-
PLCC QFP BGA
NE
Architektura typu XC4000
Spartan-II
2,5
2,5 3,3
432 5292
15 200
6 - 74
16 - 56
QFP BGA
ANO
Architektura typu Virtex
Spartan-IIE
1,8
1,8 3,3
1728 6912
50 300
24 - 96 32 - 64
QFP BGA
ANO
Rychlejší verze Spartan-II
Virtex
2,5
2,5 3,3
1728 27648
50 24 - 384 32 - 128 1000
QFP BGA
NE
-
Virtex-E
1,8
1,8 3,3
1728 73008
50 3200
64 - 832
QFP BGA
Max. 300 tis. Rychlejší verze hradel Virtex
Virtex-II
1,5
1,5 - 576 3,3 104882
72 3024
BGA
Max. 300 tis. hradel
24 1014
40 8 - 1456 8000
Násobičky 18x18 bitů
Všechny FPGA Xilinx používají konfiguraci pomocí statické paměti RAM. To znamená, že po připojení napájení je nutné vždy nahrát znovu konfiguraci. Výhodou tohoto řešení je téměř nekonečná reprogramovatelnost FPGA a také rychlost. Konfigurační propojky pracující na principu paměti RAM jsou totiž rychlejší než přepínače na principu např. EEPROM. Při porovnávání údajů z tabulky je třeba vzít v úvahu následující skutečnosti: •
•
•
Počet systémových hradel je zavádějící. Toto číslo vyjadřuje kompletní rozsah interní logiky včetně konfiguračních prostředků, blokových pamětí apod. Mnohem důležitější údaj je počet logických buněk. Interní struktura logické buňky je vždy schématicky znázorněna v katalogu. Distribuovaná paměť RAM je tvořena multiplexery logických buněk. Při jejím použití se připravujeme o využitelné prostředky pro ostatní logiku. Obvykle může být tato paměť využita jako dvouportová nebo klasická jednoportová synchronní RAM nebo jako ROM. Bloková paměť RAM je tvořena skutečnými bloky synchronní statické RAM. Bloky mají dvojnásobné adresové i datové sběrnice, takže je lze využít i jako dvouportovou paměť.
Pro využití obvodů FPGA v našich podmínkách je důležitý i údaj o podpoře ve vývojovém systému WebPACK. Firma Xilinx totiž nabízí svůj vývojový systém ISE v několika verzích. Cena roční licence na plný systém se pohybuje v tisících dolarů. Jako alternativu však Xilinx nabízí ISE WebPACK, který lze zdarma stáhnout z webových stránek firmy. Tento systém však samozřejmě nepodporuje všechny typové řady FPGA. Více se budu vývojovému systému věnovat dále.
Spartan-II Pro běžné použití se mi v současné době jeví nejvýhodnější programovatelná hradlová pole typu Spartan-II a Spartan-IIE. Tyto typy jsou totiž plně podporovány vývojovým prostředím ISE WebPACK a využívají pokročilou architekturu obvodů řady Virtex. Ve srovnání s obvody Virtex-E a Virtex-II jsou však FPGA Spartan-II mnohem levnější. Počet využitelných hradel je dostatečně velký i pro poměrně rozsáhlé návrhy. Například kompletní řadič VGA v grafickém režimu nezabere ani 1% využitelné logiky největšího obvodu Spartan-II s 200 tisíci systémovými hradly. Interní struktura nejmenšího obvodu Spartan-II XC2S15 je znázorněna na
následujícím obrázku. Ostatní obvody této řady se liší pouze počtem jednotlivých bloků.
Obvod obsahuje vstupně-výstupní buňky (I/O CELLs), konfigurovatelné logické bloky (CLBs), blokovou paměť RAM (BLOCK RAM) a bloky DLL (Delay Locked Loop), které slouží pro rekonstrukci a případné násobení či dělení vnějších taktovacích signálů.
Vstupně-výstupní buňky Struktura jednotlivých v-v buněk je schématicky znázorněna na následujícím obrázku.
Vstupně-výstupní buňka může pracovat v jednom ze šestnácti režimů jako jsou například LVCMOS, HSTTL, STTL, GTL a další. Všechny tři registry mohou být řízeny hranou (flip-flop) nebo úrovní (latch).
Logické buňky Základním stavebním prvkem konfigurovatelného logického bloku (CLB) je logická buňka (Logic Cell - LC). Logická buňka obsahuje čtyřvstupový funkční generátor, rychlou logiku přenosu a paměťový element. Každý konfigurovatelný logický blok (CLB) obvodů řady Spartan-II obsahuje čtyři logické buňky (LC) uspořádané do dvou shodných řezů (slice). Kromě čtyř logických buněk obsahuje CLB ještě logiku, která umožňuje kombinovat funkční generátory a tak bylo možné vytvořit logickou funkci pěti nebo šesti proměnných. Schéma jednoho řezu (dvě logické buňky) je znázorněno na následujícím obrázku.
Funkční generátory jsou tvořeny takzvanými look-up tables (LUT), což jsou vpodstatě konfigurovatelné paměti ROM se čtyřbitovou adresovou a jednobitovou datovou sběrnicí. Tyto bloky mohou být využity nejen pro generování kombinačních logických funkcí, ale i jako synchronní paměť RAM 16x1 bit. LUT může pracovat také jako šestnáctibitový posuvný registr. Bloková RAM Pro paměťově náročnější návrhy obsahují obvody řady Spartan-II blokovou paměť. Ta je rozdělena do bloků po čtyřech kilobitech. Tyto bloky jsou rovnoměrně rozmístěny v ploše čipu.
Každý blok může být nakonfigurován do režimu 4Kx1 až 256x16. Paměť může být využita jako dvouportová nebo jednoportová. Obsah paměti je možné definovat již při návrhu, takže je možné využít blokovou RAM i jako paměť typu ROM.