Scienceworld.cz
PRO MOBIL
PRO MOBIL


KLASICKY
KLASICKY


Open source hardware: Budoucnost programovatelných hradlových polí

***pravidelné páteční „přetištění“ staršího článku

 

Open source software existuje už hezkou řádku let a prakticky nikdy se nad ním nepozastavuje. S rozmachem, který zažívají v posledních letech rekonfigurovatelné logické systémy, se však objevila na první pohled zvláštní analogie. Nový koncept bývá nejčastěji označován jako „open source hardware“.
Hardware se od softwaru samozřejmě v řadě podstatných ohledů liší. Nelze ho jednoduše zkopírovat, smazat nebo modifikovat, hotový čip se prostě nedá „hacknout a předrátovat“. Tak vypadají alespoň zažité představy. Rekonfigurovatelná logika – především na programovatelná hradlová pole (FPGA, Field Programmable Gate Array) a příbuzné technologie – se ale elegantně přenáší přes všechna výše uvedená tvrzení.

Základy systému

Struktura rekonfigurovatelného systému je reprezentována základními logickými prvky propojenými sítí spojů a programovatelných spínačů. Jednotlivé prvky jsou hierarchicky sdruženy do bloků, které se periodicky opakují po celé ploše FPGA. Kromě základních bloků jsou v systému obsaženy i moduly pro implementaci složitějších funkcí (násobiček, velkých pamětí, ale např. i celý procesor Power PC pro implementaci řídicích algoritmů). Funkce elementárních prvků i složitějších bloků jsou přitom – stejně jako propojovací matice – programovatelné.
Konfigurace jednotlivých prvků a spínačů popsaného systému je uložena v nejrůznějších druzích paměťových buněk. Nejtypičtější jsou systémy s konfigurací ve statické paměti (SRAM), pro jiné aplikace mohou být vhodné obvody s konfigurací v nevolatilní paměti, nebo případně i v nepřepisovatelných buňkách (propalovaných propojkách).
Obvody s konfigurací uloženou ve volatilní paměti je nutné znovu konfigurovat (personifikovat, doslova jim „vdechnout duši“) po každém připojení napájecího napětí. Potřebnou konfiguraci lze načíst buď z počítače připojeného k vývojové desce, nebo – a to je častější případ – z pevné paměti připojené k FPGA. Takové řešení je běžné u hotových aplikací. Naopak systémy postavené na nevolatilních paměťových buňkách se jednou „vypálí“ a pak už fungují pořád.

Programujeme křemík

Programovatelný obvod je tedy sám o sobě jen kus křemíku; teprve konkrétní konfigurace mu vdechne život. Situace je analogická počítači – ten je bez programového vybavení také mrtvý.
Návrh hardwaru (tedy konkrétní konfigurace součástky) lze do jisté míry přirovnat k programování. Vývoj hardwaru má samozřejmě svá specifika a je při něm nutné přihlížet mj. také k charakteru cílové součástky. Návrh také probíhá na nižší úrovni, než je tomu při implementaci softwaru. Dnes je pro něj charakteristické především použití tzv. popisu na úrovni meziregistrových přenosů (RTL, register-transfer level) a programovacího jazyka s odpovídající vyjadřovací schopností (VHDL – Very High speed integrated circuit Description Language, případně Verilog, jsou dnes asi nejrozšířenějšími z těchto jazyků).
Návrh hardwaru je také provázen nutností zajistit bezchybnou funkci hotového systému. Především je kladen důraz na důkladnou verifikaci, tedy simulaci a ověření správnosti obvodu. Ani vývojové nástroje pro FPGA nejsou zatím tak dobře dostupné, jak je běžné ve světě programování softwaru.

Návrh obvodu

Ukažme si triviální příklad návrhu obvodu na programovatelném hradlovém poli. Vytvoříme jednoduchý obvod pro měření časového intervalu od resetu systému do výskytu události na vstupním signálu.
Náš systém bude obsahovat 16bitový čítač čítající hodinové impulsy, bude mít hodinový vstup (signál clk), asynchronní reset (vstup rst), vstup indikující událost pomocí pulzu o délce jednoho hodinového cyklu (signál event) a 16bitový výstup, který indikuje naměřený čas (sběrnice pojmenovaná ctime). Popsané chování a tím i výsledný blok je samozřejmě velmi zjednodušené, avšak pro demonstrační účely postačující.
Jak tedy postupovat? Nejprve je nutno celý blok popsat pomocí syntetizovatelné podmnožiny jazyka VHDL. Všimněte si, že popis hardwaru pomocí programovacího jazyka umožňuje srozumitelný a snadno sdílitelný „zdrojový text“ na poměrně vysoké úrovni abstrakce. A právě tento popis může být volně šířen, a pokud k tomu dojde, hovoříme o open source hardwaru.
Zpět k našemu konkrétnímu případu. Zakódované chování nyní můžeme ověřit pomocí simulátoru. Dalším krokem je konverze VHDL popisu do konfiguračních dat pro programovatelné hradlové pole. Nejprve je provedena syntéza – převod VHDL na obecné a technologicky nezávislé schéma. Příklad takového schématu můžete nalézt na dalším obrázku. Schéma je pak v následujících krocích (mapování na technologii, rozmístění a propojení, generování bitového toku) převedeno přímo na konfiguraci hradlového pole. Nakonfigurované hradlové pole s naším obvodem můžeme znázornit graficky.

Simulace běhu čítače. Na rozdíl od programové procedury řízené svými vstupními a výstupními parametry je hardware řízen sekvencí logických hodnot na vstupních a výstupních bránách (portech). Na obrázku jsou znázorněny časové průběhy hodnot na těchto signálech. Na začátku krátkým pulzem na vstupním signálu „res“ inicializujeme systém. S příchodem pulzu na vstupu „event“ se hodnota vnitřního čítače „cnt“ zkopíruje do výstupního registru připojeného na sběrnici „ctime“.

Blokové schéma programovatelného hradlového pole Spartan xc2s15 (výrobce Xilinx) s rozmístěnými prvky demonstračního obvodu. Na obrázku jsou barevně označeny buňky použité naším demonstračním příkladem. Zelené jsou obsazené sčítačkou, červené obdélníčky uvnitř pole představují registry, na okraji jsou podobně vyznačeny použité vstupy a výstupy součástky. Každý čtverec plochy obvodu obsahuje stejné programovatelné logické prvky, FPGA má pravidelnou strukturu. Podél obvodu čipu jsou rozloženy buňky implementující rozhraní s vnějším světem (I/O linky).
Obrázek ve vyšším rozlišení (330 kB)

floorplan.gif


Schéma výsledného obvodu získaného syntézou zdrojového kódu. Systém obsahuje sčítačku pro přičítání jedné a dva 16bitové registry – jeden pro okamžitou hodnotu čítače a druhý pro zachycení výstupní hodnoty (registr má navíc vstup pro povolení zápisu – tzv. clock enable, CE).

Další vývoj

K čemu je to všechno dobré? Open source hardware v tuto chvíli používá úzký okruh lidí tak či onak spojených s výzkumem a vývojem v oblasti architektur počítačů, zpracování signálu či počítačových sítí.
Na webových stránkách jsou k dispozici desítky různých návrhů od jednoduché jednotky na výpočet klouzavého průměru po složité systémy – namátkou uveďme například nejrůznější mikroprocesory (8051, Z80, různé DSP CPU), jednoúčelové jednotky (FFT, makra pro číslicovou filtraci), ale i např. implementace běžných rozhraní (USB, FireWire…). Jednu z velkých aplikačních oblastí programovatelných obvodů představují např. telekomunikace. Telekomunikační systém implementovaný na rekonfigurovatelném hardwaru je schopen pružně reagovat na změny síťových protokolů pouhým načtením nové konfigurace svých komponent.
V budoucnu lze očekávat nasazení programovatelných systémů také přímo v osobních počítačích. Takové PC bude vybaveno speciálním akcelerátorem s jedním nebo více FPGA obvody. Běžící aplikace si do FPGA nahraje svůj konkrétní hardware pro urychlení specifických operací, které by se jinak prováděly aplikačním programem. Tento trend povede k dalšímu nárůstu výkonu domácích počítačů. Současně dojde k postupnému stírání rozdílů mezi psaním softwaru a návrhem hardwaru na programovatelných obvodech.
Open source hardware se nakonec stane stejně běžnou součástí našeho života, jako je dnes open source software.

Informace na internetu

Open Cores – webové stránky s návrhy open source hardwaru: http://www.opencores.org
FPGA Journal – magazín o návrhu na FPGA: http://www.fpgajournal.com
Xilinx – jeden z výrobců FPGA: http://www.xilinx.com
Volně šiřitelná verze komerčního softwaru pro návrh na FPGA (Xilinx Webpack): http://www.xilinx.com/xlnx/xebiz/designResources/ip_product_details.jsp?key=DS-ISE-WEBPACK
Další články o open source hardwaru: http://www.us.design-reuse.com/articles/article8191.html, http://lyrisoft.com/~gmp/papers/bmfosh-1.0.html

Zdrojový kód demonstračního příkladu

–Připojení potřebných knihoven (podobně jako např. v jazyce C direktiva #include).

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

–Definice vstupních a výstupních signálů, tedy rozhraní bloku s vnějším světem. Je to ekvivalentní definování parametrů procedury.

ENTITY citac IS
PORT ( res : IN std_logic;
clk : IN std_logic;
event : IN std_logic;
ctime : OUT std_logic_vector(15 DOWNTO 0));
END citac;

–Následuje popis architektury – vnitřku – bloku

ARCHITECTURE RTL OF citac IS

–vnitřní signál – udržuje stav čítače

SIGNAL cnt : std_logic_vector (15 DOWNTO 0);
BEGIN

–Implementace systému – popis vlastního algoritmu.
citac_casu : PROCESS (clk, res)
BEGIN

–Inicializace: při aktivním resetu vynuluj vnitřní stav čítače i výstup

IF res=’1′ THEN
cnt <= "0000000000000000";
ctime <= "0000000000000000";

–Jinak se podívej, zda nejsou aktivní hodiny

ELSIF clk=’1′ AND clk’EVENT THEN

–Pokud se objeví na hodinách hrana (clk’EVENT) a hodiny jsou po hraně v log 1 – detekce náběžné hrany hodin.

cnt <= cnt + 1; --aktualizuj čítač

–-Pokud je detekovaná událost na vstupu, nastav výstupní signál na okamžitou hodnotu vnitřního stavu

IF event = ‚1‘ THEN
ctime <= cnt;
END IF;
END IF;
END PROCESS citac_casu;
END RTL;

autor Jakub Šťastný


 
 
Nahoru
 
Nahoru