FPGA od zadania k produktu - Úvod I.

Publikované: 19.08.2013, Kategória: Návody a teória

www.svetelektro.com

Séria článkov o technológii FPGA bude popisovať môj subjektívny pohľad na vývoj zariadenia s využitím FPGA.

Články budú vysvetľovať aplikáciu v projekte osciloskopu/log. analyzátoru uverejnenom na fóre [1] a na githube [2] (kde je možné nájsť kompletné zdrojové kódy a schémy/dosky v Eagle). V prvej časti však najprv uvediem samotnú technológiu FPGA a základné informácie o spôsobe vývoja aplikácií s FPGA.

 

Čo je možné s FPGA vytvoriť?

Pre predstavu veľkosti dnešných FPGA okrem uvedeného projektu [1][2] je možné vytvárať aj podstatne zložitejší HW vo FPGA a to napr. kompletnú AMIGA 500 [3] v pomerne malom (low-end) FPGA alebo Apple II [4] alebo aj napr.  celé Pentium. Ďalším veľkým pôsobiskom je spracovanie signálov (DSP) a bývajú často súčasťou ARMových SoC. Najnovšie sa využívajú ako výkonný „miner“ v sieti Bitcoin [5].

Obr. 1- Amiga 500 vo FPGA                 Obr. 2 - Apple II v FPGA                                         

Takže skutočne sa fantázii medze nekladú a do FPGA správnej kategórie sa dneska „vojde“ takmer všetko!

Čo je to FPGA?

FPGA alebo Field Programmable Gate Array teda na mieste (v obvode) programovateľné hradlové pole umožňuje vytvoriť ľubovoľný digitálny obvod (s obmedzením na počet logických obvodov, ktorými disponuje). Sám o sebe nedokáže vykonávať žiadnu funkciu na rozdiel od mikrokontroléra, ktorý disponuje rôznymi integrovanými modulmi (SPI, I2C, ADC, DAC atď.), FPGA väčšinou neobsahuje nič všetko je vytvárané programovateľnou logikou.


FPGA sú väčšinou volatilné zariadenia, to znamená že po vypnutí konfiguráciu (tzv. bitstream) „zabúdajú“ a bez konfigurácie po zapnutí sú úplne „mŕtve“. Preto pri FPGA väčšinu býva umiestnená FLASH pamäť, z ktorej si po zapnutí napájania FPGA konfiguráciu stiahne (Sú aj iné možnosti ako dostať konfiguráciu do FPGA, ale o tom neskôr).
S touto vlastnosťou treba rátať, pretože z toho vyplýva, že FPGA nie je okamžite po zapnutí funkčné a trvá desiatky až stovky ms kým „nabehne“.
Obyčajne FPGA disponujú vysokým počtom vývodov (stovky až tisícky), preto sú bežne FPGA najčastejšie v BGA púzdrach, čo práve znižuje možnosti amatérskeho použitia.

Aká je štruktúra FPGA?

Skladá sa v zásade z veľkej programovateľnej prepojovacej matice a logických blokov (na obrázku CLB) a programovateľných I/O. Táto základná štruktúra je často obohatená o DSP bloky, distribuovanú pamäť a ďalšie špecifické obvody podľa typu FPGA. Ďalej obsahuje PLL a DCM bloky na generovanie a správu hodín taktiež prepojovacia matica obsahuje špeciálne rozvody hodín.

Obr. 3 - architektúra FPGA

Configurable Logic Block (CLB)

CLB niekedy sa označuje LAB (Logic Array Block – rozdiel v terminológii je vo výrobcoch, Altera používa LAB a Xilinx CLB) obsahuje lookup tabuľky (LUT) s rôznym počtom vstupov (3, 4, 6) v závislosti od  rodiny FPGA, táto tabuľka realizuje naprogramovanú logickú funkciu (kombinačný obvod).  Ďalej plnú sčítačku (FA – Full Adder) a klopné obvody (DFF), ktoré umožňujú realizovať funkciu sekvenčných obvodov a multiplexory (mux) umožňujúce meniť dátovú cestu vnútri CLB.

Obr. 4 - CLB (LAB)

I/O bloky

Starajú sa o komunikáciu s okolným svetom FPGA, umožňujú pomerne pokročilé nastavenia od logickej úrovne,  pullup/pulldown k diferenciálnym párom a špeciálnym rozhraním pre pamäte DDR2/DDR3. Tu zase schopnosti závisia od zvolenej rodiny FPGA.

Programovanie FPGA

Vzhľadom na vysokú zložitosť, nie je praktické priamo tvoriť návrh na úrovni prepojení CLB a programovaní LUT. Preto sa využíva popisu na vyššej úrovni a k tomu je možné použiť klasickú logickú schému alebo HDL jazyky. Najčastejšie vzniká popis práve prostredníctvom HDL jazyku.

HDL jazyky (Hardware Description Language)

Základným cieľom týchto jazykov je popísať digitálny obvod. Na rozdiel od konvenčných jazykov sa tu kód nevykonáva (výnimkou je simulácia), ale je z neho odvodená konfigurácia FPGA. Ďalším rozdielom je masívne paralelný priebeh. K tomuto účelu sa využíva konceptu tzv. procesovsignálov.

Príklad zápisu dvoch procesov v jazyku MyHDL:

to isté vo VHDL:


Tento príklad ukazuje dvojicu procesov, ktoré prebiehajú paralelne, kde prvý proces popisuje sekvenčný obvod – čítač, ktorý je použitý ako delič frekvencie. Druhý proces popisuje kombinačnú logiku, kde signál halfMhzClock je vyvedený do signálu clkDacOut len ak je aktívne povolenie signálom clkEn.
Signál sa teda dá predstaviť ako vodič spájajúci logické obvody (platia teda isté obmedzenia ako v prípade skutočného obvodu – zapisovať do jedného signálu (priradiť hodnotu) môže len jeden proces. A zároveň signál môže nadobúdať okrem 0 a 1 špeciálne stavy a to napr. ‚Z‘ – stav vysokej impedancie (využitie je napr. radič I2C, zdieľaná zbernica) alebo ‚X‘ – skrat, ‚U‘ – nedefinovaná hodnota a ďalšie.
Procesy je možné si predstaviť ako logické obvody, ktoré signály prepájajú.
Z príkladu je možné vidieť, že rozdiely medzi HDL jazykmi sú skôr kozmetické a otázka osobnej preferencie, MyHDL preferujem hlavne z dôvodu flexibility a úspornejšieho zápisu oproti VHDL a lepšej čitateľnosti oproti Verilogu.

Vznik konfigurácie FPGA z HDL popisu

Je zrejmé že popis v HDL musí byť spracovaný na konfiguráciu logických blokov a ich prepojenia. O toto sa našťastie starajú nástroje, ktoré poskytujú výrobcovia FPGA.

Spracovanie HDL prebieha v zásade 3 krokoch a to:

1.      Syntéza:
Táto časť analyzuje HDL popis a hľadá hardwarové ekvivalenty zápisu v HDL. Napr. na zápis procesu  clockDivisor  nájde 7-bitový čítač.
Ďalšími príkladmi môže byť posuvný register, konečný automat, dvojportová pamäť...
 
2.      Mapovanie na cieľovú technológiu:
 Tu už prichádza k slovu konkrétne vybratý  model FPGA a mapper sa snaží nájsť najbližšie/najspornejšie/najrýchlejšie (podľa nastavení mappera) ekvivalenty  v syntéze nájdených komponentov v zvolenom FPGA.
V tejto časti poznať či sa dizajn „vojde“ do FPGA a či je vôbec možné v danom type FPGA daný popis v HDL vytvoriť.
 
3.       Place and Route:
 V tejto fáze sa hľadá vhodné usporiadanie a prepojenie jednotlivých komponentov FPGA v prepojovacej matici. Tu sa rieši hlavne časovanie tzv. static timing analysis, ktorá určí či návrh bude fungovať na zvolenej frekvencii (a iných časovacích obmedzeniach napr. hold/setup time).
Rozloženie a prepoje je možné samozrejme ručne ovplyvniť a to v jednoduchosti zmenou optimalizačnej stratégie a v zložitosti priamo ručným routovaním.
Tento proces je pomerne zložitý a skrýva hneď niekoľko problémov. V prvej fáze môže nastať to že syntetizátor nesprávne rozpozná popis a zvolí inú HW implementáciu ako autor HDL popisu zamýšľal, na toto narážajú najmä začiatočníci a prejavuje sa to tým že vec v simulácii perfektne funguje, ale v realite v FPGA už nie.
Druhým problémom, ktorý súvisí ako s bodom 2 tak s bodom 3 je časovanie, ak vybraté komponenty vo fáze 2 majú príliš veľké oneskorenie a dizajn obsahuje veľa prepojení tak vo fáze 3 nie je možné dodržať stanovené časovacie obmedzenia a je nutné sa buď uspokojiť s nižšou pracovnou frekvenciou alebo dizajn premyslieť (napr. zaviesť zreťazenie, obmedziť množstvo kombinačnej logiky, presvedčiť mapper aby použil iné komponenty – napr. použitie distribuovanej RAM namiesto FIFO).

IP Cores

Našťastie však netreba všetko vytvárať od nuly, priamo výrobcovia FPGA ponúkajú množstvo tzv. IP cores, ktoré predstavujú hotové odladené obvody, príkladom môže byť IP Core ChipScope od Xilinxu ktoré umožňuje mať logický analyzátor priamo v FPGA, ktorý komunikuje cez JTAG z Xilinxovým SW. Ale možností je veľa napr. kontroléry DDR2/3 pamätí alebo dokonca kompletné mikrokontroléry ako kompletné portfólio AVR.

Nahratie konfigurácie do FPGA

Po úspešnom P&R už zostáva len vytvorený „bitstream“ nahrať do flash pamäte z ktorej FPGA konfiguráciu načíta.

Záver

Týmto tento teoretickejší diel uzatváram a môžete sa tešiť na ďalší - praktickejší diel, ktorý sa bude zaoberať návrhom zapojenia a dosky pre FPGA obvodu zobrazeného na nasledujúcej fotke: