CLAUDIA Lite

primitivní 4-bitový procesor/počítač sestavený z obvodů TTL 74xx



Generátor hodin

Proč vůbec potřebujeme hodiny? Generátor hodin je jednou ze základních komponent každého procesoru. Všechny transakce uvnitř procesoru totiž musí mít nějaké časování a musí být synchronizovány s nějakým časovým průběhem (my taky během dne furt čumíme na hodiny, abychom něco neprošvihli). Všichni známe, že současné moderní procesory se honosí schopností pracovat na frekvencích v řádech GHz. To náš primitivní procesor sestavený z diskrétních obvodů nezvládne. Možná by zvládl stovky KHz či velmi nízké jednotky MHz, ale my půjdeme ještě níže a "poženeme" ho na kmitočtech v řádu desítek maximálně stovek Hz. Tak budeme mít jakous takous jistotu, že ani při zapojení typu "vrabčí hnízdo" třeba na nepájivém poli, nebude docházet k nežádoucímu rušení a přeslechům mezi signály a hlavně do procesoru budeme krásně vidět. Kmitočet hodin budeme mít možnost dokonce ještě dále snižovat a nebo hodiny dokonce generovat ručně, tzv. krokováním. V takovém případě je pak možné sledovat činnost procesoru a práci interních obvodů pouhým okem za pomoci vestavěných LED a třeba i logické sondy. Koneckonců jedná se o výukový procesor a opravdu je potřeba do něj vidět.

Ještě je nutno poznamenat, že náš procesor bude tzv. statický. To znamená, že minimální frekvence hodin není nijak omezena a může být klidně nulová. Procesor pak sice stojí, ale jeho vnitřní obvody tím nejsou nijak ovlivněny, registry si svá data drží a po zvýšení hodinové frekvence procesor normálně pokračuje v činnosti. Existují i procesory dynamické, kde se činnost hodin zastavit nesmí, jinak třeba registry přijdou o svá uložená data.


Vysílače a přijímače v procesoru

Ještě, než se pustím do podrobného popisu zapojení, je vhodné uvést něco o interních činnostech procesoru. Slovo TRANSAKCE totiž v prvním odstavci nebylo zvoleno náhodně. A troufám si tvrdit, že následující popis činnosti procesoru pravděpodobně ještě nikdy nikdo nepoužil:-)

Všechny činnosti, které procesor vykonává, lze totiž zjednodušeně popsat jedinou činností: přesun dat - transakce. Procesor opravdu nedělá nic jiného, než že přesouvá data sem a tam mezi jednotlivými interními registry, nebo mezi interním registrem a vnějším registrem (paměť, port). Jenže pokud by se pořád přesouvala jedna a ta samá data sem a tam, procesor by nic nevypočítal. Proto se občas do cesty datům postaví (ideálně pasivní) logická síť, která data na cestě od zdroje k příjemci modifikuje. Jak se mají data modifikovat, to záleží na konfiguraci této sítě, která se během práce procesoru mění. Může se jednat o pouhou negaci binárních dat, binární součet dat ze dvou zdrojových registrů, nebo třeba booleovské ANDOvání dat ze dvou registrů apod. Taková síť se pak nazývá ALU - Aritmeticko-Logická jednotka a bude o ní pochopitelně v dalším popisu pojednáno, protože je to nezbytná součást každého procesoru.

Na základě předchozího tvrzení o transakcích, lze pro účely řízení činnosti procesoru rozdělit veškeré vnitřní obvody v procesoru do pouhých dvou skupin: zdroje dat, neboli vysílače (obvyklá zkratka pro vysílač je TX) a příjemce dat, neboli přijímače (zkráceně RX). Vyjma ALU nic víc v procesoru opravdu není:-) Funguje to i při spojení procesoru s dalšími vnějšími obvody, se kterými pak procesor tvoří počítač. Při čtení dat z externí paměti či portu se toto externí zařízení chová jako vysílač dat (směrem dovnitř procesoru) a přijímačem je nějaký interní registr v procesoru. Naopak při zápisu dat do externí paměti či portu se tyto chovají jako přijímače a vysílačem je zase nějaký interní registr v procesoru. Zjednodušeně řečeno je obvyklý signál /RD (Read) signálem pro vysílač a signál /WR (Write) je signál přijímače. Je zřejmé, že jeden a tem samý obvod se může chovat v jedné transakci jako vysílač, kdežto v jiné jako přijímač (typicky paměť RAM). Jiné obvody jsou naopak pouze vysílače (paměť ROM, vstupní port), další zase pouze přijímače (výstupní port).

Uvnitř procesoru tedy musíme generovat dvě základní skupiny signálů: signály pro ovládání vysílačů (budeme jim říkat TX signály) a signály pro ovládání přijímačů (RX signály). Signály vysílačů jsou typicky signály aktivující třístavové výstupy (/OE, /G, /CE) z registrů a oddělovacích bran. Z toho vyplývá, že TX signál by měl být typicky aktivní v úrovni LOW. Signály přijímačů většinou řídí zápis ("latchnutí") dat do registru (CK, LE) a jejich typická aktivní úroveň je HIGH, snad kromě signálu /WR pro externí zařízení, který bývá aktivní v LOW.


Dvoufázové hodiny

Je zřejmé, že v každém kroku je nutné generovat nezávisle na sobě signál pro konkrétní vysílač a zároveň signál pro konkrétní přijímač, aby došlo k požadovanému přesunu dat. Z toho plyne i požadavek na časování. Je totiž vhodné, aby signál vysílače byl generován s předstihem před signálem přijímače a aby se oba signály překrývaly. To z důvodu ustálení výstupních dat. Zkrátka vysílač vystaví svá data na sběrnici s předstihem. Data se ustálí a následně je zachytí ("latchne") přijímač do svého registru. Teprve pak vysílač "zavře bránu". V každé periodě hodin tak dojde k jednomu transferu dat. Tento požadavek splňují tzv. dvoufázové hodiny s fázemi F1 a F2, kdy "dlouhou" fází F1 je hradlován signál adresovaného vysílače a "krátkou" fází F2 je hradlován signál adresovaného přijímače. Příklady takových hodin jsou níže:

2 fázové hodiny

Z těchto průběhů jsem pro Claudii Lite zvolil prostřední B) průběh. A to hlavně proto, že stejné časování používá i PIP-2. U "velké" Claudie-1 jsem naopak volil průběh C). Na rozdíl od předchozích dvou průběhů totiž céčko umožňuje použití přijímačů (registrů), které latchují na náběžnou i sestupnou hranu (viz třeba rozdíl mezi obvody 7475 a 74175). První dva průběhy jsou použitelné jen v případě, že cílový registr zachytává data na náběžnou hranu. Ale v Claudii Lite jsem se rozhodl pro použití výhradně registrů 74175 latchujících náběžnou hranou, takže průběh B) plně vyhovuje. Jeho generování je totiž jednodušší a v podstatě jsem ponechal zapojení z PIPa-2. Na následujícím obrázku je kompletní schéma časové základny Claudie Lite:

Zapojení generátoru 2-fázových hodin

Zapojení generátoru 2-fázových hodin

Základem je jednofázový generátor základního taktu (astabilní klopný obvod AKO), který je postaven klasicky z jediného hradla 7414, odporu a kondenzátoru. Druhé hradlo 7414 jsem použil na "dotvarování" impulsů. Spínačem FAST/SLOW lze připnout velký elektrolyt 470uF, který činnost procesoru natolik zpomalí, že je možné jednotlivé přesuny dat uvnitř procesoru sledovat třeba na LED diodách, či logickou sondou. Použití hradel se schmittovým klopným obvodem (7414) je pro toto zapojení oscilátoru nezbytné. S běžnými invertory (třeba 7404) by to nekmitalo! Muselo by se to zapojit jinak.

Druhou možností, jak generovat základní takt, je obvod ručního krokování, tvořený přepínacím tlačítkem STEP a RS klopným obvodem. Jedná se o klasické zapojení bezzákmitového spínače. Stiskem tlačítka STEP vygenerujeme na výstupu RS obvodu potřebnou náběžnou hranu. Ruční krokování je neocenitelné při postupném osazování a oživování procesoru, stejně jako při případném hledání závady. Díky tomu, že Claudia Lite je statický procesor, můžeme se "dokrokovat" kam potřebujeme a kontrolovat stavy jednotlivých signálů uvnitř CPU.

Signál z AKO či krokovače, je přes přepínací jumper (nebo přepínač RUN/STEP) zaveden do obvodu, který z jednofázového průběhu vytvoří požadovaný dvoufázový. Jeho základem je klopný obvod D (jedna polovina 7474, druhá bude v sequenceru) a několik hradel. Činnost obvodu je zřejmá a na výstupu již dostáváme požadované fáze F1 a F2. Jelikož se spíše uplatní jejich negované verze /F1 a /F2, generujeme i tyto signály. Nakonec se ukázalo, že F2 nebude vůbec potřeba a vystačíme si jen s její negovanou verzí /F2. Proto generátor hodin signál F2 negeneruje. Hradlo OR u kontrolní LED fáze /F2 původně zbylo a tak je zde použito jako budič LED. Kontrolka fáze /F1 je připojena napřímo, protože tento signál nebudí tolik vstupů jako /F2 (viz. sequencer). Výsledné průběhy generované výše uvedeným schématem jsou na následujícím obrázku (F2 je zde jen pro ilustraci):

Průběhy signálů z generátoru 2-fázových hodin

Hodinový takt, na kterém Claudia Lite "jede" odpovídá frekvenci fáze F1. Tato fáze vzniká vydělením základního vstupního jednofázového taktu dvěmi, protože klopný obvod D je zde zapojen jako dělič /2.


Obvod RESETu

Součástí generátoru hodin procesoru je i obvod zajišťující RESET procesoru. Ať už reset po zapnutí napájení, či asynchronní reset vyvolaný vnějším signálem (nebo člověkem) kdykoliv během činnosti procesoru. Požadavek na reset může přijít kdykoliv, trvat jakkoliv dlouho a skončit taky kdykoliv. Jenže aby se procesor dostal po resetu do definovaného stavu a mohl se správně rozeběhnout, tak nám náhodně generovaný a náhodně trvající reset nevyhovuje. Potřebujeme aby byl reset také synchronizován s hodinami procesoru. Jelikož nemůžeme obsluze nařídit kdy a jak může resetovat, uděláme to jinak. Signál RESET prodloužíme pomocí klopného obvodu RS a ukončíme ho teprve tehdy, když za 1. skončí jeho trvání na vstupu a za 2. když skončí aktivní výkonná část fází F1 a F2 hodin. Tedy kdy procesor zrovna neovládá žádné vysílače ani přijímače a v podstatě se jen "připravuje" na další cyklus. V takovém okamžiku je generován signál /EOR (End Of Reset), který překlopí klopný obvod RS a "odresetuje" procesor. Automatické resetování po zapnutí napájení zajišťuje RC článek na vstupu RS obvodu. Ruční reset je pak možný stisknutím tlačítka. Jak bude uvedeno dále, musí reset trvat po dobu nejméně jedné náběžné hrany F1, což je zajištěno právě RC článkem, který "podrží" reset i po velmi krátkém stisku tlačítka. Pokud budeme generovat hodiny ručně krokováním, musíme si toto pohlídat a ručně podržet RESET tak dlouho, aby prošla alespoň jedna náběžná hrana F1, jinak nedojde ke správné inicializaci instrukčních registrů.

Signál /EOR je tedy generován v době, kdy se signály /F1 a CLK nacházejí v log. 1 a jeho délka odpovídá půlperiodě hodin CLK, jak je vidět na obrázku. To by bylo v pořádku. Jenže v reálném zapojení je generován ještě jeden kratičký parazitní impuls /EOR v okamžiku náběžné hrany CLK na konci neaktivní doby fáze /F1. Je to dáno zpožděním reálných integrovaných obvodů. Zkrátka v době další náběžné hrany CLK, než překlopí klopný obvod D, je signál /F1 po kratičkou dobu stále v log. 1 a tedy je i generován /EOR v čase, kdy ho nechceme. Tento impuls je velice úzký, niméně na překlopení RS obvodu stačí... K likvidaci tohoto parazitního impulsu postačí do zapojení přidat keramický kondenzátor 1nF (ve schématu červeně) a ten nám parazitní /EOR impuls zlikviduje. Krásná ukázka toho, jak je vždy nutné počítat s reálnými vlastnostmi (zde hlavně zpoždění) použitých součástek, které mají mnohdy k ideálním vlastnostem hodně daleko:-)

Pro kontrolu činnosti resetovacího obvodu je na nepoužitém výstupu RS klopáku LEDka, která indikuje aktivní resetování. Druhý výstup RS klopáku je pak již použit k vlastnímu resetování vnitřních obvodů CPU. Jelikož je těchto obvodů hodně a potřebují rozdílné úrovně, jsou zde použita dvě invertující hradla jakožto budiče. Kladnou úrovní RESET193 budeme resetovat programový čítač PC (74193) a zápornou pak vše ostatní (hlavně registry). Pomocí invertorů 7414 vytvoříme dva resetovací signály /RESET1 a /RESET2 a "rozházíme" je tak, aby byla výstupní hradla 7414 zatížená rovnoměrně, například takto:


/RESET1: reg.A, reg.B, reg. OUT (vše 74175), RS obvod +ADDR (7408)

/RESET2: reg. IR* (74175), reg IR2 (74163), PC (74193), příznaky C a Z (7408)


Pokud nám hodiny správně "tikají", je možné se přesunout k dalšímu funkčnímu celku Claudie Lite: sequenceru.


Ještě poznámka k zapojení. Původní návrh počítá s dvoudeskovým uspořádáním. Na jedné desce plošných spojů by byl osazen samotný procesor (počítač), na druhé desce by pak byly ovládací a indikační prvky a jednalo by se tak o ovládací panel počítače. Tam, kde je ve schématu na vodiči udělán křížek, je myšleno rozdělení obou desek. Příslušný ovládací či indikační prvek bude na ovládacím panelu, zbytek zapojení na desce procesoru. Krokovací tlačítko, LED indikátor resetu a jedno resetovací tlačítko bych ponechal na desce CPU, neboť se budou používat hlavně při oživování a pro vlastní provoz počítače už nejsou tolik důležitá. Na ovládací panel bych naopak vyvedl druhé tlačítko RESET, přepínač rychlosti FAST/SLOW (i s tím velkým elektrolytem) a LED indikátory fází F1 a F2. Plus pochopitelně všechny ostatní ovládací a indikační prvky.


Blokové schéma

Sequencer


RET



Odladěno na MS IE 8.0 a Firefoxu při rozlišení min. 1024 x 768 pixelů
www.NOSTALCOMP.cz    2010  -  2019