Sběrnice počítače


OctopusLAB 79
Sběrnice počítače

Konečně se dostáváme k prvním konkrétním částem našeho univerzálního počítače. Jen si připomeňme, že navazujeme na předchozí díly a rozšiřujeme Univerzální digitální rozhraní (Universal digital interface – UDI), které patří mezi jeden z našich dlouhodobých nekomerčních projektů. Cílem by pak mohl být jednoduchý funkční počítač, respektive jeho části v různých variantách od funkčních napodobenin (replik), přes emulaci (převážně na ESP32) až po čistě softwarovou simulaci na stolním počítači. Tento stroj nese pracovní název RUR_23 (Retro Ultra Replica, ale samozřejmě je zde i inspirace čapkovými RUR, což jsou Rossumovi univerzální roboti).
Pracovní verze dostupných podkladů postupně vzniká na Githubu:
https://github.com/octopuslab-cz/octopus_23_rur

Osmibitová sběrnice

Počítačová sběrnice (anglicky bus) tvoří hlavní „datovou páteř“ celého zařízení. První jednoduchou částí, kterou si vytvoříme, bude zobrazovací jednotka. Ta plní jedinou funkci – má ukázat aktuální stav, co se na dané sběrnici děje. Většina historických počítačů nedávala programátorům/operátorům ani jinou možnost, než pomocí žároviček ukazovat hodnoty jedna nebo nula (svítí, nesvítí) na sběrnici nebo v jednotlivých registrech.
Pro náš projekt to bude datová sběrnice osmibitová. Jeden z projektů je čtyřbitový procesor 4004, na který nám to stačí. Ostatní jsou v převážné většině osmibitové (až na výjimky, kde si poradíme jinak).
Zkusíme to v první fázi bez ohledu na další požadavky a navrhneme si triviální signalizaci pomocí osmi LED (svítivých diod) s připojenými odpory (na omezení proudu). Na obrázku vidíte část (první pětici).

Pro některé projekty (převážně open source) se nám na kreslení schémat a návrhy plošných spojů osvědčil program KiCad, který je s každou svou novou verzí o něco lepší. Minulý týden byla uvolněna nejnovější pracovní verze 0.7 a tak upravenou variantu 0.2 našeho zobrazovače už vytvářím v ní. Jednoduchý plošný spoj navrhuji s variantní možností osazení buď pro osm samostatných rezistorů R1-R8 nebo pro jedno odporové pole RN1 – osmice rezistorů v jenom pouzdře, hodnota 1k je pro soudobé vysocesvítivé diody s malým proudem asi rozumným kompromisem. Ale zkuste si podle toho, jaké barvy konkrétně zvolíte. Návrh opět počítá s možností osadit LED i „na ležato“ nebo použití větší SMD verze.

Základní návrh se opírá o jednoduchou logiku: při logické nule („žádné“ napětí) LED nesvítí a při logické jedničce (5 V) LED svítí.
Mezní hodnoty pro logickou nulu (Low) jsou obvykle v rozmezí 0 V až 0,8 V. Pro logickou jedničku (High) je to nejčastějí od 2 V až do „Ucc“ (Kde Ucc může být 5 V nebo i 3.3 V). Tyto hodnoty závisí na typu hradla a mohou se lišit mezi jednotlivými výrobci.

Z obrázku je patrno, že původní návrh (varianta A) se dá osadit i na univerzální destičce. Další verze (na obrázku B) už je na plošném spoji a je určena k připojení na sběrnici (spodní větší deska PCB), v našem případě ještě přes speciální oddělovač/budič „registr“. V horní části C je 3D tištěná čelní část, ve které jsou svítivky uchycené.)
Proč nejsou diody připojeny přímo na sběrnici? K naší sběrnici totiž budeme chtít připojit také vstupní část (tlačítka nebo přepínače), dále ji budeme chtít propojit s procesorem a pamětí (podle von Neumanova diagramu) a možná i k některým dalším periferiím. Rozhodně nemůžeme mít na sběrnici všechna data najednou, to je asi zřejmé. Proto nás zajímá řízení sběrnice s využitím oddělovačů/řadičů a budičů. Ale o tom až příště.


OctopusLAB 80
Modul vstupu osmibitové sběrnice

V minulém díle jsme si ke sběrnici „natvrdo připojili“ signalizační LEDky. Také jsme ale naznačili, že na připojení více portů se musí použít speciální obvody.

Pro emulátory (nebo repliky) postačí dění na sběrnici pouze simulovat. K tomu se dá použít třeba I2C expandér (osmi nebo šestnáctibitový). V tomto případě je celá vícebitová sběrnice zúžena na dva stavové bity (data a hodinové pulsy) a oddělení jednotlivých „portů“ nám vyřeší samostatně adresovatelná I2C zařízení (například zmíněný expandér). Využívá se toho i v případě malých mikrokontrolérů, kde nemáme dost datových pinů, ale umíme pracovat s I2C. Na obrázku je náš oblíbený Attiny85 s expandérem PCF. Osminohý „brouk“ může tak obsloužit celých osm bitů digitálních vstupů či výstupů.

My však stavíme zařízení, kde potřebujeme na sběrnici přímý přístup na různých úrovních jednotlivých modulů (vstupy, výstupy, paměti, procesor). V dalším kroku si proto připravíme koncept jednoduchého modulu 8bitových vstupů. Chceme mít přepínače, na kterých se nastaví hodnota (jedna nebo nula) a signalizaci, ze které snadněji vyčteme celkový aktuální stav. Bude to trochu připomínat minulou verzi, kde byly pouze výstupní signalizační LEDky, ale připojením spínačů nám vznikla jakási „vnitřní sběrnice“ (MAIN internal BUS). Pokud bychom chtěli použít přímo stavy spínačů, máme ji vyvedenu na samostatném portu (J1 na obrázku). No a k této sběrnici pak připojíme (úplně napravo) speciální obvod, který nám ji oddělí od hlavní osmibitové sběrnice – to je ta, se kterou celé zařízení bude komunikovat navenek (s procesorem, pamětí apod.).

Deska je navržena tak, že se dá použít i s více typy spínačů. Používáme miniaturní přepínače ON/OFF a obě základní možnosti vidíte na obrázku. Také si můžete prohlédnout, jak vypadá modifikovaná knihovna footprintu (Používám KiCad verze 7).

Poupravili jsme si „footprint“, což je fyzická reprezentace součástky (v našem případě spínače) na desce plošného spoje, zahrnující rozměry, tvary a umístění kontaktních plošek. Nikde není psáno, že nemůžeme vytvořit základ pro více variant a až podle potřeby si zvolit, kterou verzi součástky osadíme. Proto si v OctopusLABu velmi často vytváříme vlastní knihovny, které nám umožní zvýšit flexibilitu projektů. Na 3D tiskárně jsme si také vytiskli jednoduchý držák, který usnadní rovnoměrnost rozložení při montáži a činí modul kompaktnějším. Na desce PCB máme vyvedeny obě sběrnice (vnitřní i vnější oddělenou, která bude připojena k hlavní).


Pro oddělení vnitřní sběrnice od hlavní jsme použili integrovaný obvod 74244 (přesněni SN74LS244N – s anglickým popisem octal tri-state buffer/line driver). Tento obvod má dvě čtveřice nezávislých vstupů a výstupů, které dokáží řídit signály s napětím 5V. Umožňuje tak výstupní signál z každého vstupu buď „povolit nebo zakázat“. Když je řízený vstup zakázán, výstupní signál se nachází v takzvaném režimu vysoké impedance (velký vnitřní odpor) a nevytváří tak znatelný odběr proudu z připojeného zařízení. Tento princip se používá k řízení sběrnic a k zabránění konfliktů při přenosu dat.




OctopusLAB 81
Budiče a oddělovače sběrnice

Přestože nám běžné pracovní povinnosti umožní věnovat se našemu projektu jen omezeně, jisté hrubé obrysy a první verze některých modulů RUR_23 už pomalu vznikají. Na obrázku jsou přepínačové vstupy z minulého čísla i LED výstupy z čísla předminulého. Úplně nahoře je sestava ESP32 s osmibitovým expandérem, která slouží pro první testování. Vlevo uprostřed je pak modul osmibitového počítače s procesorem 8085 (Minimal 8085 Single Board Computer), ke kterému bychom rádi celou sestavu jednou také připojili.
Aktuálně zvažujeme, kterým směrem se v projektu přednostně vydat. Rádi bychom oživili některé repliky historických počítačů či jejich periferií. Pak bychom také rádi vytvořili vlastní verze s osmibitovými procesory 8085 a Z80 (možná i dalšími). A k tomu ještě chceme pokročit i v emulátoru na ESP32, který mnohé procesorové desky i moduly periferií relativně snadno zvládne.
Napište nám, zda by vás víc zajímaly stoje běžící „na“ historických součástkách a principech nebo moderní repliky a emulátory, které pro nezasvěceného pozorovatele mohou vypadat stejně, ale o principech počítače mohou vypovědět mírně odlišný příběh.

Některé vhodné integrované obvody (nejen pro sběrnice)

Při návrhu jednoduchého počítače vlastní konstrukce se můžeme potýkat s mnoha situacemi. Jednou ze základních je chování dat na sběrnicích. A jak jsme již v minulém díle naznačili, můžeme využít některé již hotové (a stále dostupné) integrované obvody. Modely s označením 74XX patří do skupiny TTL (Transistor-Transistor Logic), což znamená, že pracují s logickými úrovněmi v rozsahu 0 až 5 V. Pro základní popis obvodů jsme čerpali z více zdrojů, například u tradičního výrobce Texas isntruments: www.ti.com/. Většina z nich je stále k dostání například i u TME (www.tme.eu/cz/). Bývají dostupné v různých typech pouzder, jako jsou DIP (Dual in-line package) či SOP (Small Outline Package). Používají se totiž stále v široké škále elektronických zařízení, jako jsou počítače, tiskárny a průmyslové přístroje.

74244 (SN74LS244)

(8-ch, 4.75-V to 5.25-V bipolar buffers with 3-state outputs)
Tento neinvertující budič sběrnice má dva samostatně řízené čtyřbitové porty. Je tedy celkem osmibitový a je „jednocestný“, což znamená, že signál může proudit pouze jedním směrem – od vstupů k výstupům. Tento obvod se obvykle používá pro zesílení signálu nebo pro oddělení zařízení od citlivých výstupů.
V katalogovém listu se mimo jiné dozvíme:
Input type: Bipolar | Output type: 3-State (takže výstup je s třístavový).
IOL (Max) 28 mA | IOH (Max) -15 mA, takže při výstupní logické nule obvodem může téct až dvojnásobný proud (údaje různých výrobců a šarží se mohou lišit).


74245 (SN74LS245)

(Octal bus transceivers)
Podobný obvod pro osmibitové sběrnice. Je ale obousměrný, což znamená, že umožňuje proudění signálu v obou směrech. Tento obvod má osm vstupů a osm výstupů, které mohou být použity jako vstupy nebo výstupy podle toho, jak je obvod konfigurován. Je používán v systémech, které vyžadují komunikaci mezi více čipy nebo periferiemi, jako jsou právě sběrnice.


74373 (SN74LS373)

(Octal D-type Transparent Latches with 3-state Outputs)
Jedná se o obvod typu Latch s osmi vstupy a osmi výstupy. Používá se k ukládání a udržování dat v digitálních systémech. Každý z osmi vstupů lze nastavit na logickou hodnotu „1“ nebo „0“ pomocí signálů přivedených na příslušný vstup. Tato hodnota zůstane na výstupu uložena, dokud se nezmění stav na příslušném vstupu. Obvod reaguje na tzv. „náběžnou hranu“ (positive-edge triggered), což znamená, že data se uloží na výstupy v okamžiku náběžné hrany na řídícím (hodinovém) signálu.





OctopusLAB 82
Budiče a oddělovače sběrnice 2

V minulém díle jsme uvedli první část přehledu vybraných integrovaných obvodů. Mají jedno společné, jsou to speciální součástky především pro osmibitové sběrnice, které se používají už desítky let až do dneška. Určitě by stály za zmínku i další, ale zaměřili jsme se na ty, které v naší konstrukci použijeme. Takže ve výčtu ještě zmíníme jeden, který se dnes pokusíme i oživit:

74374 (SN74LS374)

Obvod reaguje na „sestupnou hranu“ (negative-edge triggered), což znamená, že data se uloží na výstupy v okamžiku sestupné hrany na řídícím signálu.
Tento obvod lze použít pro ukládání adres, řídících signálů nebo datových hodnot v počítačových a jiných digitálních systémech.
My ho použijeme jako „buffer“, který si zapamatuje jeden okamžik, ve kterém byl připojen na hlavní sběrnici a na výstupech zachová tento stav až do doby, kdy načteme jiný.

Při jednoduchém experimentování pouze s jedním modulem LEDek a jedním modulem vstupů na sběrnici si vystačíme s připojením řídícího pinu OE na zem. Pinem CP (clock) pak ukládáme stav ze vstupů do bufferu (slouží jako střadač / paměťový registr).

Toto je už verze č. 2, protože v té první jsem se dopustil jedné chyby, o které se chci více rozepsat, jelikož to není poprvé (ani naposled). Pokud chceme zobrazit na svítivé diodě logickou jedničku nebo nulu, bylo by žádoucí, aby v jedničce dioda svítila a v nule ne. Takže diodu připojíme přes odpor katodou k zemi a máme splněno. Když je na výstupu hradla (a tudíž na vstupu diody) logická „1“ (napětí), proud teče diodou do země a dioda svítí.
TTL hradla jsou ale logické obvody, které pracují s relativně malým proudem. Proto hradlo občas není schopno dodat dostatečný proud ani pro rozsvícení LED. Mezní hodnoty proudu používané v TTL hradlech se liší v závislosti na konkrétním typu hradla. Již minule jste si této zásadní charakteristiky mohli povšimnout:
IOL (Max) 28 mA | IOH (Max) -15 mA, takže při výstupní logické nule obvodem může téct až dvojnásobný proud (údaje různých součástek, výrobců a šarží se mohou lišit).
Takže na zobrazení „1“ s diodou spínanou k nule jsme omezeni proudem IOH a navíc, pokud zatížíme více výstupů, obvod se začne chovat nestandardně. Proto musíme logiku otočit a diodu rozsvítíme při logické nule (pak nám teče proud „od plusu“, ale ten je už dostatečný). Pro lepší zobrazování se používal ještě dodatečný spínací tranzistor, který by mohl jednak zvýšit možný proud diodou, ale především nám pak korektně signalizuje „0“ / „1“. V našem návrhu na to musíme myslet a nebude problém signalizovat stav invertovaně. Procesor načte, co je na sběrnici, pak odpojí vstupní signál od sběrnice a znegované to pošle po stejné sběrnici do bufferu, který udrží stav, který nás zajímá „na LEDkách“.



Blokové schéma modulu vstupů (přepínače) a výstupů (LED signalizace) na jedné společné datové sběrnici, ke které můžou být připojeny i další periferie (například paměti nebo procesor).



OctopusLAB 83
Základní oživení universální sběrnice

V tomto díle konečně propojíme vstup (osm přepínačů se signalizací) a výstup (střadač s osmi LEDkami) na společné osmibitové sběrnici. K té si připojíme i signalizaci, abychom mohli otestovat a zkontrolovat, že jsou tam pouze námi požadované stavy a zda se obvody chovají podle předpokladu.
Otestujeme jednoduché zadání, ve kterém na vstupu nastavíme jeden konkrétní BYTE, ten pošleme na sběrnici a ve třetím kroku ho uložíme do výstupního bufferu. Řídící vstupy jednotlivých obvodů jsme v první fázi zkoušeli řídit pomocí jednoduchých skriptů z ESP, ale vzhledem k jednoduchosti zapojení jsme se v tomto okamžiku vrátili k ovládání pomocí několika přepínačů. Je to názornější, intuitivnější a v tuto chvíli paradoxně i rychlejší.

  1. U modulu vstupních přepínačů ovládáme obvod 74LS244 tak, že k negovaným vstupům 1G/2G připojíme +Ucc (obvod sběrnici odpojí a výstup je ve stavu vysoké impedance) nebo GND – pak jsou stavy přepínačů připojeny ke sběrnici.
  2. Jednoduchý modul pro zobrazení stavu má osm LEDek, které spínáme k plusu (v logické nule svítí). Sjednotili jsme tak nastavení i s ostatními moduly a celou sběrnici pak vidíme invertovaně (negovanou: 1=0 / 0=1).
  3. Modul registru (buffer) obsahuje obvod 74LS374, který má dva řídící vstupy. První z nich aktivuje obvod a používá se v případě více obvodů pro výběr jednoho z nich. V našem případě nám stačí negovaný QE (E=enable) připojit k zemi a tím je obvod aktivován trvale. Dalším vstupem je CLK (clock), hodinový puls, který sestupnou hranou (z 1 do 0) uloží stav, který je připojen ke vstupům. Při správném použití spínače nám postačí „zapnout/vypnout“ a stav je uložen.

Celé reálné zapojení pak vidíte na obrázku. Vlevo jsou tři ovládací tlačítka, ze kterých se používají zatím jen dvě – pro CLK a G. Ve spodní části, která na obrázku není, máme samotnou sběrnici, kterou tvoří zatím jen několik propojených osmipinových hřebenů, ke kterým se napojují dílčí osmibitové rozhraní z každého modulu.

Ještě pro lepší pochopení, jak jsme testovali, si znázorníme i graficky. Na vstupech (INP.) jsme nastavili hodnotu (podobně jako je na fotce máme „10101101“). Hodnotu stavů vidíme na signalizačních LEDkách u přepínačů, jelikož jsou připojeny napřímo. Pokud je G (invertované G1/G2) v log. „1“ (připojeno na +Ucc) – pak je hlavní společná sběrnice odpojena, což by měl být výchozí stav.
Připojíme-li invertované G k zemi, data se dostanou i na sběrnici (BUS) – na obrázku vlevo.
Hodinovým pulsem (CLK) sestupnou hranou (1 do 0) se data „posunou“ do registru a zůstávají tam uchována až do dalšího přepsání. V tuto chvíli můžeme od sběrnice vstupy odpojit a LEDky na výstupu (REG) stále drží poslední (předchozí) uloženou hodnotu.
Pravá část obrázku ukazuje, jak se data se sběrnice uloží do registru (REG). Zatím nám slouží jen jako výstupní zobrazovací jednotka, ale v dalším kroku jí už budeme moci připojit k dalším periferiím (expander, paměť, procesor nebo mikrokontroler).

Modulů máme více a starší verze (jsou to ty, co jsme použili v ukázce), můžeme případným zájemcům poskytnout. Pokud si „hrajete“ s číslicovou technikou nebo mikroprocesory, určitě se vám hodí. Ideálně, když se po domluvě zastavíte u nás v LABu (Praha Vršovice).



uvidíme, jak se vejde






http://upgrade.kongju.ac.kr/data/ttl/74374e.html
https://www.ti.com/product/SN74LS244