Dr. Divnočip, aneb Jak jsem se naučil nedělat si starosti a mít rád FPGA.

To bylo v dobách, kdy jsem ještě nevěděl, že diskusním fórům, plným opravdových odborníků, je lepší se vyhnout. Někdy poradí dobře, o tom žádná, ale pokud se někdo ptá trošku jinak nebo pokud přistupuje k věcem tak, jak oni nejsou z praxe zvyklí, tak jsou často velmi nepříjemní, leckdy až vulgární. A často to jsou stesky na úrovni mojí babičky, které se taky nelíbilo, že „ty dnešní mladý holky by nejradši jen strčily prádlo do automatický pračky a vytáhly ho vypraný a vyždímaný“, což považovala za symbol úpadku doby a mravů, protože pořádná ženská přeci pere a ždímá a stráví u toho celé sobotní dopoledne.

Těch keců, když jsem si jednou v jednom takovém „obecný pokec o elektronice“ dovolil povzdychnout, že by se mi líbila malá frézka na plošné spoje, ale že pro domácí použití to je hrozně drahé… Těch keců, když jsem se zeptal, jestli si můžu u domácího plošňáku nějak nahradit prokovy! Jojo, všichni opravdoví odborníci, pracovali v různých elektrofirmách, tak co by brali vážně nějakého bastliče!

No a jednou se v takovém diskusním fóru objevil mladý nadšenec. Nejprve se, jak etiketa ve fórech plných opravdových odborníků velí, všem poníženě omluvil za svůj úplně pitomý dotaz, a pak napsal, že má od mládí sen, totiž navrhnout si vlastní mikroprocesor. A jestli tedy pánové nevědí, jak na to?

Pokud znáte mentalitu těchto fór, tak víte, co následovalo. Pokud ne, tak vám to prozradím: „To potřebuješ do nějakého zapojení? Tak takové bych nekoupil!“ – „Na co vlastní CPU?! Takový nesmysl! Kdyby ses, mladej, radši pořádně naučil AVR!“ – „Ne, PIC!“ – „Ne, ARM!“ – „Ne, MSP430!“ – „Ne, 86!“ – „Idiote, co tu doporučuješ 86?!“ 

Děkujeme za odpovědi.

Dlouho se nic nedělo a asi po půl roce přišel do toho vlákna člověk, který napsal, že ten nápad mu nepřijde, na rozdíl od kolegů otporníků, vůbec hloupý. Že sice navrhovat vlastní CPU a doufat, že se komerčně uchytí, je opravdu nesmysl, ale na druhou stranu že tuhle touhu chápe, a že ví, že se při takovém mentálním cvičení člověk naučí spoustu věcí o elektronice (asi jako při psaní vlastního programovacího jazyka a překladače pro něj, dodávám já). A že cest je několik, a jedna z nich je naučit se VHDL nebo Verilog, napsat si svoje CPU v něm a vypálit do FPGA.

Nevím, jestli si původní tazatel tuhle odpověď přečetl, nebo jestli se dnes smutně věnuje nějaké klidné činnosti a svůj mladický sen tiše pohřbil. Každopádně já si to zapamatoval a začal jsem (bylo to někdy okolo roku 2005) hledat, jak bych se dozvěděl víc. Postupně jsem si spájel programátor GALů, zkusil si naprogramovat je, pak jsem poexperimentoval s CPLD od Xilinxu, jenže pak na to postupně nebyla nálada, čas, peníze nebo sicflajš, zkrátka jsem si to tak jako odložil „na někdy“. Čas od času jsem vytáhl kit od Avnetu, zkusil si něco naprogramovat, zjistil jsem, že to je spíš utrpení než cokoli jiného, navíc to ISE od Xilinxu, kdo jste to kdy tahal a používal, tak mi dáte zapravdu…

Plynuly roky.

Pak jsem objevil zapojení Granta Searla a jeho Multicomp. To je vám totiž taková stavebnice, kde si vyberete procesor, periferie, a poskládáte si osmibit, jaký se vám líbí, a v té úplně minimální variantě k tomu nemusíte připojovat vůbec nic, stačí jen převodník RS-232 / USB, a v terminálu uvidíte vlastní počítač s BASICem! Na nepájivém poli jsem měl zrovna rozposkládané nějaké zapojení s 6809, všude z toho trčely drátky, a tak jsem si říkal, že by mě to vlastně bavilo.

Nemám retroducha. Kdybych ho měl, tak si poskládám vlastní CPU z TTL 74xx (a klobouk dolů před těmi, co to udělali) a tam, kde je napsáno „6502“, tam bude 40pinový šváb. Jenže já jsem takový barbar, a místo osmi 64Kbit DRAM, co jsou brutál retro, dám 64KB SRAM, a vůbec z toho nemám těžkou hlavu. Takže místo toho, abych sháněl třeba TMS9929 (což je TMS9918 ve verzi pro PAL) a navrhoval zapojení a leptal pro to plošňák, tak si to klidně seskládám do FPGA, neboť radost z práce s novým osmibitem = (1-a) * radost z toho, že to funguje + a * radost z toho, že to je poskládané ze součástek z 80. let. Přičemž parametr a se u různých lidí liší. U mne je někde okolo 0.01, u lidí, co jsou ochotni připustit GAL v nové konstrukci to bývá tak okolo 0.5…

Ale zpátky k původnímu tématu: Okouzlily mě možnosti FPGA, od Granta jsem si nechal doporučit vhodný kit, zjistil jsem, že je za pár korun a programátor taky, pak jsem si s tím pohrál, a ono to fakt fungovalo… Ou kej, pak přišly jiné starosti a radosti, jako třeba assembler ASM80.com a práce a tak, ale furt v hlavě vrtalo… V mezičase jsem našel stránky pana ZZ, který si taky z FPGA skládá všechno možné, tak jsem si říkal, že bych se měl to VHDL už fakt doučit, a znáte to, šlo to tak jako jo, ne, jo, ne, furt jako by chyběla motivace a spouštěč, a pak jednoho dne…

Jednoho dne jsem meditoval nad generováním videosignálu z procesoru. Nalomilo mě zkoumání COSMAC ELFa a jeho videoobvodů, spojilo se to s neustálým opakováním Pavla Tišnovského, jak by bylo fajn zkusit dneska navrhnout videořadič, kde by nebyla bitmapa (třeba v tomto článku o konzoli 2600), ale něco jako TIA a vhodným časováním by se generoval řádek po řádku, zkoumal jsem generování obrazu u ZX80, přitom jsem se tak jako po očku koukal na ten kit, pak mě napadlo podívat se, jak by se generoval videosignál VGA (protože sehnat VGA monitor je snazší a levnější, než sehnat přijatelnou barevnou televizi s videovstupem), objevil jsem tutoriál, jak vytvořit VGA signál ve VHDL, koukal jsem se na to s neskutečným nadšením, protože to bylo fakt jednoduchý, ale jako FAKT JEDNODUCHÝ, a pak se to spustilo!

Fakt, nekecám, během tejdne jsem si ve volném čase prostudoval několik knih o VHDL a návrhu obvodů, konečně mi to celé začalo zapadat do sebe, dívám se na cizí kód a už mu rozumím, píšu vlastní kód a syntetizér to překládá napoprvé, a mám z toho fakt radost, protože to je zase po čase něco, co funguje.

Při učení čehokoliv se mi osvědčilo snažit se to, co jsem se naučil, vysvětlit někomu jinému. Ať už to byl pes, manželka, imaginární posluchač, virtuální posluchač, nebo skuteční studenti. Když se člověk snaží učit, tak při přípravě sám sobě klade otázky, které ho posunou dál. Nestačí studentovi říct „takhle to je“. Člověk se zamyslí a přemýšlí: Proč to tak je? Jak to udělat jinak? Proč to takhle jde a takhle ne? Navíc člověku naučené snáz přejde do krve.

Třeba takový strojak.cz (pokud neznáte, tak je to kurz assembleru pro osmibity) vznikl v trošku jiné situaci – já assembler znám někdy od poloviny 80. let, takže tam jsem to víceméně dával spatra, ale taky jsem si některé věci osvěžil.

U VHDL jsem si říkal, že bych o tom mohl napsat sem, ale pak jsem objevil, že je volná doména vhdl.cz. A volná byla i fpga.cz! Tak dlouho jsem váhal, kterou z nich vzít, až jsem vzal obě, a připravil tam takový úvod pro lidi, co jsou v podobné situaci jako já, totiž doma si šmrdlají něco s elektronikou a rádi by do toho zapojili FPGA, jenže nevědí, kde začít, na fórech se bojí zeptat (a leckdy oprávněně, viz historka na začátku), ale hrozně je to láká.

Takže jsem na fpga.cz dal takový přehled toho, co člověk potřebuje, když chce začít s FPGA pracovat. Jsou tam nějaké popisy kitů s low end FPGA Cyclone a Spartan, je tam popsáno, co budete potřebovat pro programování, jsou tam odkazy na to, kde to koupit (eBay je váš přítel!), popis toho, jak začít, co stáhnout, jak nainstalovat, jak si „nakreslit“ zapojení… A snažil jsem se vybrat takové kity a programátory, aby se člověk vešel do tisícovky. Jako jo, seženete kity za čtyři tisíce, ale pro ten úplný začátek je to trošku overkill, neboli hezky česky přestřelené. Rovnou říkám, že pokud tam někdo přijde hledat novinky a __informace ze světa FPGA, tak je na špatné adrese… O Stratixech se tam nedozví nic.

No a na vhdl.cz jsem sepsal takový úvodní kurz VHDL stylem „učte se se mnou“. Popisuju VHDL a věnuju se věcem, které mi v něm, coby člověku, zvyklému na programování, dělaly problém. Naopak přeskakuju věci, co jsou programátorům zřejmé – nebudu vysvětlovat, co jsou celočíselné typy, prostě očekávám, že tohle čtenář ví. Na rovinu ale přiznávám, že nejsem VHDL guru, jsem tak někde lehce pokročilý. _Navíc vím, že se někde spletu a někde na to jdu prostě _blbě a nebojím se to přiznat. Ale pokud nejste Opravdoví Odborníci a nehodláte mě kamenovat za to, že vykládám i o tom, kde jsem se spálil, a chcete si doma jako já bastlit s FPGA, jste vítáni na obou mých webech! Snad vám informace k něčemu budou.

PS: Na VHDL.cz stále pokračuju s novými články… V nejbližších dnech přijdou stavové automaty, a taky si dáme generování toho VGA signálu.

PPS: „Možná by bylo zajímavé podobný grafický subsystém vytvořit s využitím soudobých komponent, protože dnešní mikroprocesory mají více než dostatečný výpočetní výkon pro programovou tvorbu grafiky a dobře navržený systém přerušení by mohl zajistit potřebnou kooperaci mezi podprogramem určeným pro vykreslování a zbylými aplikacemi…píše Pavel Tišnovský, a já mu tímto neděkuju za brouka v hlavě.