====== 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