Programujeme logiku…

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ě.

Líbil se vám článek? Podpořte autora na Patreonu
Příspěvek byl publikován v rubrice Hardware se štítky , . Můžete si uložit jeho odkaz mezi své oblíbené záložky.
  • Bystroushaak

    Cool.

    Je nějaké prostředí pro programování FPGA pod linuxem?

  • Martin Hubáček

    Používám Lattice Diamond na winech, ale mají i Linux verzi.

  • Třeba to, co používám já, tedy Quartus pro Alteru, to má linuxovou verzi, Xilinx ISE taky… Mohl bych to tam dopsat, díky!

  • Xilinxí ISE jsem kdysi používal ve škole na windows a myslím, že příště radši drátem do oka. Na Quartus se někdy podívám, díky za tip.

  • VELESOFT

    Koukal jsem se na kit EP2C5T144 a ve schematu je zakreslena pamet sram 256k x 16 bitu. Na desce ale zadna neni. Je to matouci…

  • Pravda, blbé schéma. Upravil jsem ho, díky moc za upozornění.

  • VELESOFT

    stejne chybne schema jsem ale stahl i jinde z webu. Proste se to tak rozsirilo. Patral jsem po jinych kitech a u tech levnejsich nikdy neni na desce sram + vga konektor. Pritom by stacila mala deska jako EP2C5T144, akorat protazena o nejaky ten centimetr a vedle pinove listy vyvest alespon piny na osazeni potrebnych konektoru. Plosnak by stale vysel na 50 Kc a urcite by to stalo za to. Nic podobneho jsem ale v rozumne cene nenasel. Pritom SRAM a konektory jsou jen radove desetikoruny.

  • Naprosto souhlasím. SRAM a VGA je na kitech, co jsou klidně dvojnásobně drahé. Ale zase na druhou stranu – malá série takových doplňkových destiček, to by někdo šikovný a ochotný jistě zvládnul… 😉 Ale jinak je to opravdu škoda, že zrovna tohle oželeli. Budu pátrat dál, a kdyby se něco objevilo…

  • VELESOFT

    Take nefunguje odkaz na stranky Granta Searla

  • (Díky, opraveno…)

  • James Moxham udelal celkem peknou rozsirujici desku. Resp. je to uz nekolikata iterace. Mrkni na http://smarthome.jigsy.com/fpga

  • Pěkné, pěkné, něco takového si dělám taky, jen v několika menších kusech 🙂

  • Martˇa Staník

    Zrovna nedávno vycházel na Ábíčku seriál o FPGA – http://www.abclinuxu.cz/blog/digital_design – asi znáte. Existuje i pár knih v češtině. Taky jednu mám čistě ze zvědavosti. Možná v tom třeba časem i něco udělám. Můj problém je, že sem takovej „načínač“, něco mě zaujme, ale nedokážu u toho moc vydržet. S tím bojuju celej život. Když už nic jiného, aspoň si počtu.

    http://shop.ben.cz/cz/121736-cislicove-systemy-a-jazyk-vhdl.aspx
    http://shop.ben.cz/cz/121316-fpga-prakticky.aspx

    „…během tejdne jsem si ve volném čase prostudoval několik knih o VHDL a návrhu obvodů,…“ Teď už aspoň chápu, proč mi škola nikdy nešla 🙁

  • Ne, seriál na ABC Linuxu fakt neznám. O knihách v češtině vím, bohužel mi přišly jako klasické české technické knížky: nezáživné, suché, zdeúřední… Rozhodně jsem z nich neměl pocit, že bych si to chtěl rád vyzkoušet, spíš že to je neskutečná suchařina. Asi jako když knížky o programování mikroprocesorů x86 začínaly instrukcí AAA, protože je první v abecedě. Vůbec mi připadá, že tady nevznikají dobré technické učebnice, co by začaly „Hello world“ a pak šly krok za krokem a postupně rozvíjely znalosti, ale píše se tu jak za Rakouska-Uherska: nejdřív suma teoretických vědomostí, a na úplném konci troška praxe. Ale to je na jinou debatu.

  • VELESOFT

    Ještě k tomu schematu kitu EP2C5T144. Asi tam těch chyb bude více. Jen po krátké kontrole jsem zjistil, že na pinové liště „P4“ jsou ve schematu prohozené signály „PIN17“ a „PIN18“. Plošňák je má obráceně a potisky také. Dále na desce chybí u pinové lišty „P3“ potisk pro pin 25, kde by mělo být „144“. Podle potisku to pak působí jako že jsou oba piny GND. Ale zapojené je to správně. Dále kondenzátor C14 je ve schematu zakreslený jako TANTAL 22uF, ale to není pravda. Je tam obyčejný malý keramický kondík a hodnota bude určitě úplně jiná. V ověřování schématu budu ještě pokračovat… Uvidíme co z toho vyleze.

  • Dobrá práce, díky. Můžu to schéma hodit sem na server s obligátním „autor: VELESOFT“?

  • VELESOFT

    Ano, klidne to hod i sem.

  • VELESOFT

    Klidne pustim i data pro Eagle, tak bys je tam mohl prihodit.

  • Jasný. Když je pustíš, tak přihodím, dík

  • VELESOFT
  • VELESOFT

    Nejaktualnejsi data pro Eagle mam zde: http://velesoft.speccy.cz/other/ep2c5t144_board.zip
    Schema je nezmenene, ale deska ma vyrovnane otvory pro srouby a vylepsene potisky.

  • Díky, šoupnul jsem to tam.

  • Michal Tomsu

    trochu s krizkem po funuse ale doporucuji na strankach FPGA.cz zminit vynikajici kity OpalKelly. Pravda i ten nejlevnejsi z nich vyjde uz na $175 + postovne (https://www.opalkelly.com/products/xem6001/), ale ty moznosti! Pripojit svuj VHDL design pres USB k PC a krmit ho high-speed daty (stimovat) a divat se jestli funguje dobre (nacist zase pres USB vysledky a udelat komparaci s tim co spocital overovaci algoritmus napr. v Pythonu na PC). Proste parada, kdo uz zvladl zacatky, tak nad timto zaplesa nadsenim.