základní
zapojení

Jak na GALPOLE GAL16V8


ZPĚT




Jak funguje GALPOLE GAL16V8

Co je to GAL pole...
Generic Array Logic
Je to speciálně postavená logika s možností programování,
pomocí níž si postavíte vámi požadované logické funkce.
Nelze to brát jako program v procesoru, spíš je to jako vytváření logické struktury
pomocí propojek a modifikace signálu od vstupu k výstupu.
GAL16V8
Integrovaný obvod GAL16V8 má na levé straně 8 vstupů I,
dále pak speciální vstup I/CLK, který může být použit jako další normální vstup I
nebo jako hodinový vstup CLK (clock), který může řídit zápis do klopných obvodů.

Na pravé straně obrázku je pak 8 výstupů I/O/Q,
které mohou být naprogramovány jako další vstupy I,
nebo prosté výstupy logické operace O
nebo jak výstupy klopných obvodů Q.
Na levé straně obrázku dole je ještě jeden speciální vstup I//OE,
který může být použit jako další vstup I
nebo jako uvolnění pro přivedení stavu klopného obvodu na výstup /OE (Output Enable).
Výsledek logické operace, nebo stav klopného obvodu může být navíc
opět použit jako vstup do dalších logických operací uvnitř tohoto GAL pole.


GAL16V8
Uvnitř Gal pole je sestava 32+1 vstupových ANDů.
Do každého ANDu, tedy rozuměj logického násobení, vstupují mimo jiné i stavy vstupů I1 až I8.

Pokud vstupy ANDu nejsou naprogramovány, funguje to podobně jako AND z logiky TTL,
tedy tak, jako by na vstupech byly log.1, což znamená, že pokud nic nenaprogramujete, je na výstupu jednoho ANDu log.1.
Jelikož schematická značka ANDu s 32 + 1 vstupem je příliš velká,
byla použita schematická zkratka, kterou vidíte ve spodní straně obrázku, zkuste ji přijmout.
Pod touto zkratkou schematické značky vidíte zápis jedniček, které říkají, že není nic naprogramováno.


GAL16V8
Pokud AND nebudete používat, bude na jeho výstupu log.1.
Budete-li ale chtít,aby na výstupu vybraného ANDu byla log.0,
pak je zde k dispozici právě 33. vstup, na němž je nastavena log.0.

Tento 33. vstup je interní a je pojmenován PTD,
pokud tedy naprogramujeme propojku u tohoto vstupu, log. součin na výstupu bude vždy log.0.
Naprogramování propojky se dělá pomocí 0, nenaprogramovaná propojka je pak zapsaná jako 1.
Zkuste porovnat oba schematické nákresy a přijmout to.


GAL16V8
Pokud do ANDu připrogramujete pomocí dvou dalších propojek (tedy dvou 0) dva vstupy I1 a I2,
bude výsledek ještě pořád vždy log.0, protože tomu brání připojená log.0 na PTD... (product term disable)

Dá se to popsat i takto, že výstup Y = I1 * I2 * log.0
Tedy cokoli násobeno log.0 se rovná log.0


GAL16V8
V následujícím obrázku je odstraněna propojka na připojení log.0 na 33.vstupu (PTD)
Tím už tento AND není blokován a může normálně fungovat.

Výstup na tomto ANDu je nyní Y = I1 * I2
Podívejte se dobře na zápisy jedniček a nul v obrázku a zkuste to příjmout.

Užití všech PTD je programováno na jiných adresách než 32 vstupů do každého ANDu.
Jen to ještě jednou zopakuji, že pokud naprogramujete PTD pro daný AND 0, bude AND pořád jen v log.0.

Pokud PTD naprogramujete pro daný AND jako 1, můžete na něm tvořit funkci,
ale když do AND v tomto stavu nic nenaprogramujete (tedy jen samé jedničky) bude AND pořád jen v log.1


GAL16V8
V Galpoli je princip stavění logických funkcí založen
na logickém součtu OR z maximálně 8 výsledků z ANDů (lezeme pořád jen po broučkovi GAL16V8).

Všimněte si v obrázku, že výsledek Q1 vystupuje z OR (log. součtu) s osmi vstupy.
Na každém z osmi vstupů OR je navěšen výsledek z jednoho výše popsaného ANDu.
Když se podíváme na připojení jednotlivých přímých externích vstupů I1 až I8, vidíte,
že každý ze vstupů je do matice (pole) vstupů ANDů napojen jak přímo, tak i v negovaném stavu...

Zkuste přijmout, že každý signál zavedený do matice ANDů je veden maticí po dvou drátech, linkách..
Ta vlevo z dvojice je přímá a ta levá z dvojice je negovaná.
Ještě se k tomu vrátím níž, kdy to může být jinak.


GAL16V8
Pokud tedy chceme řešit například operaci Q1 = (I1 * I2) + (/I1 * /I2)
vypadalo by to asi nějak takhle:
V prvním ANDu by se vyřešil první součin Y1 = I1 * I2
V druhém ANDu by se vyřešil druhý součin Y2 = /I1 * /I2
Ve třetím až osmém ANDu, tedy v nevyužitých ANDech, nastavíte pro PTD propojku pomocí 0,
čímž nevyužité ANDy nastavíte do log.0.
Chvilku na to koukejte, má to logiku...


GAL16V8
Nyní se díváme na celkové řešení jednoho výstupu, a takovýchto výstupů je třeba v GAL16V8 osm.

Pokračujeme dál, bó ani výstup z logického členu OR nebyla konečná.
Za výstupem z logického členu OR následuje průchod výsledku přes logický člen XOR.

Nastavíte-li u XOR log.1,
pak pro daný výstup (např. Q1) zůstává výsledek stejný jako na výstupu z OR (k tomu se ještě jednou vrátíme).

Funkce XOR s nastavenou log.0
znamená pro daný výstup (např. Q1) negovaný stav oproti výstupu z OR.

Může se vám teď trochu zdát, že funkce XOR reaguje jakoby obráceně,
ale za touto funkcí následuje negace na následujícím hradle(nebo klopném obvodu) !!!

Funkce XOR je fajn, pokud řešíte nějakou logickou operaci, jejíž řešení vychází negovaně jednodušeji
anebo pokud chcete mít aktivní výstup v nule, např. pro spínání ledek,
neboť GAL16V8 spíná k zemi větší proud (20mA) než k plusu(2mA).
Při spojení GAL16V8 s procesorem tuto negaci výstupu také oceníte,
bó spousta vstupů u procesorů je aktivní právě pomocí log.0.

Uvolnění výsledku operace na výstup (např Q1) umožňuje funkce AC1 nastavená do stavu log.1
a jak už jsme se zmínili výše, uvolnění výsledku na výstup přináší zároveň i druhou negaci,
která se v tomto módu spojuje s členem XOR.
Nyní je tedy AC1 pro tento výstup naprogramován do log.1, výsledek jde přímo na výstup Q1,
a zároveň jde tento výsledek zpět do matice vstupů pro ANDy jako mezivýsledek nebo zpětná vazba.


GAL16V8
Pokud v tomto módu naprogramujete pro tento výstup AC1 log.0,
pak v podstatě odpojíte výsledek (Q1) od světa (vysoká impedance)
a není teda smyslné pro tento výstup cokoliv dále řešit, neboť výstup se změní na další vstup.
Místo zpětné vazby z výstupu zpět do matice ANDů tedy může přicházet k ANDům informace z dalšího vstupu.


GAL16V8
Ještě jednou se vracím k logice negování výsledku výstupu pomocí členu XOR (tedy česky - výhradním nebo)
(Jen pro oživení, výstup na XOR je log.1, když je na vstupech rozdílno, tedy na jednom vstupu log.1 a na druhém log.0)

Pak tedy pokud naprogramujeme pro vybraný výstup Q jemu náležející XOR s log.1, funguje sice jako invertor,
ale druhý invertor na následujícím hradle také neguje, čili výsledek je bez negace.


GAL16V8
Následující obrázek ukazuje, když je na XOR naprogramována log.0,
pak totiž XOR funguje jen jako průchozí beze změny,
pokud bych ho ve spodním náznaku vynechal, aby to bylo čitelnější,
vypadalo by to takhle, tedy výsledek na výstup z negací.

Je tedy jednoznačně dané pro galpole, log.0 u XOR znamená pro výstup Q negaci.

A než se pustíme dál taková malá záludnost, na kterou dát pozor.
Použijete-li negaci pro výstup, dejte si pozor na to,
pokud takovýto signál použijete do zpětné vazby nebo mezivýpočtu.
Takto zavedený signál zpátky do matice ANDů je také negován.

A tady se vrátím k tomu, že v matici ANDů je signál vždy na dvojici sousedních drátů..
Přímý signál vpravo a negovaný vlevo..
Použijete-li negaci pomocí XOR, a využijete-li tento zpětný signál z výstupu zpět v matici ANDů,
může být toto pravidlo pro tento signál obráceně !!!


MÓD SIMPLY

GAL16V8
Celé galpole jde rozdělit na dvě části, na část matice vstupů ANDů,
a pak na část výstupních buněk zvaných jako OLMC (output logic macrocell).

K výstupní buňce patří součtový člen OR, tak jak jsme se o něm již bavili,
s vloženým XOR i s výstupním uvolňovacím hradlem
a v posledním i s klopným obvodem, ke kterému se ještě dostaneme.

V každé výstupní buňce lze nastavit XOR
a nějakým způsobem i AC1, což je ovládání hradla.

Ale jsou zde ještě dva bity, které mění vzhled a vlastnosti všech výstupních buněk,
ovládání výstupů i změnu využití některých ANDů i vlastnosti některých speciálních vstupů.
Ty dva bity se také programují.
První z nich je SYN a druhý je AC0
Nelekejte se, na vše se podíváme a pochopíte.

Naprogramováním těchto dvou bitů lze vytvořit tři módy struktury celého galpole.

První možný mód je nazván jako jednoduchý (SIMPLY).
Je pro něj SYN = 1 a AC0 = 0
Do teď jsme se pořád pohybovali v popise výš, jako by existoval jen tento mód.
Takže jedná se o obyčejnou logiku s osmi ANDy do OR a na výstup.

Při volbě módů se vždy objeví nějaké omezení oproti módům dalším.

V jednoduchém módu (SIMPLY) je třeba omezení pro výstupy na pinech 15 a 16,
a to omezení takové, že nelze výsledky těchto výstupů použít jako zpětnou vazbu do matice ANDů
a zároveň tyto piny nelze použít jako prosté vstupy.
Ale v následujícím obrázku pochopíte.


GAL16V8
Můžete se podívat na celou strukturu GAL16V8 právě pro SIMPLY mód (nastaveno pomocí Syn=1 AC0=0)
Výstupní buňky (OLMC) pro tento mód nastavení jste si prohlédli výše,
ale teď se můžete podívat a znovu si upamatovat,
ža každá buňka má své nastavení XOR a AC1
a v tomto zobrazení jsou vyobrazeny už i adresy jednotlivých programovacích bitů.
Najdete zde adresy i pro jednotlivé řádky vstupů do ANDů i adresy pro všechny PTD.
Jsou zde (vpravo dole) i adresy bitů SYN a AC0.

Jednou z největší záludností vytváření programů je, si myslím, uvědomnění si,
že v každém z módu jsou trošku jinak přiděleny zpětné vazby z výstupů zpět do matice ANDů.
Tady třeba jasně vidíte i to, proč v SIMPLY módu z pinů 15 a 16 nemůže být použita zpětná vazba.
Ale na druhou stranu můžete použít vstupy CLK a /OE jako normální další vstup I.


MÓD COMPLEX

GAL16V8
Použijete-li pro váš projekt mód celého galpole komplexní (COMPLEX),
to je nastavíte-li Syn = 1 a AC0 = 1,
pak výstupní buňky budou moct vypadat jen takhle,
AC1 by mělo být u všech buněk nastaveno na log.1., nebude zde používán.

V tomto módu je další záludnost, pozor,
nyní první AND z osmi pro každou výstupní buňku řídí hradlo,
to znamená, že je-li výsledek prvního ANDu z osmi roven log.1, pak jde výsledek z OR a XOR na výstup.

Je-li tento první z osmi ANDů výsledkem jako log.0, pak jde na tento výstup vysoká impedance
a výstup by šel vlastně takto přepnout i do využití jako vstup, má-li zavedenu zpětnou vazbu do matice ANDů.

A s tím souvisí zpětně i další záludnost tohoto módu,
a to, že se logický součet OR skládá jen ze sedmi ANDů.

Osmice ANDů pro daný výstup je tedy jakoby rozdělena,
ten první právě řídí jakoby AC1 (hradlo)
a zbylých sedm bez toho prvního v osmici dává výsledky do vstupů OR.

V tomto módu je zase nějaké to omezení na výstupech, a to takové,
že výstupy na pinu 12 a 19 nemohou použít zpětnou vazbu z výstupu zpět do matice ANDů.


GAL16V8
A zde máte zase výkres struktury GAL16V8 v módu COMPLEX
( to je pro nastavení Syn = 1 a AC0 = 1)
I tady je při programování nejdůležitější sledovat,
kudy vedou zpětné vazby z výstupů zpět do matice ANDů,
protože je to tu zase úplně jinak než v módu SIMPLY.

A i v tomto módu můžete použít vstupy CLK a /OE jako normální další vstup I.


MÓD REGISTERED

GAL16V8
Jeden z nejzajímavějších módů galpole GAL16V8 je registrový mód (REGISTERED)
to je nastaveno pomocí SYN = 0 a AC0 = 1 zase pro celého broučka.

Nastavíte-li potom pro vybranou výstupní buňku AC1 = 0,
nastavíte ji jako klopný obvod, jenž je krmen výsledkem z OR a XOR,
a jehož stav je překlopen s kladnou hranou signálu z externího vstupu CLK.
Dále pak je výstup klopného obvodu veden jako zpětná vazba do matice ANDů
(a všimněte si, že je zde veden schválně z negovaného /Q, aby XOR fungoval všude)
Pokud je externí vstup /OE (output enable) pomocí log.0 uvolněn,
objeví se výsledek z klopného obvodu i na výstupu.

Nastavíte-li v tomto módu AC1 = 1,
stane se výstupní buňka buňkou stejných vlastností jako v komplexním módu.
Tedy první AND řeší mimo OR přímo uvolnění hradla pro výstup
a zbylých sedm ANDů prochází přes OR a XOR a hradlo k výstupu.
Tedy pro takto nastavený výstup žádný klopný obvod, jen logický výstup O.
A nebo výstup můžete na hradle uvést do vysoké impedance,
a tak získat na úkor výstupu O další vstup I.


GAL16V8
Když se podíváte na schéma GAL16V8 v tomto módu REGISTERED
(to je pro nastavení Syn = 0 a AC0 = 1)
určitě získáte pocit, že právě pro tento mód byla prvotně tato součástka navržena. :o)

Pokud však navrhujete i v ostatních módech,
tak i tady se dejte pozor na přiřazení zpětných vazeb z výstupů či klopných obvodů zpět do matice ANDů.
I když tady bych řekl, že to má největší logiku.

Je tady ještě jasně dáno, že pin1 má funkci CLK pro všechny nakonfigurované záchytné klopné obvody,
a jen ještě jednou podotýkám, že klopný obvod přijímá informaci (klopí) kladnou hranou CLK,
a jen taková poznámka, že vstup CLK nemá rád nerozhodné stavy
ani neustálený stav na D klopných obvodů během přepisu.

Pin 11 je v tomto módu jen specializováný vstup na uvolňování výstupů (/OE) pro výstupy s nakonfigurovaným klopným obvodem.
Pokud tento vstup (/OE) v tomto REGISTERED módu není aktivní, pak klopné obvody pracují jen interně,
ale na rozdíl od ostatních módů lze i v tomto stavu použít zpětnou vazbu výsledku klopného obvodu zpět do matice ANDů.


GAL16V8
To je tak asi všechno ke GAL16V8
Teď jen, jak požadované jedničky a nuly vložit k programování.
Když si otevřete buffer jakéhokoliv programátoru, v kterém jde GAL16V8 naprogramovat,
a pokud si tento buffer otevřete k editaci,
pak asi můžete zrovna zapisovat i program.
Popřípadě se výpis bufferu můžete z programátoru uložit,
a pak si ho otevřít v obyčejném texťáku a přepisovat a pak zpět uložit.
Pokoukejte a zkuste příjmout, kde co v zápisu jedniček a nul je.

Mně osobně moc pomáhá vytvářet logiku pomocí teček propiskou přímo do výtisku datasheet gal16V8 v daném vybraném módu.
Teprve po vytvoření takového projektu přenáším do výše popsaného souboru v texťáku jedničky a nuly..
Ale opravdu to jde psát přímo do editoru programátoru. :o)))


GAL16V8
No a takhle může vypadat brouček.
A k čemu se to vlastně může hodit ?
Občas nějaké to GALpole nacházím v deskách starších PC.
Řek bych, že pomocí GALpole jde řešit rychlé logické procesy,
které se kdysi řešily i celou kartičkou součástek.
Je to prý zastaralá součástka.. :o))
Spousta věcí lze nyní řešit i pomocí jednočipu.

Ale zkuste si třeba vyřešit snímání inkrementálního odměřování.

Pro tuto úlohu jsem se ke GALpolím vrátil a čertil jsem se, že mne neposlouchají.
A proto jsem se rozhodl napsat tento článek,
který třeba i někomu dalšímu pomůže pochopit problematiku a záludnosti,
ale i úžasnost, variabilitu a rychlost této nenápadné součástky...


GAL16V8
Zkuste si popřemýšlet nad výše nadhozenou úlohou..
Máte od inkrementálního odměřování o 90stupňů posunuté digitální výstupy a a b.
Chcete poslat do procesoru přerušení,
aby si procesor mohl přečíst jestli má impuls přičíst nebo odečíst podle směru pohybu.
Odměřování dokáže dát na jeden cyklus čtyři kroky,
zkuste dát možnost počítat každý krok, nebo každý druhý nebo čtvrtý.
Indikujte vybrané kroky svitem ledky.
Zkuste indikovat chybu odměřovacího kódu a změnu směru pomocí ledek.
To všechno se dá dostat do jednoho GAL16V8b :o)


Výpis prázdného jedec souboru přejmenovaného z .jed do txt máte k dispozici.

Zde je datasheets gal16V8B, kde je popis funkce od výrobce.

Tady je jedno z možných ukázkových řešení opět v souboru .txt, ke kterému náleží i zadání výše..

Po naprogramování GAL16V8b si celý problém můžete osahat
třeba na kontaktním nepájivým poli.

K výstupům /Chyba kódu, /Enable a /ExDirect si můžete připojit ledky
s odporem z plus 5V, které budete výstupy GAL16V8B spínat k nule.

Výstup /Krok připojte na /INT0 nějakého procesoru,
kde si můžete vytvořit v přerušení procesoru čítání nebo odčítání 1 pulsu.
Přerušení musí být nastaveno jen na sestupnou hranu.
Výstup Plus se přivede též do procesoru a bude procesoru říkat zda plus nebo minus.

Výstup CLK1 vytváří hodiny z GALpole jen do vstupu CLK na GALpoli.

Na výstupy A a B nic nepřipojujte.

Na vstupy a a b připojte obdélníkový signál z odměřování
úroveň +5V pokud možno ošetřený proti zákmitům.

Vstupy 1, 2, 3, 4 uvolňují čítání čtyř kroků v cyklu odměřování,
nastavíte-li některý do 0V, tak se vybraný krok nebude počítat..

Indikace se vyhodnocují pro každý krok, i když si počet kroků čítání změníte..
Vyzkoušejte si to, je to výzva..

;oD
8.4.2018
-b-



Zpět