CLAUDIA Lite

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



Pracovní registry procesoru

Klasické procesory obsahují celou řadu tzv. pracovních registrů. Registry jsou v podstatě malé paměti na jedno číslo, jehož bitová šířka odpovídá bitové šířce datové sběrnice (BUS) procesoru. Náš procesor je 4-bitový a tudíž i registry jsou 4-bitové. Registry se používají při výpočtech a přesunech dat. Do registrů ukládáme operandy a výsledky aritmeticko-logických operací. Přes registry přesouváme data mezi externí pamětí a porty a tak dále. Každý procesor obsahuje několik (třeba i desítky) registrů. Procesor PIP-2, potažmo Claudia Lite je tzv. střadačově orientovaný procesor. To znamená, že jeden registr je hlavní a má výsadní postavení. Účastní se všech početních operací a je do něj vždy ukládán výsledek těchto operací. Také přes něj jdou všechna data při přesunech mezi externími pamětmi a porty. Tomuto hlavnímu registru se pak říká střadač, nebo také Akumulátor (jako že střádá či akumuluje data) a označuje se jako registr A, nebo Acc.

Další pracovní registry v procesorech jsou tzv. odkládací a jak bylo uvedeno výše, mohou jich být i desítky. V našem případě bude sadu několika odkládacích registrů zastupovat, z důvodu jednoduchosti, jen jediný - registr B. Můžeme mu také říkat registr druhého operandu, protože se spolu se střadačem A bude účastnit matematicko-logických operací a bude v něm vždy uložen druhý operand těchto operací. V dospělých procesorech je registr druhého operandu přímo nepřístupný a je plněn automaticky vždy před zahájením operace z vybraného odkládacího registru.

V našem konkrétním zapojení budou registry A i B tvořeny obvody 74175. Tyto obvody zapisují náběžnou hranou, mají asynchronní nulování a komplementární výstupy. To vše s výhodou využijeme právě pro funkci procesorových registrů. Jejich zapojení na sběrnici je následující:

Pracovní registry A a B
Pracovní registry A a B

Registry 74175 mají komplementární výstupy (přímé i negované verze datových bitů). Komplementární (negované) výstupy s výhodou využijeme pro připojení kontrolních LED, abychom do registrů mohli nakukovat (pořád se jedná hlavně o výukový procesor). Registry nulujeme RESETem a tedy po (re)startu v nich vždy máme nulu. Zápis do registrů řídí sequencer signály LA a LB. Přímé výstupy (nenegované) z registrů jsou připojeny následovně: výstup z registru A je zaveden do ALU (sčítačka a xorovačka, viz. níže) a dále je přes třístavový oddělovač (jedna polovina 74244, druhá je u vstupního portu) uvolňovaný signálem /ARD přiveden zpět na sběrnici BUS. Výstup z registru B jde pouze do ALU. Data uložená v B registru tak není možné zpětně číst. Ale pochopitelně tu možnost je. Stačí do akumulátoru A dát nulu a sečíst ji s B registrem. Jelikož se výsledky operací vždy ukládají do střadače, bude původní hodnota z B registru beze změny přepsána do A, kde s ní můžeme dále pracovat.

Zmínit je potřeba i registry tzv. záchytné. Tyto registry jsou ale plněny automaticky a program, resp. programátor k nim nemá přímý přístup. Nejedná se o pracovní registry. Záchytné registry (IR*, PCR, výst. reg. ALU) jsou popsány vždy u toho funkčního bloku, který je vyžaduje.


Aritmeticko-logická jednotka (ALU)

Aritmeticko-logická jednotka ALU má v procesorech na starosti počítání. Provádí jednak operace aritmetické (matematické) a dále operace logické. Aritmetické operace jsou například sčítání, odečítání, násobení a dělení. Logické operace jsou zejména AND, OR, XOR a NOT. Dále je pomocí ALU možné provádět inkrementace, dekrementace, bitové rotace a posuny, porovnávání a další. Z toho plyne, že ALU je ve skutečnosti poměrně složitá záležitost náročná i na počty řídících signálů. Sice se v řadě TTL obvodů dají sehnat plnohodnotné 4-bitové ALU v jediném pouzdře, např. 74181, kterou mám v Claudii-1, ale pořád to neřeší nároky na její složité ovládání, které jednoduchý procesor typu Claudie Lite kapacitně nezvládne. Proto musela být funkcionalita ALU výrazně zredukována.

Původní PIP-2 obsahoval namísto ALU pouze sčítačku 7483. Což o to, sčítání je nejdůležitější aritmetickou operací v binární soustavě a s jeho pomocí lze realizovat i ostatní aritmetické operace. Já chtěl ale v Claudii Lite mít i zástupce logických operací a volba nakonec padla na XOR. S funkcí XOR lze totiž provádět i funci NOT a také testovat dvě čísla na ekvivalenci. Claudia Lite tedy obsahuje redukovanou ALU v podobě sčítačky a xorovačky:

Sčítačka ADD
Sčítačka ADDC

Xorovačka XOR
"xorovačka" XOR

Sčítačka je realizována jediným obvodem 7483, který obsahuje úplnou 4-bitovou sčítačku s přenosem. Její připojení je shodné, jako u PIPa-2 s jediným rozdílem: sčítačka v Claudii Lite pracujeme i s přenosem C (Carry) a realizovaná fukce tak není ADD AB, ale ADDC AB. Pochopitelně si to vyžádalo zavést do procesoru další logiku pro práci s příznakem C a když už jsem v tom byl, tak i Z (Zero), viz. níže. Do vstupů sčítačky jsou zavedeny přímé výstupy z registrů A a B a registru příznaku C. Výstup jde přes záchytný registr a třístavový oddělovač v jednom (74373/573) na sběrnici BUS. Xorovačka je realizována čtveřicí dvouvstupových hradel XOR v jediném obvodu 7486. Xorovaná čísla jsou opět brána přímo z registrů A a B a výstup je opět přes záchytný registr s třístavovým oddělovačem 74373/573 přiveden na BUS. Rozdíl mezi 74373 a 74573 je pouze v rozložení vývodů. Obvod 74573 je lépe uspořádán pro případný návrh plošného spoje, ale 74373 je prostě klasika:-)

Z výše uvedeného popisu plyne, že jak sčítačka, tak xorovačka pracují kontinuálně (prostě furt:-)). Ale jen v případě provádění instrukcí ADDC AB, resp. XOR AB jsou výsledky zachyceny a otevřeny jejich výstupní oddělovače a výsledek operace přepsán do registru A.

Záchytné registry za sčítačkou, resp. xorovačkou jsem v zapojení původně neměl (PIP-2 ano). Měl jsem tam jenom oddělovače 74244 a spoléhal jsem na zápis výsledku do registru A a příznaku C hranou. Ale pak jsem si uvědomil, že to není úplně 100% v cajku. Někdo může nakombinovat obvody, které budou mít různá zpoždění a pak dojde ještě během zápisu výsledku k jeho ovlivnění a Claudia Lite bude počítat blbě. V okamžiku zápisu do registru A i do reg. příznaku C se totiž na jejich výstupech okamžitě objeví nové hodnoty, které jsou zavedeny do sčítačky a zpětně ovlivní výpočet. Bude-li třeba zápis příznaku C rychlejší, než zápis výsledku do A, ovlivní nový C původní součet a do registru A se zapíše špatná hodnota. Takže proto ty záchytné registry. Jsou použity registry, které si při sestupné hraně zapamatují poslední procházející data a zároveň uvolní výstupní třístavový oddělovač. Konkrétně jsou to registry 74373, nebo 74573. Tyto registry jsou 8-bitové. U sčítačky se nám to hodí, protože kromě 4-bitového výsledku potřebujeme zachytit ještě příznak C. Potřebujeme tedy zachytávat 5 bitů a použití jednoho 8-bitového registru je lepší, než tam cpát dva integráče. U xorovačky se holt obvod využije jen z půlky. Za celkovou úsporu to ale stojí. Šly by použít i registry latchující hranou (74374/574), ale musel by se pro ně negovat latchující signál /ADDRD, resp. /XORRD, aby se latchovalo na jeho sestupnou (pro registr vzestupnou) hranu a výstup /OE by se uvolňoval původním nenegovaným signálem. Z hlediska výstupního výkonu není mezi registry 373/573/374/574 a budiči 240/244 rozdíl a zvládnou budit celou sběrnici BUS. Nepoužité vstupy záchytných registrů je potřeba uzemnit!


Registry příznaků C a Z

Jelikož jsem za každou cenu chtěl mít v Claudii Lite instrukci podmíněného skoku, bylo nutné implementovat tzv. příznaky (Flags). Dospělé procesory obsahují celou řadu různých příznakových bitů, ale zde bylo možno realizovat jen ty nejnutnější. A těmi nejnutnějšími jsou příznak přenosu C (Carry) a příznak nuly Z (Zero). Ty musí obsahovat každý počítající procesor. Generování těchto příznaků je triviální. Příznak C generuje automaticky přímo sčítačka 7483 jako signál C4. Do registru příznaků jej ale nebereme přímo ze sčítačky, ale z jejího záchytného registru (74373/573). Příznak Z je generován třemi hradly OR, která provádí logický součet všech bitů sběrnice BUS. Příznaky jsou tedy opět generovány kontinuálně, ale do registru příznaků je zapisujeme jen v určitých okamžicích. Příznak C je zapsán pouze v okamžiku, kdy při zpracování instrukce sčítání ADDC AB zapisujeme výsledek součtu do registru A. Mezitím je příznak podržen v záchytném registru sčítačky. Příznak Z je zapisován při každém zápisu do registru A. Tedy vždy, když se do střadače zapisuje nula, je nastaven i příznak Z a naopak v případě nenulového zapisovaného čísla je příznak vynulován.

Pro další zpracování jsou tedy hodnoty příznaků uchovávány v tzv. registru příznaků. Tím dalším zpracováním je myšleno jejich použití pro rozhodnutí zda skákat či neskákat v podmíněných skocích. Příznak C ještě vstupuje do sčítačky 7483. Co je tedy registr příznaků? Ve skutečnosti se nejedná o jediný registr, ale o registry dva, oba jednobitové. Každý příznak má svůj. Oba registry jsou tvořeny klopnými obvody typu D z jednoho pouzdra 7474. Zápis do registrů se provádí náběžnou hranou a registry je možné asynchronně nulovat i nastavovat. Automaticky se nulují při (re)startu. Jejich zapojení je následující:

Registry příznaků C a Z
Registry příznaků C a Z

Výstupy z registrů příznaků jsou zavedeny do logiky skoku, popsané na předešlé stránce. S výhodou použijeme normální i negované verze příznaků. Příznak C je dále zaveden zpět na vstup sčítačky 7483 do vstupu C0. Registry příznaků jsou automaticky nulovány při (re)startu a také softwarově instrukcí CLF (Clear Flags). Příznaky je možné také softwarově nastavit instrukcí SEF (Set Flags). To je důležité hlavně u příznaku C kvůli instrukci sčítání ADDC AB, která vždy provádí součet obou pracovních registrů (A,B) s příznakem C. Nastavování příznaku Z nemá moc velký praktický význam (vlastně žádný), ale ponechal jsem jej. Instrukcemi CLF a SEF se tedy nulují či nastavují vždy oba příznaky současně.

Nyní se můžeme přesunout k dalšímu funkčnímu celku Claudie Lite: portům.


RAM + PC

Porty


RET



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