Snad každý homo sapiens technicus se (ať už ve škole, nebo v praxi) dříve či později setká s logickými obvody. Co víc, občas si nějaký ten logický obvod potřebuje sám navrhnout a odsimulovat. Od kolegů, resp, kantorů, se ale většinou dozví jen o proprietárním a ne zrovna levném softwaru pro tento účel použitelném. Pokud se vás to také týká, nezoufejte. Nemusíte rozbíjet prasátko, abyste měli na nákup licence, dokonce se (na 95 %) obejdete i bez instalace dalšího operačního systém na svého křemíkového miláčka. Vyzkoušejte TkGate. Tento program je uvolněn pod licencí GPL zcela zdarma a spustíte ho na většině běžně dostupných OS.
Tk… co, prosím?
TkGate je grafický editor a simulátor logických obvodů napsaný z velké části v jazyce C s uživatelským rozhraním vytvořeným pomocí Tcl/Tk. Začal ho vyvíjet už v roce 1987 Američan Jeff P. Hansen, původně jako svoji semestrální práci. V jeho vývoji zdárně pokračuje dodnes, aktuální stabilní verze nese číslo 1.8.5 a do konce roku bychom se mohli dočkat verze 2.0, která přinese rozsáhlejší změny. TkGate běží na řadě operačních systémů, počínaje FreeBSD (pro který byl původně navržen) přes Linux, Solaris, až po Mac OS X. Zkrátka nepřijdou ani uživatelé Windows – můžou ho spustit v Cygwinu. Dobrou zprávou pro čtenáře root.cz je, že od verze 1.8.5 už na Vás TkGate mluví kompletně česky. A co vlastně tento software všechno umí? To se dozvíte v tomto článku. Nejdřív se ale podíváme na to, jak TkGate nainstalovat
Instaluji, instaluješ…
Na úvod potěším (líné) debianisty: stačí napsat apt-get install tkgate a předposlední verze TkGate (1.8.4) máte za chvíli doma (platí pro Debian unstable). Majitele “rpmkových” distribucí potěším už méně: na oficiálních mirrorech (rpmseek.com) najdete jenom starou verzi 1.6i, která postrádá některé důležité maličkosti, jako např. undo/redo :-) My ostatní, co nám staré verze nestačí, nebo vlastníme jiný operační systém, budeme instalovat ze zdrojového kódu.
Ještě předtím, než stáhneme balík se zdrojáky, je dobré přesvědčit se, zda máme nainstalované knihovny Tcl a Tk (ve verzi 8.0 a vyšší) včetně příslušných hlavičkových souborů (balíky se jmenují tcl8.x-dev, tk8.x-dev resp. -devel).
Rozbalíme:
tar -xzvf tkgate-1.8.5.tgz
Přesuneme se do nově vytvořeného adresáře:
cd tkgate-1.8.5
A spustíme konfigurační skript:
./configure
Ten bohužel není moc sdílný, a pokud některou z požadovaných knihoven nenajde, dozvíme se akorát:
ERROR: ./configure If you get this message it may be because a required component such as Tcl8.0, Tk8.0 or X11 was missing or could not be found. See the section on 'NON STANDARD TCL/TK LOCATIONS' in the README file for more information
Tato chyba se může objevit i v případě, že všechny požadované komponenty na svém systému máme, ale jsou umístěny na nestandardním místě. V tom případě je nutno editovat soubor config.h ve stejném adresáři a přidat příslušné adresáře k TKGATE_INCDIRS a TKGATE_LIBDIRS. Pozor na další, mnohem hůř odhalitelnou chybu. Některé distribuce Linuxu“nasypou” hlavičkové soubory k Tcl i Tk do jednoho adresáře (zpravidla do /usr/include/tcl8.x), konfigurační skript ale požaduje i existenci adresáře /usr/include/tk8.x. Pak jednoduše vytvoříme adresář s tímto jménem jako symbolický link na /usr/include/tcl8.x :-)
Máme skoro hotovo. Už jen:
make install make install.man
a je to. Spustíme čerstvě přeložený, novotou vonící TkGate, a pokud chceme, aby s námi komunikoval česky, přidáme mu parametr
tkgate -L cs &
(nebo můžeme alternativně nastavit proměnnou prostředí LANG na cs_CZ)
Základní rychlokurs
Typické okno aplikace TkGate v základním editovacím režimu vidíme na obrázku níže
Nyní můžeme vkládat do schématu nové prvky všeho druhu: od základních hradel a spínačů přes LED displeje a obvody vyšší škály integrace jako multiplexory, sčítačky, paměti až po “lahůdky” typu terminál, a propojovat součástky pomocí vodičů. Editovací režim má kromě této základní ještě více variant, mezi kterými je možno přepínat: lze například zapnout “stříhací” režim, kdy lze pouze přerušovat vodiče, nebo “invertovací” režim, kdy se dají přidávat k existujícím hradlům invertory.
Rozmístění součástek na schématu lze pohodlně měnit stylem “drag and drop”. Příjemnou vlastností je, že při těchto úpravách se vodiče v okolí přetahovaného hradla dokážou inteligentně uspořádat tak, že se zruší resp. přidají potřebné segmenty, nebo se změní jejich seskupení kolem větvení. Kliknutím pravým tlačítkem na kterýkoliv z prvků obvodu lze upravovat jeho vlastnosti. U hradel lze zvolit výrobní technologii (CMOS, TTL), na níž závisí zpoždění, přidávat vstupní nebo výstupní konektory, u pamětí se tímto způsobem dá nahrát její obsah z externího souboru, u vodičů je možné přizpůsobit jejich bitovou šířku. Všechny tyto úpravy můžeme provádět nejen jednotlivě, ale i na skupinách prvků.
Moduly aneb víceúrovňový design rulezz
Hlavně u složitějších logických obvodů je často požadováno, aby měly hierarchickou strukturu. Jindy se zase v celém obvodu některý z bloků často opakuje a bylo by pracné kreslit ho pokaždé znovu. Pro tyto případy má TkGate připravený koncept modulů. Ukážeme si je na jednoduchém příkladu klopného obvod typu J-K. Ten v TkGate mezi předdefinovanými součástkami není, ale v praxi se často používá a jeho strukturu najdeme v každé učebnici s touto tematikou.
Z nabídky “Přidat” vybereme “Instanci Modulu”. Vzniklou (zatím) černou skříňku vhodně pojmenujeme (třeba JK :-) ) a přidáme příslušný počet a druh konektorů. Jak na to, ukazuje obrázek:
Nyní se můžeme (buď výběrem příslušného modulu ze seznamu, nebo klávesovou zkratkou “>”) přesunout dovnitř právě vytvořeného modulu a navrhnout již známým postupem v editovacím režimu jeho vnitřní část. V případě klopného obvodu J-K bude vypadat následovně:
Poznámka: Aby byly vnitřní a vnější část modulu propojeny, vstupní a výstupní vodiče ve schématu na obrázku musí být definovány jako vstupy a výstupy modulu (Menu Přidat → Modul → Vstup (Výstup) modulu)
Pokud chceme, aby se všechny nově vytvořené moduly, které mají plnit stejnou funkci, chovaly a vypadaly stejně, je nutno právě vytvořenou implementaci modulu zadefinovat jako “standard”. Toho dosáhneme výběrem položky “Nastavit rozhraní” z menu “Modul”. Nyní bude každá nová instance modulu, kterou vytvoříme (musíme jí samozřejmě dát stejný název), přesnou kopií původního modulu.
Téměř dokonalá ukázka využití modulů a hierarchického designu je přibalena k TkGate jako jeden z příkladů. Představuje jednoduchý mikroprocesor, který s uživatelem interaktivně hraje hru “Animals” (tj. hádej-jaké-zvíře-si-myslím)
Jak ten krám funguje aneb začínáme se simulací
Předtím, než součástky připájíme na plošný spoj, je užitečné zjistit, zda se námi navržený obvod chová slušně, netropí hlouposti a vůbec, zda dělá, co se po něm chce. Simulovat lze samozřejmě i chování kombinačních obvodů, ale jelikož změny v nich probíhají pomalu a “staticky”, nebudeme si jich dále všímat a podíváme se na jednoduchou simulaci sekvenčního obvodu.
Simulaci spustíme buď výběrem příslušné položky z menu, nebo kliknutím na tlačítko simulace v panelu nástrojů. Objeví se prázdné okno, které můžeme postupně zaplnit “stopami”. Každá stopa patří jedné ze sond, které umístíme na žádaná místa v obvodu dvojitým kliknutím na daný vodič, a v průběhu simulace zobrazuje, jak se mění jeho logická hodnota. Jak to vypadá, si můžete prohlédnout na obrázku:
Simulaci můžeme nechat běžet nepřetržitě, ale častokrát je lepší si ji “odkrokovat”. Posunovat dopředu se lze o pevně stanovený počet jednotek času, hodinových cyklů, TkGate dokonce podporuje nastavení jednoduchých breakpointů (které známe z debuggerů), tj. simulace se zastaví ve chvíli, kdy zvolená proměnná nabývá určité hodnoty.
Během simulace můžeme samozřejmě libovolně manipulovat například se spínači v hlavním okně, nebo si prohlížet, jakých hodnot nabývají jednotlivé vodiče (a to jak hexadecimálně, tak binárně). Velmi realisticky se během simulace chovají LED diody a displeje, které se zhasínají a rozsvěcují tak, aby ukazovaly aktuální hodnotu.
Závěr… a co dál?
Pokud jsem ve vás vzbudila alespoň trošku zvědavosti a přemýšlíte nad tím, zda si TkGate nainstalovat a vyzkoušet, je to dobře. Pokud jste o tomto programu dosud netušili a zaujal vás natolik, že jej použijete ve škole, nebo v práci, je to ještě lépe. Co dodat na závěr?
Nesmím zapomenout na to, že z TkGate můžete i tisknout (na tiskárnu i do .ps souboru), a to jak schémata, tak výstup simulace (ke každému výkresu je přidáno i hezké popisové pole). No a o tom, jak si zadefinovat vlastní technologii hradel, jak rozběhnout simulaci pomocí skriptu, jak analyzovat citlivou cestu v obvodu, nebo o jednoduchém překladači mikrokódu gmac, který TkGate také obsahuje, si řekneme něco někdy příště. Určitě si prohlédněte domovskou stránku projektu (www.tkgate.org), kde najdete spoustu dokumentace na čtení během dlouhých zimních večerů :-)