CLAUDIA Lite v.2

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



Na stránce s popisem PIPa-2 a Claudie Lite jsem zmínil existenci komplexní aritmeticko-logické jednotky (ALU) v podobě integrovaného obvodu 74181. Také jsem uvedl, že ji sice používám ve složitější Claudii-1, ale že její použití v Claudii Lite není z důvodu jejího složitého ovládání možné. Jenže mi to prostě nedalo a pokoušel jsem se to vyřešit tak dlouho, až se mi to nakonec povedlo. Vznikla tak Claudia Lite v.2 obsahující právě tuto ALU.


Aritmeticko-logická jednotka 74181

Pojďme si nyní ALU 74181 trochu představit. Jedná se o 4-bitovou komplexní aritmeticko-logickou jednotku pro konstrukci procesorů v předmikroprocesorové éře. Jelikož se ve své podstatě jedná o bipolární logickou síť, byla na svou dobu velice rychlá. Jednotka pracuje se dvěma 4-bitovými operandy a je možné ji řetězit a získat tak 8, 12, 16 či vícebitovou ALU. Nám pochopitelně postačí základní 4-bitové provedení, které je v jediném pouzdře DIL 24 (široké). Kromě vstupů operandů A3-A0 a B3-B0 je zde ještě jednobitový řídící vstup M, kterým nastavujeme režim práce. Je-li M=1, pracuje jednotka v logickém režimu, M=0 nastaví aritmetický režim. Dále tu máme 4-bitový vstup pro kód (S3-S0) požadované operace, 4-bitový výstup výsledku (F3-F0), vstup (Cn) a výstup (Cn+4) přenosu, výstup A=B (viz. dále) a výstupy P a G pro rychlé předvídání přenosu v řetězených vícebitových zapojeních. Výstupy P a G se připojují do tzv. rychlého generátoru přenosu (Carry Look-Ahead) 74182, který je ale pro základní 4-bitové použití k ničemu a nebudeme o něm vůbec uvažovat. Vstupy operandů A3-A0 a B3-B0 a výstupy výsledku F3-F0 mohou být buď active LOW a je tedy nutné je invertovat, nebo active HIGH a je naopak nutné invertovat vstup a výstup přenosu Cn a Cn+4!

Výstup A=B z 74181 je de facto výstup příznaku Z (Zero). To, že ten výstup je označený jako A=B neřešte. Je to fakt Z. Na to jsem přišel až při hrátkách na nepájivém poli při stavbě Claudie-1. Původně jsem si také myslel, že se výstup nastaví pokaždé, když A=B. Proto jsem taky u Claudie-1 původně počítal se třemi příznaky C, Z a E (Equal) a Z jsem chtěl generovat čtyřvstupým hradlem NAND na výstupu z ALU. Jenže ono to tak není. Ono je to tak že výstup se nastaví jen v případě, kdy výsledek operace F=0. Vyzkoušeno při všech operacích! Taky bacha na to, že výstup A=B je Open Colector a je tam tedy nutný pullup! Tedy v případě, že ho použijete. U Claudie-1 ho používám, ale u návrhu zapojení Claudie Lite v.2 jsem se rozhodl ho nepoužít a příznak Z ponechat ve stávajícím provedení. Vysvětlím dále.

A nyní k operacím ALU. Díky 4-bitovému vstupu kódu operace a 1-bitové volbě režimu může ALU provádět 16 operací logických (při M=1) a 16 operací aritmetických (při M=0). Aritmetické operace se dále liší podle vstupního příznaku Cn. Tedy můžeme provádět 16 aritmetických operací při Cn=0 a dalších 16 artim. operací při Cn=1. Celkem tedy 74181 zvládá těžko uvěřitelný teoretický počet 48 operací! Ne všechny jsou ale úplně praktické či smysluplné. Některé se zase objevují vícekrát. Prostě to tak vyšlo při návrhu vnitřní logické sítě. V následující PDF tabulce jsem vybral několik operací, které opravdu dávají smysl a jsou prakticky využitelné. Ten zbytek si dohledejte v datasheetu 74181.


Vybrané operace ALU 74181


Nicméně je zde jasné jedno. Pokud bychom chtěli mít na každou smysluplnou operaci vlastní instrukci v instrukčním souboru procesoru, zcela vyčerpáme možnosti 4-bitového instrukčního souboru (16 instrukcí) jen na řízení ALU a stejně to nebude stačit. Dále potřebujeme 5 nezávisle nastavovatelných bitů pro řízení ALU a to sequencer Claudie Lite ani Claudie-1 nemá. Musela by se připojit k řídící ROM sequenceru další ROM do série. Musely by se použít ROM s podstatně větší kapacitou, musel by se přepracovat celý sequencer na 8-bitové instrukce. Musel by se zvětšit adresový rozsah programové paměti, aby bylo vůbec možné někam zapsat smysluplné prográmky... Musela by se toho změnit spousta a kouzlo jednoduchosti procesorů Claudia by bylo v pr... Zkrátka to tam.


Použití ALU 74181 v Claudii-1

Jak jsem to tedy vyřešil v Claudii-1? Jednoduše. K práci s ALU používám pouze 2 instrukce a obě tzv. pseudo 8-bitové. Jedná se o instrukce LOP (Logic Operation) a AOP (Arithmetic Operation). Liší se pouze tím, zda nastavují (LOP), či nenastavují (AOP) vstup M u 74181. Obě instrukce vyžadují povinný 4-bitový parametr, což je právě kód požadované operace. Tímto se z původně 4-bitové instrukce stává pseudo 8-bitová. A proč pseudo? Protože ty zbylé 4-bity kódu operace nezpracovává sequencer, ale jsou přímo z programové paměti přepsány do záchytného registru, jehož výstupy jsou přímo připojeny na vstupy S3-S0 ALU. Je to sice nepohodlné, protože při zápisu programu je nutné mít stále při ruce výše uvedenou tabulku s kódy operací, ale je to asi jediný způsob jak zcela využít možnosti ALU 74181 v takto jednoduchém procesoru. Holt je potřeba si zvyknout, že třeba AND AB se zapisuje jako LOP 0Eh a třeba ADD AB jako AOP 09h:-) Co se týká řízení příznaků (zejména C), tak to již máme v Claudii Lite vyřešené a podobné to mám i v Claudii-1, viz. instrukce SEF (Set Flags) a CLF (Clear Flags).


Použití ALU 74181 v Claudii Lite v.2

Šlo by stejné řešení použít i u Claudie Lite? Nešlo. Co se týká potřebných nových signálů ze seguenceru, tak s tím bych si asi poradil (uvolní se totiž stávající signály pro řízení sčítačky a xorovačky), ale neporadím si s nacpáním sekvencí mikroinstrukcí LOP a AOP do stávající paměti 74188. Sice zmizí sekvence pro současné instrukce ADDC a XOR, ale pro nové sekvence LOP a AOP není místo. Tyto instrukce díky přepisu parametru z paměti do záchytného registru potřebují více mikrokroků, než stávající ADDC a XOR a zkrátka je není kam zapsat. Vešla by se pouze jedna. A pak mě to napadlo. Použiju pouze jednu instrukci pro práci s ALU, která bude umět jak logické, tak aritmetické operace. A tak vzniká instrukce ALOP (Alu Operation). Instrukce by měla opět povinný 4-bitový parametr s kódem operace. Jak se ale rozliší zdali se má provádět operace logická (M=1) či aritmetická (M=0)? Tuto informaci ponese přímo kód operace. Když se znovu podíváme na tabulku smysluplných operací ALU, napočítáme jich 20 různých. Jenže některé operace se liší jen vstupním přenosem, ale kód mají stejný. Pokud odečteme operace se stejným kódem, zjstíme, že potřebujeme jen 16 různých kódů pro všechny tyto smysluplné operace. A 16 kódů jsou 4 bity. A jsme doma:-) Takže parametr instrukce ALOP budeme klasicky přepisovat do záchytného registru (74175). Ten ale nebude ALU 74181 adresovat přímo, ale přes dekodér (74188), jenž "přeloží" náš 4-bitový kód na kód ALU a zajistí nastavení řídícího vstupu M (celkem tedy 5 bitů). Claudia Lite v.2 tak bude mít o jednu instrukci v souboru méně (12 instrukcí), ale bude umět všechny (20) smysluplné ALU operace! A to je pecka!


ALU operace Claudia Lite v.2



Instrukce ALOP

Užití instrukce ALOP a její rozklad na mikroinstrukce je následující:

ALOP - ALU operation. Provede aritmeticko-logickou operaci s registry A a B a případně i s příznakem C a výsledek vloží do registru A. Instrukce ovlivňuje příznaky C a Z. Před jejím použitím je možné příslušně upravit hodnotu příznaku C instrukcemi SEF či CLF. Kód operace je ve formě dat uložen za operačním kódem instrukce. Tento kód je nejprve vložen z programové paměti do záchytného registru kódu ALU. Poté je výsledek operace uložen do A registru. Následně se skočí na mikroinstrukční cyklus NOP, který inkrementuje programový čítač a vyzvedne z paměti další instrukci pro zpracování. Rozklad ALOP na mikroinstrukce je následující:

/PLONK + /INCA
/MEMRD + LOp
/ALURD + LA + /NOP + /LIR
(NOP)

Operační kód: 04h xxxx (adresa v řídící ROM je 08h)
Parametry: kód operace (1x nibble)



Claudia Lite a ALU 74181

Níže přikládám návrh včlenění ALU 74181 do Claudie Lite (v.1), pokud by se prováděl nový design s novým návrhem desky. Oproti mé první implementaci v Claudii-1 bude obvod 74181 v Claudii Lite pracovat s active HIGH operandy. Je tedy nutné invertovat vstup (Cn) a výstup (Cn+4) přenosu. Kód operace je ze sběrnice BUS zapisován do záchytného registru novým signálem LOp (viz. dále). Jako registr je ideální použít opět 74175 zapisovaný vzestupnou hranou. Nulování při resetu není nutné. Výstup registru jde do dekodéru z PROM 74188. Zde by bylo možné použít i naprogramovaný PAL či GAL, ale to už by nebyl čistokrevný 74xx procesor. 74188 je stylovější, byť ji využijeme jen z poloviny. Obsah PROM je v ZIPu níže. PROM dekodér pak nastavuje jak vstupy operačního kódu ALU, tak vstup volby režimu M. Výstupy A=B, P a G z 74181 zůstanou nezapojené. Příznak Z bych generoval stejným způsobem, jako v původní Claudii Lite, tedy pomocí OR hradel. Můžeme tím totiž rovnou detekovat nulu zapisovanou do akumulátoru instrukcemi LDA či IN A, což by v případě využití výstupu A=B z 74181 jako příznaku Z nebylo možné. Záchytný registr výsledku F3-F0 operace na výstupu z ALU zůstává původní (74373/573). K ovládání registru použijeme původní signál /ADDRD ze sequenceru, který přejmenujeme na /ALURD. Signál /XORRD zůstane nevyužitý (NC).

Claudia Lite v.1 - v.2 upgrade
Claudia Lite v.1 - v.2 upgrade

Jelikož nemáme žádný volný RX signál pro zápis do záchytného registru kódu operace (74175), využijeme stávající LOUT zapisující do výstupního portu (registru OUT). Do tohoto registru se totiž zapisuje jen a pouze spolu s TX signálem /ARD. Není-li aktivní /ARD, můžeme tento signál využít pro zápis kódu operace do záchytného registru před ALU. Do registru kódu operace se bude zapisovat stávajícím signálem LOUT ze sequenceru, který nyní zapisuje výstupní registr OUT. Původní LOUT přejmenujeme na LOp a k plnění výstupního OUT registru vytvoříme pomocí NOR hradel (7402) nový signál LOUT2. Je jasné, že vždy, když budeme zapisovat do výstupního portu OUT, zapíšeme stejnou hodnotu i do registru operace ALU. Ale to vůbec nevadí! V té chvíli s ALU stejně nepracujeme a až na ni dojde, tak si instrukce ALOP zapíše do registru kódu operace správnou hodnotu. Důležité je, že naopak se to nestane. Díky hradlování s /ARD. Tedy že při zápisu do registru kódu operace OP není dotčen výstupní registr OUT!

Zbylá dvě hradla NOR 7402 využijeme pro inverzi vstupního (C) a výstupního (C4) přenosu, což je v případě práce s active HIGH operandy nutné!

Celé by to šlo zapojit i jinak. Použít active LOW operandy (invertované výstupy z registrů A a B 74175). Použít invertující záchytný registr výsledku. Použít invertovaný příznak C z registru příznaků a na inverzi C4 využít volný invertor, který jsme použili na buzení LED F1. Jenže to by obnášelo zcela nový návrh desky. Také ty invertující třístavové registry jsou podstatně hůře dostupné. Invertující varianta 74373/74573 je 74580, to by bylo nejlepší řešení. Z dalších mě napadá mnohem dostupnější tuzemský Tesla MHB8283. Sice není z řady 74xx, ale je to klasický bipolární TTL obvod (nenechte se zmást označením MHB82xx). Způsob ovládání 74580 a 8283 je stejný, ale bohužel mají mírně odlišný pinout. Nakonec jsem však zvolil řešení s active HIGH operandy a změny v původním zapojení tak jsou jen minimální...


Upgrade Claudie Lite (v.1) na verzi 2

Přiznám se, že jsem o stavbě Claudie Lite v.2 s ALU 74181 zpočátku vůbec neuvažoval. Stačilo mi to jen teoreticky vyřešit. Navíc se Petrovi stejně už nechtělo do návrhu zcela nové desky, tak jsem si myslel, že to jen založím a bude to. Ale Martin Lukášek mi vnuknul myšlenku na adaptérovou desku, jejíž pomocí bychom upgradovali původní Claudii Lite (v.1) na verzi 2. Myšlenka mě zaujala natolik, že jsem se pustil do řešení. Původní idea byla, že adaptérová deska by se prostřednictvím oboustranných precizních kolíků vkládala do patic původní sčítačky 7483 (IO24) a záchytného registru xorovačky 74373 (IO20). Záchytný registr sčítačky 74373 (IO25) by zůstal na svém místě a xorovačka 7486 (IO21) by byla vyjmuta bez náhrady. Přivedení některých dalších potřebných signálů ze sequenceru jsem původně chtěl řešit drátovými propojkami, ale to se klukům (oprávněně) nelíbilo. Takže se kvůli těmto signálům využily ještě další patice jiných obvodů, ale tyto obvody se pouze přestěhovaly na adaptérovou desku a zůstaly tak zachovány.

Claudia Lite v.2 final
Adaptérová deska na v.2
Claudia Lite v.2 final
Claudia Lite v.2

Poznámka: více fotografií naleznete ve fotogalerii Claudie Lite v.2!

Vznikla tak adaptérová deska, která nese celkem 7 integrovaných obvodů a zasouvá se do 4 patic na desce základní. Nic více není potřeba. Vlastně ano. Je nutné na základní desce vyměnit paměť PROM 74188 s mikrokódem za mikrokód verze 2 (obsahuje rozklad instrukce ALOP). Z původní základní desky jsou bez náhrady vyjmuty 3 obvody (7483, 7486, 74373) a další 3 obvody jsou přestěhovány na adaptérovou desku (74138, 7404 a druhý 74373). Oproti původní verzi 1 má tedy Claudia Lite v.2 pouze o jediný integrovaný obvod více (29 celkem)! Ale pokud by se dělala zcela nová deska, dalo by se to udělat i s původním počtem IO (28) a pokud by se použila ALU 74382 (viz. níže) mohlo by jich celkem stačit jen 27:-) Možnosti Claudie Lite v.2 v oblasti manipulace s čísly se zvyšují dosti radikálně. Ovšem musíme přihlédnout k tomu, že 4-bitová adresace programové paměti nám moc možností, jak toho využít jinak, než pro demonstrační účely, nedává...:-)

Z patice sčítačky tedy využijeme signály operandů A a B, vstup přenosu C, výstup přenosu C4 a výstup výsledku operace F. Z patice záchytného registru sčítačky (který přestěhujeme "nahoru") využijeme signály sběrnice BUS a původní zapisovací signál /ADDRD, nyní pouze přejmenovaný na /ALURD. Dále je nutné k desce dovést ze seguenceru signály LOUT (pin 2 IO16) a /ARD (pin 10 IO4). Ty vezmeme z patic 74138 a 7404, které opět přesuneme na adaptérovou desku. Ze všech patic pak využijeme ještě napájení.

Jelikož operandy A a B, které máme v patici sčítačky k dispozici, jsou active HIGH a jelikož ponecháme původní záchtyný registr výsledku (neinvertující), je nutné dodatečně invertovat vstup (C) a výstup (C4) přenosu. K tomu využijeme zbývající dvě hradla NOR 7402. Oproti zapojení v Claudii-1 bude obvod 74181 v Claudii Lite pracovat s active HIGH operandy, ale to je fuk. Funguje to stejně, jen se liší kódy operací, viz tabulka operací Claudia Lite v.2

V níže uvedeném ZIPu je finální schéma adaptérové desky, osazovací plán a obsahy obou PROM 74188. Jedna je pro sequencer v.2 a druhá pro dekodér operací na adaptérové desce. Součástky s prefixem X jsou jen patice (resp. oboustranné kolíky) číslo odpovídá původnímu IO na základní desce. Integrované obvody s číslem vyšším jak 100 jsou nově přidané. Jsou to: 74181, 74175, 74188 a 7402.


Osazovák v.2 (přidán datasheet 74181)


Doporučený způsob osazení adaptérové desky: vyndejte z verze 1 obvody IO4, IO16, IO20, IO21, IO24 a IO25. Patice po IO20 a IO21 zůstanou prázdné. Do ostatních patic zasuňte precizní oboustranné DIP kolíky (jednořadé, naštípané na potřebné délky). Doporučuji mezi kolíky a původní patice vložit vždy ještě jednu precizní patici jako distanci. Zvláště, pokud použijete velké keramické kondy, tzv. plácačky. Na kolíky nasuňte adaptérovou desku a kolíky shora zapájejte. Nyní můžete desku vyjmout z patic a osadit ostatní součástky (odpory, patice pro IO, kondenzátory). Do patic na adaptéru vložte nové integrované obvody a celek opět zasuňte do patic na základní desce. Nezapomeňte vyměnit původní PROM (IO3) na novou s obsahem pro v.2!



Závěrem...

Práce s ALU 74181 se v Claudii Lite v.2 příliš neliší od původní Claudie Lite se sčítačkou a xorovačkou. Nejprve si nachystáme operandy do registrů A a B a následně provedeme požadovanou operaci instrukcí ALOP xxxx, kde xxxx je kód požadované operace dle tabulky výše. Výsledek operace bude automaticky přepsán do registru A, obsah registru B se nezmění. V PDF s kódy operací ALOP naleznete i nově zpracovaný přehled instrukčního souboru v.2 a příklady programování ALU

Co se týká publikovaných ukázkových programů, tak všechny lze bez problému upravit na verzi 2 s ALU 74181. Některé se dokonce výrazně zjednoduší. Například program pro odečítání 15-data lze realizovat funkcí SUBB AB a není nutné se "patlat s výrobou" dvojkového doplňku. U všech inkrementací a dekrementací v ukázkových programech lze využít operací INC A a DEC A a registr B tak vůbec nebudeme potřebovat. Na naprogramování běžícího světla zase s výhodou využijeme funkci RLC A...

Mám velkou radost, že se mi podařilo připojení ALU 74181 do Claudie Lite vyřešit. Jsem ale nakonec rád, že jsem ji nepoužil rovnou. Je to již léta nevyráběný obvod a ne každý si jej dokáže obstarat. Ale hlavně je původní zapojení se sčítačkou 7483 a xorovačkou 7486 mnohem názornější a didakticky určitě výživnější, než složitá "černá skříňka" v podobě jediného pouzdra 74181. Nehledě na velikost tohoto pouzdra, které by prostě k ostatním úzkým integrovaným obvodům moc na základní desce neladilo:-)



Další ALU v řadě 74xx

Aritmeticko-logická jednotka 74181 není jedinou ALU v řadě 74xx. Ale je asi nejklasičtější, nejstarší a nejznámější. Počátkem 80. let se dokonce objevila i v katalogu integrovaných obvodů Tesla. Ta ji sice nevyráběla, ale v rámci RVHP ji vyráběli spřátelení Poláci jako UCY74181. Pojďme si však ukázat další ALU z řady 74xx:

74281 = ALU + B register, DIP 24
74381 (+74182), 74382: ALU, DIP20, 8 operací
74481 = 4-bitový procesorový řez s ALU, QIL 48 (74482 = řadič mikroprogramu)
74681 = ALU + A register + B register, DIP 20, 16 operací



Claudia Lite (v.1) final

Claudia Lite CONTROL


RET



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