Aktuální vydání

celé číslo

04

2022

veletrh Amper 2022
celé číslo

Platforma s částečnou dynamickou rekonfigurací FPGA

číslo 5/2006

Platforma s částečnou dynamickou rekonfigurací FPGA

Univerzální výpočetní platforma realizovaná v Ústavu teorie informace a automatizace AV ČR využívá k plnění určených funkcí částečné dynamické rekonfigurování programovatelných hradlových polí. Jejím základem je obvod AT94K FPSLIC firmy Atmel ve spojení s vnější pamětí. V článku jsou stručně shrnuty důvody, které vedly k návrhu platformy, popsány základní rysy obvodu AT94K, přiblíženy možnosti navržené platformy a uvedeny dva příklady jejího použití.

Účel platformy

Programovatelná hradlová pole (Field Programmable Gate Array – FPGA) jsou konfigurovatelné obvody vysokého stupně integrace (VLSI), které jsou schopny v sobě integrovat různé logické funkce. V roce 1984 byly tyto obvody s konfigurační pamětí založenou na technice SRAM uvedeny na trh se záměrem umožnit případné vylepšování nakonfigurovaného programovatelného obvodu v průběhu jeho životního cyklu.

Nyní, o více než dvacet let později, poskytují FPGA i možnost rekonfigurování obvodu za jeho chodu, v reálném čase (tzv. dynamická rekonfigurace). Na ni je nutné nahlížet ze dvou hledisek. Jedním je samotná možnost rekonfigurace hardwaru, jak ji nabízejí jednotlivé obvody. Druhým je podpora dynamické rekonfigurace obvodu prostředky výpočetní techniky (návrhové nástroje, nástroje CAD). V současné době jsou na trhu dostupné obvody podporující částečnou anebo úplnou dynamickou rekonfiguraci. Jsou to např. obvody od firmy Xilinx (Spartan-2, VirtexII) nebo od firmy Atmel (AT40K, AT94K). Doposud ale nebyl k dispozici potřebný nástroj pro návrh procesu dynamické rekonfigurace. To bylo dáno velkou složitostí postupu při návrhu rekonfigurovatelného FPGA.

Proto byla na pracovišti autorů realizována univerzální platforma s dynamickou rekonfigurací FPGA založená na obvodu Atmel AT94K FPSLIC. Uvedená platforma umožňuje programátorům využít veškeré možnosti nabízené programovatelnými obvody, aniž by k tomu potřebovali hlubší znalost používaného hardwaru. Klíčem k tomu je zcela transparentní přístup k možnostem hardwaru zprostředkovaný platformou a využívající předkompilované knihovní moduly připravené tak, aby je mohl co nejsnáze použít i programátor bez podrobné znalosti jejich vnitřní struktury.

Obr. 1.

Obr. 1. Obvod AT94K FPSLIC s vnější pamětí (šipky udávají směr toku dat)

Platforma obsahuje systém virtuální paměti, rozšiřující standardní 64kB adresový prostor přístupný z FPGA i z mikrořadiče AVR, tedy obou hlavních částí obvodu AT94K. Rozšířený adresový prostor může být použit k uložení dat, programů pro mikrořadič AVR nebo souborů konfiguračních bitů (configuration bitstream) pro FPGA. Podobné architektury lze nalézt v [1].

Obvod AT94K FPSLIC

Obvod Atmel AT94K FPSLIC ([5], dále jen AT94K; obr. 1) obsahuje programovatelné hradlové pole typu AT40K [6], osmibitový mikrořadič AVR, hardwarovou násobičku, dva asynchronní sériové porty, rozhranní I2C, tři čítače, hlídací obvod (watchdog) a interní paměť typu SRAM o velikosti 36 kB, kterou lze rozdělit na blok pro uložení programu (velikost 20 až 32 kB) a blok pro ukládání dat (4 až 16 kB). Prototypové desky s tímto obvodem lze získat od firmy Atmel pod označením ATSTK94 nebo ATSTK594.

Mikrořadič AVR je osmibitový jednočipový mikrořadič typu RISC, který vyrábí firma Atmel v různých verzích pouzdření i vnitřní konfigurace. Může být programován jak v jazyce assembler, tak v jazyce C (použít lze např. komerční překladač Imagecraft nebo volně šiřitelné AVR GCC).

Programovatelné hradlové pole AT40K se programuje prostřednictvím souboru konfiguračních bitů generovaného nástrojem Figaro IDS v kombinaci se syntézními nástroji, jako je Leonardo Spectrum od firmy Mentor Graphic nebo Synplify od firmy Synplicity.

Obr. 2.

Obr. 2. Rekonfigurovatelná platforma založená na obvodu AT94K (v závorkách jsou relevantní označení bloků platformy)

Obvod AT94K může být použit čistě jako mikrořadič AVR nebo jako FPGA ekvivalentní typu AT40K. Hlavní výhodou je však kombinace obou těchto částí, které mohou kooperovat celkem třemi způsoby. Buď přes rozhraní AVR-FPGA, disponující osmi datovými vstupy, osmi datovými výstupy, šestnácti řídicími signály aktivovanými mikrořadičem AVR a šestnácti signály obvodu přerušení aktivovanými FPGA. Za druhé mohou obě části kooperovat prostřednictvím společného přístupu do sdílené interní SRAM, a to do její datové, ale i do programové části. Třetí způsob vzájemné kooperace využívá schopnost mikrořadiče AVR vstupovat do konfigurační paměti FPGA a tím měnit konfiguraci – a tudíž funkci – FPGA. Toto se děje v tzv. módu 4 prostřednictvím čtyř konfiguračních registrů FPGA, označených X, Y, Z a D (obr. 2; [4], [5]).

Obvod AT94K je vhodný pro realizaci jednoduchých úloh, které nevyžadují rychlé zpracování ani průchod velkého množství dat. Je podporován několika překladači z jazyka C, a jeho programování je proto záležitostí běžné rutiny.

Meze použití obvodu AT94K jsou dány především velikostí jeho interní paměti a velikostí FPGA. Jak již bylo uvedeno, je maximální velikost programové paměti 32 kB a datové 16 kB. Největší dodávaný obvod AT94K obsahuje FPGA o velikosti 40 000 ekvivalentních hradel. Avšak zatím ani podporované překladače z jazyka C nenabízejí žádné komplexnější knihovní prvky pro přístup k periferním obvodům a k FPGA.

Rozšíření AT94K o dynamickou rekonfiguraci

Dosavadní vlastnosti obvodu AT94K podporované současnými návrhovými nástroji dovolují v jednom obvodu vytvořit a poté provozovat vždy pouze jednu konfiguraci FPGA. Hlavními příčinami tohoto omezení jsou malá programová a konfigurační paměť obvodu a nedokonalost návrhových nástrojů.

Pro rozšíření funkčních schopností AT94K o možnost částečné dynamické rekonfigurace je nutné především zvětšit kapacitu datové i programové paměti. K potřebnému zvětšení je v daném případě použit systém virtuální paměti. Požadavky na velikost paměti jsou dány velikostí jednotlivých programů a souborů konfiguračních bitů, se kterými je třeba pracovat. Běžný program pro AVR zabere téměř celou interní programovou paměť obvodu a soubor konfiguračních bitů vyžaduje asi 100 kB datové paměti (počítáno pro jeden modul FPGA). V praxi to znamená, že externí paměť musí být dimenzována tak, aby obsáhla všechny uvažované soubory konfiguračních bitů řetězce.

Potřebného nárůstu kapacity paměti je dosaženo použitím vnější paměti flash, do které lze uložit větší počet souborů konfiguračních bitů pro jednotlivé moduly a programů pro AVR. Ty se pak kopírují do interní programové paměti při každém požadavku na jejich provedení.

Jednotlivé bloky platformy zajišťující její částečnou dynamickou rekonfiguraci jsou patrné na obr. 2, kde je vidět členění virtuálního paměťového systému pracujícího uvnitř AVR, a v části FPGA řešení rekonfigurovatelného matematického koprocesoru a jeho dělení na podpůrné bloky řízení procesu dynamického rekonfigurování a samotný slot pro dynamické moduly.

Sdílení dat mezi AVR a FPGA
Před tím, než je možné použít FPGA v obvodu AT94K jako koprocesor k mikrořadiči AVR, je nutné stanovit jejich komunikační rozhraní. V tomto ohledu AT94K nabízí první dvě z již uvedených tří možností, tj.:

  • sdílení registrů mezi AVR a FPGA,
  • sdílení interní paměti SRAM.

První způsob je jednodušší, ale má určitá omezení, plynoucí z toho, že sdílené registry jsou pouze osmibitové a každý přístup k registru zabere dva takty mikrořadiče AVR.

Při použití druhého způsobu, nabízejícího rychlejší komunikaci, se v FPGA vytvoří řadič kanálu DMA pro přístup do interní paměti a tím se odstraní provádění pomalých instrukcí v mikrořadiči AVR. Nevýhodou řešení se sdílenou SRAM je větší složitost a nutnost zajistit, aby po celou dobu trvání přenosu dat kanálem DMA neprovedl mikrořadič AVR ve sdílené paměti některou z destruktivních operací a nenarušil tak konzistenci přenášených dat.

Systém virtuální paměti
Systém virtuální paměti je často implementován cestou překrývání paměti nebo jejího stránkování. Mikrořadič AVR byl sice navržen pro zpracovávání jednoho programu, ale obvod AT94K a navržená platforma vytvoření virtuální paměti umožňují.

Použité řešení využívá skutečnost, že z FPGA lze k interní programové paměti v případě potřeby přistupovat stejným způsobem jako k interní datové paměti. K realizaci virtuální paměti je třeba v softwaru, v základním vstupním a výstupním systému (BIOS) mikrořadiče AVR, zařídit překrývání paměti a v hardwaru vytvořit kanál DMA pro přenos jednotlivých programů z externí paměti flash do interní programové paměti. Kanál DMA obsahuje registr, do kterého se uloží adresa požadovaného programu (její horní část), a dvanáctibitový čítač, který generuje zbytek (dolní část adresy programu). Zápisem do tohoto registru se inicializuje přenos kanálem DMA z externí do interní paměti. Konec přenosu je indikován přerušením vygenerovaným kanálem DMA.

Protože způsoby adresování interní programové paměti a interní datové paměti jsou odlišné, je nutné program sestavený v programovacím jazyce převést do potřebného formátu. Překládat lze během přenosu DMA kanálem, ovšem za cenu zpomalení přenosu a větší složitosti řadiče kanálu DMA. Proto je mnohem jednodušší program po sestavení ihned přeložit a přeložený uložit do externí paměti. Na výměnu dat mezi pamětmi poté již stačí velmi jednoduchý kanál DMA.

Výměnu programů v programové paměti plně řídí BIOS mikrořadiče AVR disponující funkcí pro volání nového programu. Parametr této funkce obsahuje název volaného programu a BIOS mikrořadiče AVR sám zajistí případné nahrání programu do interní paměti, jestliže tam ještě není, a dále program zavolá, předá mu řízení a čeká na provedení.

Programování v GCC

Programy prováděné na navržené platformě se nijak neliší od běžných programů pro mikrořadič AVR. Běžný program naprogramovaný např. v jazyce C je přeložen do binárního kódu. Program může být strukturován do funkcí, z nichž jedna je tzv. hlavní (main), jak je zvykem v jazyce C. Tato hlavní funkce je vstupním bodem do programu a ji volá BIOS mikrořadiče AVR. Ostatní funkce jsou pro tento BIOS nepřístupné a mohou být volány jen mezi sebou nebo z hlavní funkce. Je možné také využívat některé předprogramované služby, které BIOS mikrořadiče AVR nabízí; k tomu je nutné vložit do programu deklarační soubor. Tyto služby jsou volány přes tabulku s adresami služeb, která je umístěna na pevné adrese, a tudíž je pro načtený program viditelná. Program je schopen také využívat veškerá přerušení a definovat způsob jejich obsluhy. Adresy obsluh přerušení jsou při zavádění programu uloženy do tabulky vektorů přerušení.

Souhrnně má tedy inicializaci a správu virtuálního paměťového prostoru na starosti BIOS mikrořadiče AVR. Jeho činnost v tomto ohledu spočívá v provádění jednoduché smyčky, v níž se vždy zavolá potřebný program, a ten je nahrán do programové paměti (ovšem pouze v případě, že v paměti je uložen program jiný než právě volaný). Po zavedení programu se zaregistrují obsluhy přerušení a řízení se předá zavedenému programu. Ten provede potřebnou funkci, přičemž může využívat služby, které poskytuje BIOS mikrořadiče AVR. Po provedení programu se řízení vrátí zpět do smyčky a BIOS mikrořadiče AVR vybere další požadovaný program.

Rekonfigurování FPGA v reálném čase
Rekonfigurováním programovatelného pole v reálném čase lze velkou měrou rozšířit použitelnost rekonfigurovatelného obvodu při dosavadní konfiguraci hardwaru. Jinými slovy, obvod je schopen provádět různé funkce, které by v něm nemohly být implementovány současně, protože by se do něj nevešly. Obvod AT94K podporuje konfigurační mód 4, který pro změnu konfigurace FPGA nepotřebuje žádný externí hardware.

Rekonfigurace FPGA probíhá podobně jako nahrávání programu z externí paměti do interní programové paměti. Jsou využity dva registry, přičemž jeden obsahuje horní část adresy bitového řetězce (dolní část adresy doplňuje čítač). Druhý registr obsahuje data, která se budou přenášet do konfigurační paměti. Při rekonfiguraci čítač postupně po krocích zvětšuje svou hodnotu až do té doby, než dosáhne konce bitového řetězce. Poté je vygenerováno přerušení pro mikrořadič AVR.

Při předpokladu, že rekonfigurace nezabere žádný čas, lze tento proces pokládat za transparentní k činnosti AVR. Mikrořadič AVR zasílá pomocí obslužných funkcí, které obsahuje jeho BIOS, do koprocesoru tvořeného FPGA data ke zpracování a přitom kontroluje, zda je FPGA nakonfigurováno na požadovanou funkci. Pokud tomu tak není, je vyvolána obsluha rekonfigurace, která FPGA zrekonfiguruje na požadovanou funkci. Požadavek na zrekonfigurování je převeden na adresu bitového řetězce v externí paměti, který je přes registry X, Y, Z a D v FPGA nakopírován do konfigurační paměti FPGA.

Generování rekonfiguračních bitových řetězců

Dynamická rekonfigurace (prováděná v reálném čase) obvodu AT94K vyžaduje tzv. částečný soubor konfiguračních bitů, tj. řetězec, který rekonfiguruje pouze část FPGA, zatímco zbytek pokračuje v činnosti nedotčen rekonfigurací. Dynamickou rekonfiguraci tohoto obvodu přímo podporuje nová verze nástroje Figaro IDS od firmy Atmel.

Při vytváření částečných bitových řetězců je nejprve nutné vytvořit tzv. obálky (wrappers), které obalí jednotlivé dynamické moduly a sjednotí jejich rozhraní. Obálky se vytvářejí jako makra vložená do knihovny, která je součástí navrhovaného řešení. V dalším kroku se jednotlivé dynamické moduly otevřou, postupně se vloží do obálek a optimalizuje se rozmístění dynamického modulu. Takto upravený dynamický modul se vloží do knihovny dynamických modulů pro pozdější použití. Jakmile jsou všechny dynamické moduly uloženy, lze přistoupit k tvorbě statické části FPGA. Do dynamické části FPGA se vloží vždy jeden z dynamických modulů a ten se připojí k statické obálce. Nakonec stačí otevřít nástroj Temporal System Planner, který zavede jednotlivé dynamické moduly do FPGA a generuje pro ně částečné soubory konfiguračních bitů.

Zde je vhodné uvést poznámku: kdyby měla být při n možných konfiguracích (funkcích) FPGA zachována možnost mezi nimi libovolně přecházet, vede běžná strategie jejich vytváření k n! různých částečných souborů rekonfiguračních bitů. Jisté redukce lze dosáhnout použitím dvojice souborů konfiguračních bitů. Jeden FPGA nakonfiguruje a druhý je schopen FPGA zkonfigurovat zpět do počátečního stavu, z něhož lze konfigurovat další funkci. Toto vede pouze k 2n řetězců.

Příklady použití

V dalších odstavcích jsou uvedeny dva příklady využití navržené platformy. První ukazuje použití překrývání programů v interní programové paměti a druhý použití rekonfigurovatelného koprocesoru pro matematické operace s pohyblivou řádovou čárkou.

Systém překrývání paměti
Systém překrývání paměti je použit pro uživatelsky definované programy, které sdílejí jednu programovou paměť. Jsou napsány v jazyce C a mají svoji výchozí adresu, od které jsou, přijde-li požadavek na jejich provedení, nakopírovány do programové paměti. Výchozí adresa programu, na níž je také uložena jeho první instrukce, je nastavena na hodnotu START_PROGRAM. Základní I/O systém mikrořadiče AVR pouze uloží aktuální pozici čítače instrukcí do zásobníku a poté provede odskok na adresu START_PROGRAM. Po skončení programu je načtena původní adresa ze zásobníku do čítače instrukcí. Takto lze uskutečnit další volání jiného programu. Z pohledu programátora se překrývání programů v programové paměti jeví jako volání funkcí v klasické notaci jazyka C.

Obr. 3.

Obr. 3. Použití systému překrývání paměti v aplikačním programu

Příslušný úsek programu je na obr. 3: funkce LoadOvly, kterou zajišťuje BIOS mikrořadiče AVR, překládá identifikátor (ID) požadovaného programu na horní část adresy a tu ukládá v registru VIRTUAL MEM CTRL (tj. řízení virtuální paměti na obr. 2); tím je inicializován kanál DMA, který poté přenese program z externí paměti do interní programové paměti.

Rekonfigurovatelný koprocesor
Jako druhý příklad použití částečné dynamické rekonfigurace lze ukázat rekonfigurovatelný matematický koprocesor vytvořený na základě FPGA. V daném případě koprocesor realizuje matematické operace sečítání (ADD), násobení (MUL), dělení (DIV) a výpočet druhé odmocniny (SQRT) v pohyblivé řádové čárce, vše v přesnosti 24 bitů. Obvod AT94K je ale příliš malý na to, aby mohl obsahovat všechny tyto matematické operace současně. Proto je použita dynamická rekonfigurace. Koprocesor je přístupný z programu prováděného v AVR, ale je v každém okamžiku schopen vykonávat pouze jeden typ matematické operace. Je-li požadována jiná matematická operace než právě nakonfigurovaná v FPGA, musí být koprocesor rekonfigurován na právě požadovanou operaci.

Výpočet s použitím rekonfigurovatelného koprocesoru probíhá následovně. Mikrořadič AVR obdrží ze sériového portu blok dat, s nimiž se má, s použitím koprocesoru, provést určitý výpočet. Na výpočtu a popř. rekonfigurování koprocesoru se podílejí tyto součásti platformy (viz obr. 2):

  • koprocesor pro matematické operace s pohyblivou řádovou čárkou navržený jako jádro IP (IP core, v obr. 2),
  • moduly BIOS AVR, REGFILE a SRAM ACCESS, zajišťující přenos dat mezi externí a interní pamětí,
  • systém virtuální paměti skládající se z modulu PGM MEM MGMT v BIOS AVR a VIRTUAL MEM CTRL realizovaného v FPGA,
  • systém řízení rekonfigurace skládající se z modulů RECONF MGMT v BIOS AVR a RECONF CTRL realizovaném v FPGA.

Fragment programu na obr. 4 ukazuje volání operace v koprocesoru. Nejdříve se získají data a typ operace pro ně a poté se volá sám koprocesor. První parametr ve funkci CallFPGA udává operaci, která se má provést s daty, jež jsou dána jako další parametry.

Obr. 4.

Obr. 4. Volání koprocesoru realizovaného jako rekonfigurovatelný modul v FPGA

Infrastruktura FPGA je takto pro programátora mikrořadiče AVR zcela transparentní. Jediným místem, kde se setkává s FPGA, je volání koprocesoru. Funkce CallFPGA zkontroluje, zda je FPGA nakonfigurováno na požadovanou funkci, a předá mu parametry. Protože komunikace s FPGA probíhá přes osmibitové rozhraní, musí být operandy pro matematický koprocesor děleny do tří registrů.

Závěr

V článku je popsána výpočetní platforma využívající dynamickou rekonfiguraci pro zvýšení výpočetního výkonu obvodu bez zásahu do jeho hardwarové struktury. Přidáním externí paměti bylo dosaženo větší variability a možnosti využívat jeden obvod k realizaci mnoha různých funkcí, které by běžně nebylo možné vložit do tohoto obvodu současně. Dva uvedené příklady demonstrují transparentnost hardwarové části pro programátora mikrořadičů AVR.

Navržená platforma výrazně zlepšuje užitné vlastnosti obvodu AT94K FPSLIC a spolu se systémem virtuální paměti vytváří prostředek pro vývoj aplikačních programů, který je z hlediska dynamické rekonfigurace FPGA plně transparentní a dovoluje tak vytvářet robustní řešení při minimální znalosti obvodů FPGA.

Poděkování
Tento článek vznikl za podpory grantů GAČR 102/04/2137 a EU IST-2001-34016.

Literatura:
[1] HORTA, E. L. – LOCKWOOD, J. W. – TAYLOR, D. E. – PARLOUR, D.: Dynamic hardware plugins in an FPGA with partial run-time reconfiguration. In: Proceedings of the Design Automation Conference, 2002, s. 343–348.
[2] MATOUŠEK, R. – DANĚK, M. – POHL, Z. – KADLEC, J.: Dynamic runtime partial reconfiguration in FPGA. In: ECMS2003, Liberec, 2003, s. 294–297.
[3] MATOUŠEK, R. – POHL, Z. – DANĚK, M. – KADLEC, J.: Dynamic reconfiguration of FPGAs. In: 10th International Workshop on Systems, Signals and Image Processing (IWSSIP’03), 2003, s. 288–291.
[4] FPSLIC on-chip Partial Reconfiguration of the Embedded AT40K FPGA. Atmel, 2002.
[5] AT94K Series Field Programmable System Level Integrated Circuit. Atmel, 2002.
[6] AT40K 5K to 50K Gates Coprocessor FPGA with FreeRAM. Atmel, 2002.

Martin Daněk, Petr Honzík, Jiří Kadlec, Rudolf Matoušek, Zdeněk Pohl,
Ústav teorie informace a automatizace Akademie věd ČR
(peters@utia.cas.cz)