PIP-2, versus CLAUDIA Lite

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



PIP-2

Důvody, proč se na této stránce budu věnovat amatérskému TTL procesoru (počítači, viz. níže) PIP-2, jsou obšírně rozvedeny na úvodní stránce. Zapojení a popis PIPa-2 vyšlo v modrém konstrukčním "amáru" ARB 3/1980. Při studiu tohoto zapojení jsem dospěl k závěru, že obsahuje řadu chyb, a že to takto prostě nemůže fungovat. Nicméně jsem přesvědčen, že tyto chyby vznikly při překreslování schématu pro publikaci v časopise. Nemám nejmenší důvod si myslet, že by prototyp PIPa-2 nefungoval. Určitě funkční byl. Nalezené chyby a nedostatky nejsou nijak závažné a každý, kdo pochopil, jak zařízení pracuje, je jistě dovedl napravit a postavit si tak funkční procesor. Vím minimálně o dvou lidech, kteří si to kdysi postavili a fungovalo jim to. Viz. třeba PIP-3C v samotném závěru úvodní stránky. A jak tedy PIP-2 vypadal? Takto:

procesor PIP-2
procesor/počítač PIP-2
procesor PIP-2
schéma zapojení PIP-2

Nemá smysl zde popisovat jak PIP-2 pracuje, když je to podrobně popsáno v uvedeném časopise. Doporučuji každému zájemci o amatérské TTL procesory si ten časopis prostudovat. Je tam toho mnohem víc. Popíšu zde pouze chybky, na které jsem při studiu zapojení narazil:

  • Nejsou zakresleny pull-upy u RAM 7489 a PROM 74188 (ale je o nich zmínka). Obě paměti mají otevřené kolektory a pull-upy vyžadují. U PROM 74188 předepisuje výrobce v katalogu pullup 3k9. U 7489 se jako pullupy využijí kontrolní LED s odpory.
  • Signál zápisu do registru B by měl být invertovaný (jako je to u reg. A). Registr je trvale průchozí!
  • Chtělo by to přidat i tlačítko BW pro přímý ruční zápis při programování. Registry nejsou nulovány!
  • Programový čítač (PC) 74193 je trvale v resetu. Připojit paralelně k resetu IR registru 74193
  • Tvrdé uzemňování výstupů hradel tlačítky PCW a INIT. Chtělo by to přes hradla AND (7408)
  • Tvrdé připojení +5V na nepoužité vstupy CDOWN u obou 74193 - to se může jen u CMOS, zde u TTL dát odpory (cca 4k7)
  • Nastavit nepoužívané vstupy u 7474 (C,D = GND, R,S = pullup na +5V)
  • Při blokaci hodin (HALT) stále běží F2, ale asi to nevadí
  • Nejsou zakresleny indikační LED na panelu

Za problém považuji i to, že tlačítka ručního programování jsou aktivní i v RUN módu. Nechtěným sepnutím některého z nich tak můžeme hezky pobláznit probíhající program:-)


Zjednodušení PIP-2

Po prostudování zapojení jsem usoudil, že by se dalo výrazně zjednodušit a uspořit několik integrovaných obvodů použitím "chytřejších brouků". Ale nemyslete si, že tady budu machrovat s modernou na úkor dobovosti zapojení. To ne. Všechny integráče, které jsem nakonec použil byly prokazatelně na trhu již v době návrhu původního PIPa-2 koncem 70. let. Tedy na trhu... Na liberálním západním trhu. Tady v tom komunistickým lágru bylo hovno. (Komunisti zas**ný. Vůbec nechápu, jak je může ještě dnes někdo volit...) Proto autor musel vázat sběrnice pomocí otevřených kolektorů hradel 7403. Třístavové budiče zde byly prakticky nesehnatelné. Totéž platí o synchronních obvodech reagujících na hranu signálu. Ty byly z říše snů. Proto má PIP-2 všude 7475 a houfy hradel. Přitom se použitím chytřejších brouků dalo tolik ušetřit:

  • 3-stavové oddělovače (74240/74244) namísto hradel s OC (7403). Jeden brouk s oddělovači nahradí dvě pouzdra 7403
  • Hradlované dekodéry mikroinstrukčních signálů (74138) namísto nehradlovaných 7442 - úspora dodatečných hradel
  • Čítač mikroinstrukcí se synchronním preloadem (74163) namísto 74193 - opět úspora hradel
  • Registry latchující vzestupnou hranou (74175) namísto úrovní (7475). Navíc asynchronní reset registrů. Opět úspora hradel
  • Vypuštění funkce HALT a logiky zastavování hodin (fáze F2 stejně běžela stále). Přišla mi jako zbytečné plýtvání prostředky a koneckonců se vždy dá nahradit skokem na sebe sama (JMP $)


Rozšíření PIPa na Claudii Lite

Když jsem tak hezky ušetřil pouzdra a zjednodušil zapojení, řekl jsem si, že by to zase chtělo něco přidat. On ten původní PIP-2 je fakt docela hloupoučkej. Co mi na něm hodně vadí, je to, že nemá podmíněný skok. S tím nepodmíněným toho moc nenaprogramujete. Jen takové sekvenční automaty bez možnosti volby více variant algoritmu. Podmíněný skok je zkrátka nutný pro demonstraci činnosti opravdového procesoru. Bez něj to prostě nejde. Bez podmíněného skoku není počítač počítačem!

Jenže když chcete přidat podmíněný skok, musíte mít také nějaké podmínky - příznaky, podle kterých se má procesor rozhodovat zda skákat, či nikoliv. Přímo se nabízí implementovat příznak přenosu C (Carry), který nativně generuje sčítačka 7483 původního PIPa-2 (ale ten ho nevyužívá). Ukázalo se, že nebude problém zavést ani příznak nuly Z (Zero). Čili jsem nakonec implementoval dva podmíněné skoky a sice podle příznaku C (JC - Jump if C) a podle příznaku Z (JZ - Jump if Z).

Dále mi vadilo, že funkci aritmeticko-logické jednotky v PIPovi zastupuje pouze sčítačka (7483). Což o to, sčítání je nejdůležitější aritmetickou operací v binární soustavě, ale chyběl mi alespoň jeden zástupce operací logických. Rozhodl jsem se pro operaci XOR. Jednak proto, že je opravdu hodně užitečná (negace a test ekvivalence čisel) a taky proto, že se dobře implementuje. Na komplexní ALU v podobě 74181 jsem z kapacitních důvodů pochopitelně mohl zapomenout. Na její ovládání prostě ve stávajícím zapojení nevyšetřím tolik řídících signálů. Nicméně už ta XOR a práce s příznaky C a Z je obrovský pokrok a přitom to neznamenalo žádné velké zvýšení složitosti zapojení.

PIP-2 nemá žádné porty. Jako výstupní port se zde považuje registr A. Vstupní zadávací spínače se dají použít pouze při ručním programování a nejsou využitelné při běhu programu. To jsem se rozhodl změnit a zavedl jsem jednak samostatný výstupní port OUT a také upravil připojení spínačů tak, aby se daly využít i při běhu programu jako vstupní port IN. Obě úpravy jsou téměř zadarmo a zvýšení složitosti zapojení je zanedbatelné.

Tlačítka ručního programování jsou u Claudie Lite aktivní pouze v režimu ručního programování (PROG) a nelze jimi tedy "hrabat" do běžícího programu v režimu RUN. Což je jedna ze slabin PIP-2.

Jelikož jsem na interní registry použil namísto obvodů 7475 obvody 74175, přímo se nabídla možnost jejich automatického nulování při (re)startu procesoru. Tím, že máme v registrech po resetu nulu můžeme ušetřit i nějaké programové kroky, kde bychom registry potřebovali na začátku nulovat. A to se hodí, protože paměť programu 7489 zůstala stejná jako u PIPa-2 a je dost maličká (16 kroků).

Namísto instrukce zastavování procesoru HALT jsem raději implementoval krokování (STEP). Je to podle mě užitečnější, než ten HALT.

Více funkcí procesoru si pochopitelně vyžádalo i větší počet instrukcí, které budou ovládat nové funkční celky. Instrukce, respektive jejich tzv. rozklad na mikroinstrukce má PIP uloženy v paměti PROM 74188. Tuto paměť jsem chtěl za každou cenu zachovat. A protože ji PIP využíval jen z poloviny, vše potřebné se mi do ní vešlo. Také výstupní dekodéry 1zN generující řídící signály pro jednotlivé funkční bloky procesoru má PIP využity jen z části, takže nebyl problém použít nevyužité výstupy na nové signály.

Takto vylepšeného PIPa jsem pojmenoval Claudia Lite. Co se týká složitosti, není o nic složitělší, než PIP. Dokonce bych řekl, že zapojení je díky těm "chytřejším broukům" přehlednější a snáze pochopitelné. A co se týká počtu integrovaných obvodů, tak jejich počet oproti PIPovi (25 IO) narostl jen minimálně - o tři pouzdra na 28 IO. A to za tu podstatně rozšířenou funkcionalitu rozhodně stojí!


Porovnání TTL procesorů PIP-2, Claudia Lite a Claudia-1

V následující tabulce je srovnání základních parametrů TTL procesorů PIP-2, Claudia Lite a Claudia-1:


 PIP-2CLAUDIA LiteCLAUDIA-1
Data BUS4 bit4 bit4 bit
Address BUS4 bit4 bit8 bit
Prog. memory16 x 4
(7489)
16 x 4
(7489)
256 x 4
½ z (4x 74S201 + 2x 74S287)
Micro ROM16 x 8
(½ 74188)
32 x 8
(74188)
256 x 8
(2x 74S287)
ALUADD
(7483)
ADDC, XOR
(7483, 7486)
Full ALU
(74181)
Flags-C, ZC, Z
Instructions61392*
Subroutines--1 level
num of IC's252865

(*) počet instrukcí u Claudie-1 je čistě teoretický. Ano, existuje 92 možných operačních kódů, ale některé instrukce jsou buď prakticky nevyužitelné (viz. některé operace s ALU 74181), nebo jsou duplikované (viz. masky podmíněných skoků). Ale i tak počet instrukcí tohoto procesoru výrazně převyšuje klasické 4-bitové procesory. Je to dáno tím, že některé instrukce jsou pseudo 8-bitové a bylo tedy k dispozici více možných operačních kódů, než 16 (odpovídajících jednomu nibble).

Pokud je v tabulce uvedeno, že se používá třeba ½ 74188 znamená to, že se z tohoto obvodu využívá jen polovina paměťové kapacity. Obvod samotný je ale pochopitelně osazen celý:-)

Na papíře je i verze Claudia-2, která se od jedničky liší jen zvětšeným rozsahem adresace paměti na 12 bitů (4096 nibblí) a zvětšeným zásobníkem návratových adres na 16 levelů (3x7489). Ono se totiž ukázalo, že těch 8 bitů (256 nibblí) adresace není nic moc na nějaké programování. Ale k její realizaci již těžko někdy dojde...


Procesor nebo počítač?

Přestože se o PIP-2, potažmo Claudii Lite budu v dalším textu občas zmiňovat jako o procesoru (CPU), ve skutečnosti se jedná o počítač. Procesor jakožto ústřední součást každého počítače se sám o sobě provozovat nedá. Je potřeba k němu připojit minimálně nějakou paměť s řídícím programem a daty a nějaké vstupní a výstupní obvody (porty) pro komunikaci s okolím či obsluhou. Připojením těchto obvodů k procesoru vzníká počítač, který již můžeme nějakým způsobem provozovat. V našem případě je k procesoru připojena paměť RAM 7489, do které můžeme ručně vložit program, který pak procesor zpracovává. Jako výstupní port slouží v případě PIPa-2 přímo výstup z registru A, u Claudie Lite pak máme speciální výstupní (OUT) registr. Jako vstupní (IN) port pak slouží páčkové spínače pro zadávání dat. U PIP-2 je možné je použít pouze k programování RAM, u Claudie Lite je možné je číst i během zpracovávání programu. Čili závěr je jasný. PIP-2 i Claudia Lite jsou primitivní počítače a nikoliv jen samotné procesory. Přesto jim občas procesor či zkráceně CPU (Central Processing Unit) budu říkat.

Ještě malá poznámka. Pokud je procesor spolu s pamětí a porty na jednom čipu, jedná se o tzv. jednočipový mikropočítač zkráceně jednočip. V současnosti se tomu říká spíše mikrokontrolér a je to třeba populární ATMEGA použitá v populárním Arduinu, nebo můj oblíbený 8051 a jeko klony.

A nyní se již můžeme podívat na zapojení Claudie Lite. Začneme blokovým schématem.


Úvod

Blokové schéma


Update: nakonec se ukázalo, že použití ALU 74181 v tak jednoduchém procesoru, jakým Claudia Lite je, není nemožné. Vznikla tak verze 2, které je jen nepatrným rozšířením verze původní a která ALU 74181 využívá!


RET



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