Kniha jde do finiše

Včera přišla od nakladatele vysázená kniha k závěrečné korektuře. Vypadá to fakt dobře, mám radost, a abyste věděli, na co se těšit, tak tady máte malou ukázku: předmluvu a obsah.

Nakonec to dopadlo o trochu jinak, než jsem původně plánoval. Dodatky k předchozí knize zůstanou tady, na webu, a místo toho jsem se soustředil jen na FPGA a jejich programování v jazyce VHDL.

Pro praktické ukázky jsem vybral Alteru / Intel, konkrétně řadu Cyclone a dva levné kity. Už jsem se tu o nich zmiňoval, a díky aktivitě Oldřicha Horáčka z hwkitchen si je můžete koupit přímo v ČR a nečekat, až dojdou z Číny.

Pokud si myslíte, že jsem udělal špatně, že jsem měl vybrat Xilinx, Lattice nebo Verilog, tak je mi to úplně jedno. Děkuju za pochopení.

Já mám tímto třetím dílem vlastně splněno. Dokončil jsem dílo, které jsem si vymyslel před pěti lety. Nakonec tam je opravdu skoro všechno, co jsem si předsevzal a co jsem chtěl říct. Cesta od elektronu přes polovodiče až k vlastnímu mikroprocesoru očima člověka, který se elektronikou nemusí živit, ale má ji od dětství rád.

Děkuju všem, kdo mě při psaní podporovali – třeba jen tím, že mi napsali, že se jim to dobře četlo, anebo poslali příspěvek, za který jsem koupil další kit na testy. Děkuji vydavateli, bez něhož by nevyšlo nic a který mě jemným tlakem na deadline donutil knihu nejen rozepsat, ale taky dokončit.

Díky. Snad se vám i třetí kniha bude líbit.

Celý příspěvek
Rubriky: Knihy | Komentáře nejsou povolené u textu s názvem Kniha jde do finiše

Krystalové oscilátory

(Další kapitola, co se do Portů bajtů… nevešla)

Na to, že je přesný hodinový zdroj srdcem každého počítače, jsme se vlastními oscilátory moc nezabývali. Nemuseli jsme – všechny procesory, které jsme použili, měly zabudovaný oscilátor a stačilo jen připojit krystal a zátěžovou kapacitu (load capacity). Zátěžová kapacita má nejčastěji podobu jednoho nebo dvou kondenzátorů s kapacitou mezi 22 a 48 pF, a když nevíte, jakou přesně použít, podíváte se do datasheetu k procesoru, a tam to bývá popsané.

Důležité je jen dodržet pravidlo „velká zemnicí plocha kolem krystalu“. Při frekvencích, které používáme, nejsou kapacity, včetně těch parazitních, jako třeba kapacita plošného spoje, nijak výrazně kritické. U rychlejších obvodů by to byl problém, ale okolo 2 – 4 MHz, kde se pohybujeme my, není třeba přesně počítat kapacitu plošného spoje, stačí dodržet pravidla „velká zemnicí plocha okolo krystalu“ a „netahat signálové vodiče poblíž“.

Když se do teorie krystalových oscilátorů ponoříte hlouběji, zjistíte, že možných zapojení je několik a že se rozlišují dva základní typy: paralelní a sériový. Krystaly mohou kmitat na dvou základních frekvencích, které se, aby se to nepletlo, rovněž nazývají sériová a paralelní. Sériová je o něco málo nižší než paralelní.

Obecně platí, že krystal se chová jako součástka, jejíž impedance (odpor) je nejnižší, pokud jí prochází střídavý proud s rezonanční frekvencí rovnou jeho mechanickým vlastnostem. Impedance krystalu je nulová ve dvou bodech – v rezonančním bodu (sériová frekvence) a v antirezonančním bodu (ideální paralelní frekvence).

U krystalů, které používáme my, tedy s kmitočty v řádu jednotek megahertzů, většinou není nutné řešit přesný rozdíl mezi sériovou a paralelní frekvencí. Stejně tak pro osmibitový hobby počítač není moc potřeba řešit teplotní kompenzaci a podobné věci, které musí řešit návrháři velmi přesných hodin.

Pokud si budete stavět samostatný krystalový oscilátor pro číslicová zařízení, pravděpodobně zvolíte zapojení s invertory. Ostatně i v těch mikroprocesorech, co mají „zabudovaný generátor hodin“, je použité stejné zapojení. Pomocí jednoho (paralelní) nebo dvou (sériové) invertorů vytvoříte první část oscilátoru, totiž zesilovač. O druhou část oscilátoru, o zpětnou vazbu, se postará právě krystal.

Sériové zapojení

První zapojení, sériové, používá dva invertory TTL LS/ALS, mezi nimiž je zapojen vazební kondenzátor C1 (někdy bývá vynechán) s kapacitou jednotek či desítek nF. Jeho úkolem je odfiltrovat stejnosměrný proud. Oba invertory mají zapojené zpětnovazební rezistory, které je udržují v oblasti lineárního zesílení. Jejich hodnota není kritická, pro frekvence 1 – 4 MHz se doporučuje okolo 2k2. Jiné zdroje doporučují R2 spočítat jako 3000/f, kde f je frekvence v MHz.

Kondenzátor C2 je již zmíněný zátěžový – většina krystalů pro naše frekvence počítá se zátěžovou kapacitou mezi 22 – 33 pF, ale jak už jsem psal: hodnota není zcela kritická.

Raději to explicitně zmíním: Když píšu, že „hodnota není kritická“, tak tím mám na mysli, že není kritická pro uvažované použití, tedy generátor kmitů v řádu jednotek MHz bez nároku na vysokou přesnost.

Pomocí trimru C3 můžete kmitočet celého zapojení ještě jemně doladit, ale pokud nepotřebujete vysokou přesnost, můžete trimr vynechat.

Paralelní zapojení

Paralelní oscilátor používá pouze jeden jediný invertor TTL LS/ALS.

Rezistory R1, R2 a kondenzátor C4 fungují jako zpětná vazba pro udržení invertoru v oblasti lineárního zesílení. R1 a R2 mají odpor 1k, kondenzátor C4 kapacitu okolo 250 nF.

Zátěžové kondenzátory C1 a C2 mají opět kapacitu 22 – 33 pF, trimr C3 dolaďuje frekvenci, není nutný.

Pokud si postavíte tento oscilátor a použijete invertor 74HC04, 74HCT04 nebo jiné hradlo s technologií CMOS, zjistíte, že si ani nekmitnete. Oscilátor prostě nepoběží a nebude kmitat.

Někde se můžete setkat s názorem, že to je proto, že CMOS obvody jsou příliš rychlé, ale to není ten pravý důvod. Ony ve skutečnosti nejsou výrazně rychlejší než TTL LS. Pravý důvod je ten, že mají vyšší zisk a obrovský vstupní odpor. To znamená, že ve výše uvedeném zapojení je velmi těžké udržet je v lineární oblasti.

Oscilátor s CMOS

Proto se používá modifikované zapojení s rezistorem sériově zapojeným u krystalu.

Rezistor R1, který udržuje invertor v pracovní oblasti, může mít řádově stovky kiloohmů. Typicky se používá hodnota 180 k, která je pro CMOS invertory více než dostatečná. Ale můžete použít téměř cokoli od 47 k po 1 M.

Ladicí trimr C3 se opět používá k jemnému doladění, nebo se vynechává. Rezistor R2 pak omezuje proud krystalem, ale zároveň spolu s kondenzátorem C2 tvoří dolní propust, která brání krystalu kmitat na vyšších harmonických frekvencích.

Pokud v tomto zapojení použijete TTL LS/ALS hradlo, třeba 74LS04, také nebude kmitat. Velmi velký odpor ve zpětné vazbě jej nedokáže udržet v pracovní oblasti.

Výstup oscilátorů se většinou nepoužívá přímo. Ačkoli jsou invertory součástky číslicové, v těchto zapojeních z nich děláme trochu analogové zesilovače a nutíme je pracovat v oblastech zakázaného pásma. Kondenzátory navíc deformují strmost hran. Bývá proto dobrým zvykem na výstup připojit ještě jeden invertor (ne nutně se Schmittovým obvodem, ale pokud jej máte k dispozici, použijte jej), který ošetří strmost hran, posílí výstup a oddělí jej od zbytku obvodu.

K dalšímu studiu:

Rubriky: Hardware, Knihy | Komentáře nejsou povolené u textu s názvem Krystalové oscilátory

Sám sobě programátorem EEPROM

(Kapitola, co se do Portů bajtů… nevešla)

U všech konstrukcí OMEN jsem v zapojení paměti EEPROM navrhl jumper / přepínač, většinou nazvaný WREN – WRite ENable, a zároveň jsem psal, že při práci by měl být zapojený tak, aby na vstupu /WE byla stále logická 1.

Tak proč tam tedy je? Proč jsem ho nepřipojil přímo na +5 voltů?

Když je vstup /WE u paměti EEPROM připojený na logickou 1, je zakázaný zápis. A to je dobře, tak to má být a tak to chceme. Většinou chceme z paměti (EEP)ROM jen číst. Pokud do ní nějaký kód zapisuje, je to většinou omylem, a kdyby se zapisovat mohlo, přineslo by to spíš mrzení, než užitek.

Ale existují i situace, kdy je dobré zápis povolit. Například tehdy, kdy chcete aktualizovat firmware, obslužný program, nebo do EEPROM přidat nějaké rozšíření. Což jsou věci, které čas od času mohou být k užitku, proto je dobré je nějakým způsobem umožnit, ale zároveň je člověk nepoužívá denně a rutinně, tak nevadí, když jejich povolení je trochu netriviální. Pokud možno tak složité, aby k němu nemohlo dojít náhodou. Ideální je proto použít takzvaný pin header, neboli tři kovové kolíčky, a věc, které se říká „shunt“ nebo též „jumper“, a která vodivě spojí vývody 1-2, nebo 2-3.

Na této ukázce ze schématu OMEN Alpha je zmíněný přepínač zakreslený s označením JP5. Pokud jsou spojené vývody 1 a 2, je na vstup /WE přivedeno napájecí napětí. Pokud jsou spojené vývody 2 a 3, je na tento vstup přiveden signál /WR od procesoru. Podobné zapojení je i u Brava a Echa, protože princip práce je stále stejný.

Asi tušíte, že v zápisu do paměti EEPROM bude nějaký háček, a tušíte správně. Asi ten hlavní háček, přímo hák, je ten, že se něco nepovede. Data se zapíšou špatně, program bude mít chyby, přepíšete si základní programové vybavení, a po restartu budete mít zařízení ve stavu „brick“, tedy funkční obdobu cihly.

Druhý háček vyplývá ze samotného principu zápisu dat do paměti EEPROM. Z hlediska připojení se taková paměť neliší od RAM: přivedete data na datovou sběrnici, adresu na adresní, aktivujete signály /CS a /WE, a je to! Jenže EEPROM je přeci jen primárně ROM, tedy paměť pouze ke čtení, a ačkoli máme možnost přepsat data, má to své záludnosti. Třeba to, že zápis trvá docela dlouho, a po tu dobu by paměť neměla být rušena, a už vůbec by po ní neměl někdo chtít nějaká data.

Většina pamětí EEPROM, a platí to i pro oba typy, co v konstrukcích používáme, tedy AT28C64 a AT28C256, umí zapsat data buď po jednotlivých bajtech, nebo po celých blocích, ale poté, co zapíšeme data, respektive celý blok, musíme čekat. U těchto pamětí je čekací doba až 10 milisekund; u jejich rychlejších variant, třeba 28C256F, to jsou 3 milisekundy.

To fakt není žádná super rychlost. Kdybychom zapisovali bajt po bajtu do paměti OMEN Alpha, což je 32 kB, tak to bude trvat 32768 x 10 ms = 327,68 s, což je něco přes pět minut. Pokud využijeme zápisu po blocích 64 bytů, zvládneme to za pět sekund.

Důsledkem tohoto omezení je, že program, který zapisuje do EEPROM, nemůže být v této EEPROM zároveň spuštěný. Po zápisu bajtu by procesor přistupoval k téže paměti. Paměť by to brala jako znamení, že má začít zapisovat, na 10 milisekund by se odmlčela, ale procesor by během těch deseti milisekund z téže paměti četl instrukce. Jenže po dobu zápisu paměť posílá na datovou sběrnici informace o tom, že zapisuje, resp. že už zápis skončil, takže by se místo instrukcí četly nesmysly, program by okamžitě zhavaroval, a brick by nastal dřív, než stačíte říct „RESET!“

Takže dvě zlatá pravidla:

  1. Program, který zapisuje do EEPROM, musí celý kompletně běžet v RAM a musí zajistit, že během zápisového cyklu se na sběrnici neobjeví žádná adresa, která by aktivovala paměť EEPROM.
  2. Program, který přepisuje EEPROM, musí být trojnásob opatrný než běžný program. Všechna data zkontrolujte dřív, než je prohlásíte za zapsaná, raději pomaleji, ale bezpečně, nezapomeňte zakázat všechna přerušení a modlete se, aby odněkud nepřišlo nemaskovatelné přerušení.

Jak zapsat do EEPROM?

Samotný zápis je úplně stejný jako při zápisu do RAM. Použijte jakoukoli instrukci, která zapisuje do paměti, a pokud bude adresa odpovídat EEPROM a předtím povolíte zápis do EEPROM (hardwarovým přepínačem, viz výše), paměť začne ukládat zapsaný bajt na zadanou adresu. Během zápisu z paměti nelze číst data, namísto toho načítáte stavové informace.

Blokový zápis umožňuje zapsat až 64 po sobě jdoucích bajtů najednou. Pro zápis bloku není potřeba žádná speciální instrukce, prostě zapisujete na adresu a, a+1, a+2, … Stačí dodržet dvě prostá pravidla:

  • Mezi zapsanými daty nesmí uplynout víc než 150 mikrosekund, což není většinou problém; u Alphy to vychází na 276 hodinových taktů, během té doby stačíme spolehlivě připravit nový bajt a zapsat ho.
  • Všechny adresy v bloku musejí mít stejnou hodnotu v bitech A6 – A14 (u 28C256; u paměti 28C64 to jsou bity A6 – A12). Při zápisu bloků můžete měnit pouze bity A0 – A5, tedy nejnižších 6 bitů adresy.

Jakmile tato pravidla nedodržíte, tj. nastane větší časová prodleva nebo další adresa překročí hranici bloku 64 bajtů, paměť další data zahodí a spustí interní zápisový cyklus.

Po spuštění interního zápisového cyklu paměť další požadavky na zápis ignoruje. Tento cyklus může trvat až 10 milisekund, jak jsme si už řekli. Během této doby paměť informuje o tom, že se zapisují data, prostřednictvím dvou mechanismů, /DATA Polling a Toggle bit.

/DATA Polling spočívá v tom, že program čte data ze stejné adresy, kam naposledy zapisoval. Dokud trvá zápis, je v nejvyšším bitu D7 invertovaná hodnota zapisované hodnoty. Tedy pokud jste jako poslední hodnotu zapsali například 0x55 (což je binárně 01010101) na adresu 0xAAA, budete při čtení z téže adresy načítat hodnotu, která má v nejvyšším bitu 1. Jakmile cyklus zápisu skončí, bude načtená hodnota odpovídat tomu, co jste do paměti zapsali.

Druhá metoda kontroly je bit toggling – během cyklu zápisu se při čtení bude hodnota bitu D6 pravidelně měnit 0 – 1 – 0 – 1 atd. Když cyklus zápisu skončí, hodnota D6 se měnit přestane.

Obě tyto metody můžete použít k určení, zda je bezpečné zapisovat další data. Alternativní postup je prostě vyčkat deklarovaných 10 milisekund. Ale reálná kontrola stavu pomocí technik /DATA polling nebo toggle bit je nejjistější.

Můžete se inspirovat malým ukázkovým programem (pro OMEN Alpha), kde je použita právě technika /DATA polling: https://8bt.cz/eepw

Rubriky: Hardware, Knihy, OMEN | Komentáře nejsou povolené u textu s názvem Sám sobě programátorem EEPROM

Nad dotazy čtenářů

Proč se nepoužíval obvod 8051 v domácích mikropočítačích? A proč nepůjde připojit ZX Spectrum k modernímu zobrazovači bez úprav?

Občas mi vy, čtenáři, píšete zajímavé dotazy a já si říkám, že je škoda odpovídat jen mailem jednomu, protože to může zajímat víc lidí. Zkusím tedy nepravidelný formát takovýchto veřejných odpovědí.

První dotaz poslal pan Tomáš:

zaujal mě váš článek https://retrocip.cz/monitor-ke-starym-pocitacum-za-par-korun/, kde vysvitla nová naděje na připojení parkovacích kamerek k mému ZX81.

Otázka je, zde by to fungovalo (obecně tyhle krámy typu TFT monitor s PAL vstupem) na neupravených ZX 80/81/Spectrum, tzn. tak jak jsou, bez předělávek na s-video apod.

Předem díky za názor / radu, moc by mi to pomohlo.

Odpověď je jednoduchá, ale nepotěší:

Tyhle monitory očekávají vstup jako standardní video v normě PAL. ZX Spectrum i ZX81 bez úpravy(!) pouštějí ven sice videosignál PAL, ale namodulovaný na televizní přenosovou frekvenci, aby simuloval signál, přijatý z antény.

Takový signál se připojí k anténnímu vstupu, z něj jde do vstupního filtru, kde musí být naladěn kanál se stejnou přenosovou frekvencí, a pokud tomu tak je, tak projde dál, a tam z něj televize rekonstruuje zpátky PAL.

Což je taky důvod, proč obraz není tak kvalitní – protože se moduluje nejprve na 36. kanál UHF (603.25 – 607.75 MHz), s touto frekvencí se přenáší po kabelu do televize, a tam se zase demoduluje zpět na původní PAL, a právě tento proces způsobuje ztráty a rušení.

PAL monitor chce právě ten videosignál. Odstraňuje celý složitý řetězec modulace a demodulace, ale musíte si ze ZXS/ZX81 vyvést ten nemodulovaný signál. Složité to není, ale je to, přeci jen, nějaký zásah…

Pro zájemce: Zde je návod na vyvedení videa ze ZX81, popřípadě zde, pokud máte ZX80 či Timex. Je to o něco náročnější úprava, protože je potřeba videosignál trochu zesílit tranzistorem.

U ZX Spectra se jednoduše odpojí modulátor a na anténní výstup se přivádí přímo videovýstup. Návod krok za krokem je třeba tady (ZX Spectrum Composite Mod), nebo tady (ZXS 48k video). Sice je anténní vývod trochu jiný než standardní RCA konektor pro video („CINCH“), ale použít ho lze. Nebo můžete druhý konektor prostě přidat:

Druhý dotaz poslal pan Jan:

proč se do jednodeskových počítačů nepoužíval mikrokontroler 8051? Formálně se jedná o Hardvardskou architekturu, ale i v návodu se píše, že je možno použít jednu RAM na kód i data spojením signálů /PSEN a /RD. Domníval jsem se, že bych získal von Neumannovský procesor s obdobnou instrukční sadou a rychlostí jako zmiňovaná 8080, který má (může mít) navíc on-chip ROM pro monitor, serial port, časovače, a jeden volný I/O port. V podstatě celý Omen Alpha na jednom čipu (krom paměti). Přišel 8051 na jednodeskové osmibity příliš pozdě? Byl příliš drahý? Nebyly dostupné dostatečně rychlé nebo velké RAM paměti? Nebo je tam nějaká jiná zrada, která takové využití znemožňuje?

V první řadě přišel x51 příliš pozdě (až v roce 1980), takže v relevantní době už měli konstruktéři naučené postupy s obyčejnými CPU. V té době byly dostupné nejen 8080, 6502 nebo Z80, ale i 8086 (1978) nebo 8088 (1979). Ve stejném roce jako 8088 přišla i Motorola 68000. Takže podle mě nejpravděpodobnější důvod je ten, že řada x51 přišla příliš pozdě na to, aby zasáhla do dějin osmibitů.

Ne že by žádné mikropočítače takového typu neexistovaly – existovaly, ale bylo jich výrazně méně. Docela často se x51 používal třeba v herních konzolích.

Ale největší nevýhoda a hlavní důvod, proč se x51 nerozšířil v domácích počítačích, byl ten, že sice umožňoval práci s externí pamětí, ale nebyly instrukce, které by ji dokázaly využívat jako operační. U 6800 / 6502 / Z80 atd. byl jen jeden paměťový prostor. Mikrořadiče x51 pracovaly přímo jen s vnitřní RAM a s bohatou sadou registrů, ale pro přístup k externí paměti měly jen instrukci MOVX (v popsaném případě by šla použít i MOVC) s nepřímým adresováním, srovnatelným např. s tím, že byste u procesoru 8080 měli pro práci s obsahem paměti pouze instrukce MOV M,x a MOV x,M.

Rubriky: Hardware, Knihy | Štítky: , , , , , | Komentáře nejsou povolené u textu s názvem Nad dotazy čtenářů

MyMensch – 65C02 v novém

Víte, už jsem si myslel, že jsem jeden z mála bláznů, co přepisují staré procesory do FPGA. Tak: nejsem! Dělají to i jiní, lepší…

Třeba The Western Design Center, neboli WDC, společnost Billa Mensche, spoluautora MOS6502. Ta dodneška vyrábí nejen procesory W65C02, ale i šestnáctibitovou verzi W65C816, a oba dokonce jako mikrokontrolér se zabudovanými periferiemi a monitorem v ROMce (W65C134 a W65C265).

Ke všem procesorům mají i vývojové desky, můžete se mrknout: W65C02SXB, W65C816SXB, W65C134SXB a W65C265SXB. Pokud vás zaráží, že „mikrokontrolérové“ verze jsou levnější než ty s původními procesory, je to proto, že na desce s „holým“ procesorem jsou i periferní obvody, které u mikrokontroléru nejsou potřeba, protože jsou integrované.

Mimochodem, za necelých 20 USD nabízejí MENSCH Microcomputer, což je vlastně W65C816, 16bitový následovník slavné 65C02, zabalený spolu s několika periferiemi do podoby jednočipu (W65C265). Na desce toho o moc víc není, ale máte většinu pinů vyvedenou, a je to taková dobře použitelná varianta, když chcete nasadit 65C816 a zároveň ušetřit za periferie.

Ale zpátky k FPGA: Ve WDC samozřejmě už delší dobu nabízejí svoje procesory jako IP (Intellectual Property) pro syntézu obvodů v logických polích. Teď se rozhodli nabízet vlastní „nový“ procesor, opět jako IP, ale tentokrát připravili i vývojovou desku W65Cx65MMC, familiárně zvanou MyMensch.

Deska obsahuje kromě USB převodníku, spousty pinů, tlačítek RESET a NMI, osmi LEDek a JTAG rozhraní hlavně prostor pro FPGA řady MAX10 v provedení BGA.

Mají připraveno několik variant, ta první (Rev-A), která je dostupná na trhu a kterou po mém dotazu dali do prodeje i na Tindie, kde není omezení pro zasílání do ČR, obsahuje FPGA MAX10M08SC, ve kterém je „nahraný“ obvod W65C02i1M08SC.

Že jste o něm nikdy neslyšeli? Nedivím se, je to úplná novinka. Jak název napovídá, je tam W65C02 a je to v MAX10M08SC. Ale kromě samotného jádra 65C02 zaintegrovali i:

  • 2x W65C22 VIA (paralelní porty)
  • 2x W65C51 ACIA (sériové porty)
  • Rozhraní I2C
  • Rozhraní SPI
  • JTAG
  • HW násobičku a děličku
  • Paralelní rozhraní pro maticovou klávesnici 4×4 s debounce logikou
  • Rozhraní pro uživatelskou FLASH paměť UFM
  • Unikátní 64bitové ID
  • 30 kB RAM pro uživatelské programy (s mechanismem ochrany paměti proti přepsání)
  • 2 kB Boot loader
  • 12 kB RAM pro data
  • Hardwarový breakpoint
  • … a zbytek jsou vstupně-výstupní piny GPIO

Celé to běží na 14.7456 MHz, ACIA mají 1.8432 MHz (tedy maximální komunikační rychlost je 115200 Bd)

Blokové schéma, autor: dokumentace WDC

Pokud si chcete hrát s 65C02, i když ne s tou úplně originální, a chcete k tomu použít hotový systém s mnoha a mnoha možnostmi, dokonce i s modernější 3.3V logikou, zkuste třeba právě MyMensch.

Mimochodem, WDC na téhle technologii provozuje i nějaké gadgety pro Internet věcí

(Předpokládám, že můžete FPGA sami naprogramovat a použít tak desku jako běžný FPGA devkit, ale obávám se, že původní obsah už nezískáte…)

Rubriky: Emulace, Hardware, IoT | Štítky: , , | Komentáře nejsou povolené u textu s názvem MyMensch – 65C02 v novém

Čipy, data, procesory

Dodatky ke knize právě vznikají pod názvem Čipy, data, procesory. Hlavní část textu se věnuje práci s programovatelnými logickými poli (FPGA) a jazyku VHDL, který slouží k popisu číslicových obvodů. Kromě syntézy počítačů z hotových komponent se dostaneme i k návrhu vlastního mikroprocesoru!

Dalšími tématy v knize jsou například krystalové oscilátory, návod, jak můžete přeprogramovat EEPROM přímo v počítači OMEN za chodu, střípky z historie mikroprocesorů, nebo třeba popis „šestnáctibitového 65C02“, tedy obvodu WDC 65C816, který poháněl některé modely počítačů Apple // a sloužil jako „SuperCPU“ ve stejnojmenné kartě k počítačům Commodore. Poprvé v češtině najdete i podrobný návod k použití extrémně vylepšeného osmibitového procesoru 6809 – Hitachi HD6309.

Kniha postupně vzniká, některé části jsou už napsány a zveřejněny, jiné zatím čekají. To, kdy budou dopsány, záleží jen na zájmu čtenářů. K dopsání můžete přispět i vy!

https://www.osmibity.cz/addons.html
Rubriky: Knihy, OMEN | Štítky: | Komentáře nejsou povolené u textu s názvem Čipy, data, procesory

Zapište si do kalendářů: Patnáctého května vychází Porty, bajty, osmibity

Já vím, otravoval jsem tu s tím už rok, ale konečně se TO stane! 15.5. začne prodej druhé knihy, tentokrát věnované stavbě osmibitových počítačů. Ponese název Porty, bajty, osmibity a opět ji vydá sdružení CZ.NIC.

Celý příspěvek
Rubriky: ASM80.com, Hardware | Štítky: , | Komentáře nejsou povolené u textu s názvem Zapište si do kalendářů: Patnáctého května vychází Porty, bajty, osmibity

OMEN Kilo: Zapojení procesoru

Čím jiným začít, než fyzickým zapojením procesoru 6809…

Možná nepřekvapí jistá podobnost s procesorem 6502. Je to logické, protože, jak jsme si už několikrát řekli, 6502 i 6809 vycházejí ideově z téhož předchůdce, 6800.

Popis vývodů

Procesor má vyvedené obě hlavní sběrnice, jak datovou (D0 – D7), tak adresní (A0 – A15). Tady nás nečeká žádné překvapení. Signály nejsou multiplexované a jsou plně k dispozici.

Vstup /RESET slouží k inicializaci procesoru do výchozího stavu. Na vstupu je Schmittův klopný obvod, takže stačí jednoduché zapojení s kondenzátorem a rezistorem, podobně jako u předchozích počítačů. Po RESETu se načte adresa (2 bajty) z adres FFFEh a FFFFh a získaná hodnota se použije k nastavení programového čítače PC. Nezapomeňte, že 6809 používá ukládání ve stylu Big Endian, tedy nejprve vyšší část adresy, poté nižší. Vyšší část tedy bude na adrese FFFEh, nižší na FFFFh.

Výstup R/W informuje okolí o tom, jestli procesor hodlá číst (=1), nebo zapisovat (=0). Opět, podobně jako u 6502, se nerozlišují periferie a paměť, pro procesor je vše „paměť“.

Pro připojení krystalu se používají vývody XTAL a EXTAL. Pokud použijete externí generátor časovacích pulsů, přiveďte signál na vstup EXTAL a XTAL nechte nezapojený.

Uvnitř poběží procesor na frekvenci, která je rovna čtvrtině frekvence krystalu (popřípadě přivedené frekvenci). U OMEN Kilo jsem tedy použil frekvenci 7,3728 MHz, která po podělení čtyřmi dává naši oblíbenou pracovní frekvenci 1,8432 MHz.

Existují tři varianty tohoto procesoru, které seliší podle maximální pracovní frekvence: 6809, 68A09 a 68B09. Varianta bezpísmene pracuje na frekvenci 1 MHz, varianta A používá 1,5 MHz a varianta Bmůže pracovat až s frekvencí 2 MHz (to znamená, že externí krystal můžemít frekvenci 4, 6, resp. 8 MHz).

Pro řízení vnějších obvodů slouží hodinové signály E a Q. E má stejnou funkci, jakou má u 6502 výstup PHI2. Sestupnou hranou na výstupu E oznamuje procesor, že začíná operační cyklus. Poté přijde vzestupná hrana na výstupu Q a oznámí, že na adresní sběrnici je platná adresa. Následuje vzestupná hrana signálu E, sestupná signálu Q (bez speciálního významu) a celý cyklus ukončuje (a zároveň zahajuje nový) sestupná hrana signálu E, při níž přečte procesor data ze sběrnice.

Pro většinu jednoduchých případů můžeme signál Q (Quadrature time) ignorovat a pracovat pouze se signálem E, stejně jako u 6502.

Pozor na variantu 6809E! Tato varianta nemá interní oscilátor, vyžaduje externí generátor dvoufázových hodin a zapojení vývodů je lehce odlišné.

Výstupy BA a BS informují o tom, zda je procesor odpojený od sběrnice (ve stavu HALT / DMA) či zda reaguje na požadavek na přerušení apod. Za normálního chodu jsou oba v 0 a pokud nepotřebujete nějak speciálně reagovat na výjimečné stavy, můžete oba ignorovat.

Vstup MRDY slouží k témuž, k čemu sloužily vstupy READY, /WAIT či RDY – informuje o tom, že externí obvody nezpracovaly požadavek a že potřebují, aby procesor počkal. Pokud je tento vstup v log. 0, hodiny se zastaví ve stavu E=1, Q=0 a čeká se, až bude MRDY opět 1. Teprve pak procesor dokončí čtení dat, popřípadě přestane posílat data k zápisu, a pokračuje se dál.

Vstup /DMA/BREQ slouží k přerušení práce procesoru a jeho odpojení od sběrnice. Pokud je na tomto vstupu na konci aktuálního cyklu 0, procesor se uvede do stavu DMA a uvolní sběrnici. Uvolnění sběrnice signalizuje nastavením BS = BA = 1. Okolní zařízení teď má až 15 cyklů na to, aby si udělalo, co je potřeba. Po 15 cyklech si procesor vezme dva cykly pro vnitřní refresh a na tu dobu nastaví BS = BA = 0. Pokud stále trvá požadavek na DMA, celý postup se opakuje.

Vstup /HALT zastaví procesor podobně jako předchozí vstup. Do stavu HALT se procesor přepne poté, co dokončí aktuálně prováděnou instrukci. Opět se odpojí od datové i adresní sběrnice, odpojí i výstup R/W, a nastaví BS = BA = 1.

Přerušení

Poslední tři vstupy, o nichž jsem se ještě nezmínil, jsou vstupy /NMI, /FIRQ a /IRQ. Jejich stav je vyhodnocován ve chvíli sestupné hrany Q (E=1).

/NMI je dobře známé „nemaskovatelné přerušení“. Logická 0 na tomto vstupu vyvolá přerušení, které programátor nemůže programově zamaskovat. Jediná výjimka je těsně po RESETu, dokud není nastaven obsah v registru ukazatele zásobníku (S). Po detekování požadavku na NMI je na zásobník automaticky uložen obsah registrů PC, U, Y, X, DP, A, B a CC a procesor si z adres FFFCh a FFFDh načte adresu obsluhy nemaskovatelného přerušení. Toto přerušení má zároveň nejvyšší prioritu.

Téměř identicky se chová požadavek /IRQ. Dva rozdíly tu ale jsou. Zaprvé: adresa obsluhy přerušení se bere z adres FFF8h a FFF9h. A zadruhé: pokud je bit I v registru CC roven 1, přerušení se nevykoná.

Vstup /FIRQ (Fast IRQ) funguje obdobně jako IRQ. I tento vstup vyvolá přerušení (adresa obsluhy je v paměti na FFF6h a FFF7h), i toto přerušení lze zamaskovat bitem F v registru CC, ale hlavní rozdíl je, že neukládá na zásobník žádné jiné registry, jen programový čítač PC a registr příznaků CC.

OMEN Kilo CPU

Základní deska, která vychází z koncepce OMEN Bravo. Obsahuje jen procesor, 32 kB RAM, 8 kB EEPROM, dekodér signálů a nezbytné obvody okolo (RESET, krystal). Nakonec jsem k „nezbytným obvodům“ přidal i nám důvěrně známý 68B50 pro sériovou komunikaci. Díky tomu může být OMEN Kilo použit jako jednodeskový počítač, bez jakýchkoli dalších obvodů.

Pokračování příště…

Rubriky: Hardware | Štítky: , , , , | Napsat komentář