====== Kombinační logické obvody ======
Jsou to takové logické obvody, která okamžitě reagují na vstup. Jinými slovy neberou potaz v historii, nemají paměť. Skladají se pouze z logických hradel (z čeho jiného taky) a **neobsahují zpětnou vazbu**. Jakoukoliv implementaci je možné vyjádřit pomocí hradel NAND a invertorů. To se dá odůvodnit přes tzv. duální tvrzení (viz booleovská logika FIXME). NAND se používá, protože je konstrukčně nejjednodušší (AND je NAND s invertorem). Vyplýva to z možnosti zapsat A OR B = NOT(A) NAND NOT(B)(([[wp>De Morgan's laws]])). Hradlo NAND je mozne použít jako invertor, pokud se připojí na oba vstupy stejný signál (ale je to "drahé").
^ A ^ B ^ A or B ^ not(A) nand not(B) ^
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 |
===== Multiplexor =====
Z několika vstupů vybírá jeden. Realizace pomocí dekodéru a AND hradel a OR hradla. S0 a S1 jsou bity "adresy", podle které se vybírá jeden ze vstupů I0--3 a posílá se na výstup. Počet vstupů je 2//n//, kde //n// je počet bitů adresy. To protože je 2//n// kombinací hodnot bitů adresy.
[[https://commons.wikimedia.org/wiki/File:Multiplexer_Example01.svg|{{ https://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Multiplexer_Example01.svg/500px-Multiplexer_Example01.svg.png |Multiplexor}}]]
[[http://www.falstad.com/circuit/e-mux3state.html|Interaktivní ukázka]]
===== Demultiplexor =====
Jeden vstup přiřadí do správného výstupu. Dekodér a AND hradla. Opět zde figuruje adresa S0 -- //n//, tentokrát její rozsah určuje počet výstupů. Princip je přesně opačný, než u multiplexoru.
[[https://commons.wikimedia.org/wiki/File:Demultiplexer_Example01.svg|{{ https://upload.wikimedia.org/wikipedia/commons/thumb/1/15/Demultiplexer_Example01.svg/500px-Demultiplexer_Example01.svg.png |Demultiplexor}}]]
===== Kodér (enkodér) =====
Slouží k zakódování zprávy. Jednoduchým kodérem se myslí takový, který očekává pouze na jednom ze vstupů log. 1 a podle toho, na kterém vstupu to bylo, nastaví hodnoty na výstupech. Z takového signálu lze pak původní zprávu dekódovat. Vstupů je 2//n//, kde //n// je počet výstupů.
Používá se také na obsluhu [[wp>Seven-segment display|sedmi-segmentového displaye]]. Na vstup se mu přivede např binárně zakódovaná čislice, a na výstup vyleze napětí na těch drátech, které rozsvěcují patřičné segmenty.
{{ koder_or.png?300 }}
[[https://en.wikipedia.org/wiki/File:Encoder_diagram.svg|{{ https://upload.wikimedia.org/wikipedia/commons/thumb/4/4b/Encoder_diagram.svg/500px-Encoder_diagram.svg.png | Kodér 4 do 2}}]]
===== Dekodér =====
Slouží k rekonstrukci zakódované zprávy. Nejčastěji se používají binarní dekodéry //n do 2n// (např. 2 do 4, 3 do 8, ...).
[[https://commons.wikimedia.org/wiki/File:Decoder_Example.svg|{{ https://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Decoder_Example.svg/500px-Decoder_Example.svg.png |Dekodér 2 do 4}}]]
[[http://www.falstad.com/circuit/e-decoder.html|Interaktivní ukázka]]
===== Binární sčítačka =====
==== Poloviční ====
[[https://commons.wikimedia.org/wiki/File:Half_Adder.svg|{{ https://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Half_Adder.svg/200px-Half_Adder.svg.png|Poloviční sčítačka}}]]
^ A ^ B ^ S ^ C ^
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
[[http://www.falstad.com/circuit/e-halfadd.html|Interaktivní ukázka]]
==== Úplná ====
[[https://commons.wikimedia.org/wiki/File:Full_Adder.svg|{{ https://upload.wikimedia.org/wikipedia/commons/thumb/a/aa/Full_Adder.svg/500px-Full_Adder.svg.png|Úplná sčítačka}}]]
^ A ^ B ^ Cin ^ S ^ Cout ^
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 | 1 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
[[http://www.falstad.com/circuit/e-fulladd.html|Interaktivní ukázka]]
Jde o dvě poloviční sčítačky za sebou a jeden OR. Dá se to jednodušše představit jako dva různé obvody -- jeden pro součet a jeden pro carry.
===== Shrnutí (na co nezapomenout) =====
* kombinační obvody nemají zpětnou vazbu (a tedy ani paměť)
* reagují na vstup téměř okamžitě patřičnou úpravou výstupu (pouze fyziklní limity)
* skládají se z log. hradel, vše se dá udělat pomocí NANDů díky duálnímu tvrzení booleovy algebry: A or B = not(A) nand not(B), např AND se implementuje jako not(NAND), NAND lze použít i jako invertor, ale přímé použití invertoru je "levnější"
* kodér vs dekodér: kódování z jednoho do druhého a naopak. Například kód 1 z N na binární číslo (běžně má kodér 2n vstupů a n výstupů, dekodér naopak
* multiplexor vs demultiplexor: výběr jednoho signálu z mnoha vs poslání vstupu na jeden z výstupů, má adresní vodiče, vnitřně využívá dekodér (jak multiplexor, tak demultiplexor)
* sčítačka: jednobitová poloviční: XOR a AND, výstup z XORu je výsledek, z ANDu je carry
* úplná sčítačka: dvě poloviční za sebou, znát schéma! (výsledek je prostě součet těch 3 vstupů, tedy A, B a Cin, vyšší bit výsledku je Cout, nižší S)
==== Co je třeba vědět kdyby se zeptali ====
* duální tvrzení - výsledek operace se nezmění, pokud invertujeme vstupy, výstupy i operaci (or<->and, tedy A or B = not(A) nand not(B))
* vědět, jak se dělá pravdivostní tabulka, aby ji člověk uměl nakreslit např. pro poloviční sčítačku