HOME

Test řadiče mikroinstrukcí 3001

s použitím čítače 7493 namísto paměti




Řadič mikroinstrukcí - obvod 3001 je základním elementem pro stavbu tzv. řezových procesorů, ale též obecných řídících systémů - mikroprogramových řadičů. Obvod se též označuje jako MCU či CPE - Central Processing Element, ale není to mikroprocesor. Je to prazáklad mikroprocesoru. Je to prostě řadič. Když se podíváte na blokové schéma nějakého procesoru, naleznete tam blok, který se jmenuje právě řadič a vedou k němu a od něj šipky ke všem ostatním blokům (registry, ALU a případné další periferie a bloky). Prostě celý procesor je řízen tím řadičem. Je to něco jako praprocesor uvnitř procesoru:-) A takový praprocesor je i mikrořadič3001.

Problém je, když si chcete takový řadič třeba jen primitivně otestovat, něco jako když testujeme mikroprocesor NOPováním. Obvod 3001 je tzv. mikroinstrukční řadič a ke své činnosti potřebuje připojenou pevnou paměť (ROM) s něčím co se nazývá mikroprogram tvořený mikroinstrukcemi. Jen pro pořádek, existuje ještě tzv. obvodový řadič, kde je sled činností napevno určen zapojením obvodů, ale to není případ 3001. Obvod 3001 nemá jako správný mikroinstrukční řadič žádný vnitřní čítač stavů. Následný stav se z předešlého stavu vždy odvozuje na základě mikroinstrukce z připojené paměti. V podstatě je to stejné, jako když se pes honí za svým vlastním ocasem. Řadič adresuje paměť a ta mu oplátku sdělí adresu své příští adresy:-) Teda úplně takhle jednoduchý to není, ale v podstatě je to tak.

Z toho tedy plyne, že pro svůj chod potřebuje mít 3001 připojenou paměť s mikroprogramem. Ačkoliv je obvod taktován hodinovým signálem, klasické NOPování neumí, protože neobsahuje žádný čítač programu a tudíž sám od sebe neumí přejít na další adresu. Prostě mu tu adresu musí napovědět někdo zvenčí. Paměť. A nebo ne? Lámal jsem si hlavu, jak obvod 3001 alespoň jednoduše otestovat bez nutnosti připojovat a hlavně programovat paměť. A napadlo mě použít klasický binární čítač (7493). Pak už jen stačí nějaký zdroj hodin, třeba jednoduchý AKO z hradel (já použil 7404), logická sonda a můžeme testovat:-)


Zapojení testu 3001
Zapojení testu 3001
Pinout 3000 family
Pinout 3000 family


Princip testu spočívá v tom, že se řadiči napevno vnutí (mikro)instrukce JZR (Jump to Zero Row - skok do řádku nula) a adresu sloupce 0-15 dodá právě čítač. Řadič se tedy bude pohybovat v řádku 0 a sloupcích 0-15 svého adresového prostoru. K pochopení předchozích vět je nutné chápat, jak má obvod 3001 rozdělen svůj adresový prostor. Obvod pracuje s 9 bitovou adresou a umí tedy přímo adresovat 512 buněk paměti mikroprogramu. Jenže tento prostor není lineární, ale maticový. Při adresování paměti se obvod se pohybuje v matici 32 řádků po 16 sloupcích a právě tohle je klíčové pro pochopení činnosti obvodu. Máme zde sice mikroinstrukce skoků - vlastě včechny mikroinstrukce jsou jen skoky - ale nelze si skákat dle libosti. Můžeme skákat v rámci sloupce i v rámci řádku, ale nikdy nelze skákat v rámci celého sloupce a řádku zároveň. Diagonální skoky jsou omezené jen na určitou oblast, která vždy vychází z předchozího stavu. Je to dáno tím, že výstupní adresa MAx je sice 9-bitová, ale vstup adresy ACx je pouze 7-bitový a minimálně 2 bity z toho tvoří operační kód mikroinstrukce. A když pak navrhete mikroprogram, který se v té matici pohybuje, musíte ho zase rozložit do lineárního prostoru a vypálit do paměti, protože ta jiný, než lineární prostor nemá:-) K pochopení výše uvedeného je potřeba studovat a studovat. Ale dostuné literatury je naštěstí dostatek. Jedinou vyjímkou je mikroinstrukce JZR, která umí i diagonální skok přes celou matici třeba z pozice pravý dolní roh do levého horního. Ovšem lze sice skočit odkudkoliv, ale jen a pouze do nultého řádku na pozici danou parametrem instrukce (0-15). A toho právě využívá tento popisovaný test.


Test obvodu CPE 3001
Test obvodu CPE 3001
Test obvodu CPE 3001
Test obvodu CPE 3001


Průběh testu je jednoduchý. Čtyřbitový čítač 7493 taktovaný synchronně s CPE 3001 dodává na vstupy pro mikroinstrukce (AC3-AC0) adresu sloupce 0-15 v nultém řádku. Na vstupech AC6-AC4 je napevno nastavena hodnota 02h, což je operační kód mikroinstrukce JZR. Obvod 3001 se tak pohybuje po nultém řádku na adresách sloupců 0-15 své matice adresního prostoru. Na výstupech MA3-MA0 se tedy se zpožděním asi půl taktu hodin objeví vždy stejná hodnota, jako je na čítači 7493. Výstupy MA8-MA4 jsou trvale v nule (nultý řádek matice). Na fotografiích je jasně vidět, že stav čítače 7493 (zelené LED) je vždy o krok napřed před výstupy MA3-MA0 obvodu 3001 (červené LED). Obvod tedy zpracovává vstupní data a na jejich základě vystavuje budoucí adresu mikroprogramu. To je celé.

Při zpracování mikroinstrukce JZR 15 je vždy aktivován výstup ISE (strobování případné žádosti o přerušení). Je-li tedy na výstupech čítače 7493 hodnota 15, objeví se na celý takt log. 1 na ISE. Jinak je ISE trvale v log. 0.

Další, co můžeme testovat je zpracování vstupního příznaku FI, jeho přepis do vnitřních registrů C a Z a kopírování Z (nebo C) na výstup FO z 3001. K tomu je nutné nastavit řídící vstupy FC3-FC0 u 3001 takto: FC1-FC0 = 00h (kopíruje FI do C i Z), FC3-FC2 = 10h pro výstup registru Z na FO (01h pro výstup registru C). Při tomto nastavení bude prostě výstup FO kopírovat vstup FI se zpožděním vždy jednoho taktu hodin. Nejprve se totiž přepisuje vstup FI do pomocného vnitřního registru F a teprve v dalším taktu se přepisuje do C, nebo Z, nebo obou současně. Viz. manuál 3001. Jelikož je výstup /FO invertovaný, je vhodné k němu připojit LED přímo, nebo přes neinvertující hradlo!

Poslední, co lze jednoduše otestovat je odpojování výstupních adresových budičů. Stačí připojit log. 0 na vstupy EA a ER u 3001. Výstupy adres MA8-MA0 se tímto uvedou do třetího stavu (vysoké impedance). Vnitřní činnost řadiče ovšem pokračuje dále!

Suma sumárum otestovat se toho dá docela dost a lze si udělat celkem solidní představu o fungování CPE 3001 jako takového. A to vše s mimimem prostředků. Na testování v nouzi vystačíme jen s logickou sondou. Ačkoliv je vhodné připojit 4 LEDky na výstupy 7493 a další 4 na MA3-MA0 3001. Třeba tak, jak je naznačeno na schématu. Je to pak takový hezčí a světýlka já rád:-)

Pro komplexní otestování obvodu 3001 bychom potřebovali namísto čítače připojit naprogramovanou paměť s nějakým testovacím (mikro)prográmkem. Nebylo by to o moc složitější, ale přeci jen je to o pár drátů více a nutnost vymýšlet a programovat. Ovšem pak by se daly testovat i vstupní podmínky PX7-PX4 a SX3-SX0, potažmo registr PR. Jenže proč? Myslím, že i test s čítačem spolehlivě prokáže základní funkčnost obvodu 3001. A o to jde především.

Jelikož obvod 3001 začíná svůj cyklus s náběžnou hranou hodin, kdy vystavuje novou adresu mikroinstrukce na výstupy MAx, je nutné před hodinový vstup čítače 7493 dát invertor. Čítač 7493 překlápí na sestupnou hranu. Kdyby tam někdo chtěl dát třeba 74193, tak se ten invertor musí vypustit. Ovšem nevím, zdali by to pak fungovalo. Invertor tam totiž vnáší důležité zpoždění, viz níže. Frekvence hodin by měla být taková, aby byly všechny impulsy pěkně viditelné pouhým okem. Tedy v nižších jednotkách Hz. To je s uvedenými součástkami (1K a 100uF) splněno.

Mohlo by se zdát, že čítač by měl čítnout vždy na sestupnou hranu CLK, aby byla nová mikroinstrukce na vstupech AC7-0 s dostatečným předstihem a zároveň nedocházelo ke změně opkódu bezprostředně po načtení předcházejícího stavu. Ale takto jsem to zkoušel schválně. I v reálném procesoru s řadičem 3001 totiž dochází ke změně mikroinstrukčního kódu bezprostředně po náběžné hraně hodin a pouze zpoždění vybavení paměti mikrokódu musí postačovat, aby řadič načetl stabilní předchozí kód. Zde jsem chtěl ověřit, že postačuje zpoždění dané invertorem a čítačem 7493. Postačuje.



Jde to ještě jednoduššeji? Jde!

Původně jsem si myslel, že test mikrořadiče 3001 za pomoci čítače 7493 je asi ten nejjednodušší možný, ale ukázalo se, že to jde i bez čítače:-)


Publikováno: 3/2018    
Update: 11/2022    



« RET          ↑ TOP ↑          HOME